Merhaba.
Arduino uno ile modbus haberleşme üzerinde öğrenme amaçlı çalışıyorum.
PLC ile modbus haberleşmede kullandığım USB RS485 dönüştürücüyü bilgisayara bağladım.
İnternetten bulduğum modbus slave kodunu ufak değişiklikler ile basitleştirerek arduinoya yükledim.
FULTEK scada programı ile bağlantı ayarlarını kurdum ancak bir türlü değer okuyamıyorum. Fultek ile connect bağlantı kurduğumda sürekli BAD sinyali alıyorum.
okuma yaptığım tag adresi 40001
Yanlışım nerede acaba????????
kod şöyle:
#include <SimpleModbusSlave.h>;
enum
{
// slave üzerindeki regesterlarımızı tanımlıyoruz.
// ilk register 0 numaralı adrese sahip olur ve sonrasındaki her register için adres 1 artar.
deneme,
HOLDING_REGS_SIZE // Yine buna dokunmuyoruz.Register sayımızı tutar ve otomatik artar
};
unsigned int holdingRegs[HOLDING_REGS_SIZE];
void setup()
{
modbus_configure(&Serial, 9600, SERIAL_8N2, 1, 2, HOLDING_REGS_SIZE, holdingRegs);
modbus_update_comms(9600, SERIAL_8N2, 1);
}
void loop()
{
modbus_update();
holdingRegs[deneme] = 34; // master 0.1.0 paketinde bu değeri okuyor.
}
Arduino TTL 485 dönüştürücü ile aşağıdaki şekilde bağlı.
arduino ttl485 PC de usb-rs-485 dönüştürücü
---------- -------- ------------------------------------
2 ----------------RE,DE
1-TX ------------DI
0-RX-------------DO
...................B-------------------------------------B
...................A-------------------------------------A
Farklı bir kütüphane ve kod ile denedim yine olmadı.
hız 19200 pin 4 ayarlandı.
Yalnız burada haberleşme standardı ile ilgili çok ayrıntı yok, bu kod için biraz deneme yanılma ile ilerliyorum.
yeni kod:
#include <ModbusRtu.h>
// assign the Arduino pin that must be connected to RE-DE RS485 transceiver
#define TXEN 4
// data array for modbus network sharing
uint16_t au16data[16] = {
3, 1415, 9265, 4, 2, 7182, 28182, 8, 0, 0, 0, 0, 0, 0, 1, -1 };
/**
* Modbus object declaration
* u8id : node id = 0 for master, = 1..247 for slave
* u8serno : serial port (use 0 for Serial)
* u8txenpin : 0 for RS-232 and USB-FTDI
* or any pin number > 1 for RS-485
*/
Modbus slave(1,0,TXEN); // this is slave @1 and RS-485
void setup() {
slave.begin( 19200 ); // baud-rate at 19200
}
void loop() {
slave.poll( au16data, 16 );
}