(Serial通信 Modbus RTU RS-485を理解) 自宅で手軽に通信環境を構築
記事の目的
通信Modbus RTU RS485を理解するには,自宅でその通信環境を整え,自分に色々試験を行うことが近道である。本記事では誰もが簡単に扱えるマイコンArduinoを使用し,通信環境を構築する手順を示す。
使用する機器と配線の紹介
今回実現する通信は,Modbus RTU RS485 Half Duplex(半二重通信)である。
使用する機器は以下の通りである。
PCさえあれば,\5,000-程度の費用で試験環境の構築が可能である。
➀USBポートを二つ以上搭載したPC
➁マイコン及び⓸ジャンパワイヤ:Arduino UNO R3
更に,PC内にModbus Slave側となるシミュレータを設けるため,ソフトウェア"Modbus Slave"をインストールする必要がある。(以下URLからDownload可能)
このソフトウェアは起動から10分間は無償での使用が可能である。
通信動作の仕様, Sketch紹介及び設定
通信で行う動作仕様として,Masterから指定するRegisterに対し,決まった時間毎に書き換え処理(Fucnction code:06, Preset Single Register)を繰り返すSketchを作成しArduinoに実装する。Baud rate 115,200bpsとし,その他の設定はArduinoの標準設定(8data bits, No Parity, One stop bit)とする。
Arduino(Modbus Master)に実装したSketch
#include <ModbusMaster.h> //Library for using ModbusMaster
ModbusMaster node; //object node for class ModbusMaster
void setup()
{
Serial.begin(115200); //Baud Rate as 115200
node.begin(1, Serial); //Slave ID as 1
}
void loop()
{
node.writeSingleRegister(0x40000,111);
delay(1000);
node.writeSingleRegister(0x40001,1);
delay(1000);
node.writeSingleRegister(0x40000,0);
delay(1000);
node.writeSingleRegister(0x40001,0);
delay(1000);
node.writeSingleRegister(0x40000,2);
delay(1000);
node.writeSingleRegister(0x40001,2);
delay(1000);
node.writeSingleRegister(0x40000,3);
delay(1000);
node.writeSingleRegister(0x40001,9);
delay(1000);
}
Modbus Slave(Modbus Slave側)もConnection setupにてMaster側の通信設定に合わせた形とする。
Slave Definitionでは,Slave IDを"1″とし,Master側のプログラムにより書き換わるレジスタの内容を把握するため,Function code 03 Read Holding Registerの設定とする。
動作検証
動画の通り,Register"0x40000″及び"0x40001″の値が時間毎に書き換わっていることが確認でき,Modbusの試験環境が整っていることを示すことが出来た。
また,Modbus slaveより出力されるCommunication logも正常動作が確認できた。
実際に得られたテキストデータもCommunication log_0712よりダウンロード可能である。
以下はArduinoのスケッチ"node.writeSingleRegister(0x40000,111);"の指令に対するModbus slave側の受信内容及び送信内容である。
参考文献
PCとArduinoを接続するための手順及び設定
(初心者でもわかる・できる!Arduinoを使った初めての電子工作実践)
Modbus プロトコル概説書
Arduino 日本語リファレンス
On-line CRC calculation and free library
RS-485 MODBUS Serial Communication with Arduino as Master (Circuit Digest)
ModbusMaster v2.0.1 § writeSingleRegister()
Modbus tools
ディスカッション
コメント一覧
まだ、コメントがありません