Arduino MODBUS haberleşme

huh

Katılımcı Üye
Katılım
10 Şub 2007
Mesajlar
739
Puanları
58
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 );
}
 
Moderatör tarafında düzenlendi:
Konu Sah
huh

huh

Katılımcı Üye
Katılım
10 Şub 2007
Mesajlar
739
Puanları
58
Vcc GND uçlarını bağlamamışım ttl485te.:(

İlk mesajdaki kod ile, enerjiyi verince çalıştırdım.:)
 
Konu Sah
huh

huh

Katılımcı Üye
Katılım
10 Şub 2007
Mesajlar
739
Puanları
58
yanlış mesaj.
 

sparkk

Üye
Katılım
11 Tem 2012
Mesajlar
524
Puanları
33
Kendi kendini çözen soru
 

şef112

Üye
Katılım
30 Ara 2008
Mesajlar
897
Puanları
33
Yaş
38
Konum
BARTIN
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 );
}
Merhaba hocam iki şey sorucam 1.Kablo bağlantılarını nasıl yaptınız z merak ettim
2.modbus rtu - ascii var wpl softta arduino uno yu nasıl eşleştirdiniz yani stop bit 1 even 7 baud rate 9600 bu ayarları arduino da Nasıl yaptınız! Kullandığınız protokol ascii miydi.
Master delta plc - Slave ardunio data register lar nasıl oluyor onu anlayamadım??
Bende siz gibi öğrenmek amaçlı arduino aldım, ardunio ile fazla bilgim yok.
Bu arada iyi bayramlar
 
Son düzenleme:
Konu Sah
huh

huh

Katılımcı Üye
Katılım
10 Şub 2007
Mesajlar
739
Puanları
58
Merhaba.
Sizede iyi bayramlar.
Dosyalar biryerlerde duruyor ama o işe biraz ara verdiğim için aramam lazım.

Bulduğumda buradan yazarım.

Ama yukarıda mevcut mesajdan hatırladıklarımla birşeyler yazayım.

Öncelikle plc ile denemedim. Fultek wintr scada programı ile haberleşme kurdum.

Ama pc ile olduğuna göre plc ilede olacaktır.

Ardino da verilen koda bakarsanız 9600 8N2 yazar. Baud 9600, 8 bit, none, 2 ayarlarını kullanıyor. Bu örnek kod slave için yazılmış. plc tarafı da aynı ayarlanacak ancak plc master olmalı. Rtu haberleşme.

Bağlantı şeklide önceki mesajda var. Sadece pc tarafındaki A ve B uçlarını plc de bağlayacaksınız. A-A ya B-B ye.

40001 modbus adresine karşılık plc tarafında MODRW komutu için h0 olacak, ama emin olamadım. Kontrol etmeyi ihmal etmeyin.

Benim diğer modbus ile ilgili mesajlarımda modrw komutu ve master plc ayarları ile ilgili bilgi var. Oradan veya web üzerinden bulabilirsiniz.
 
Son düzenleme:

Sponsor Bağlantı

Forum istatistikleri

Konular
105,030
Mesajlar
739,522
Kullanıcılar
390,474
Son üye
ismailsade36

Yeni konular

Üst