MODBUS 紹介
MODBUS はシリアル通信プロトコルであり、標準的な産業用通信プロトコルであり、現在産業用電子機器間の一般的な接続方法です。
Elite ロボットは、MODBUS クライアント側をサポートするだけでなく、サーバ側機能もサポートします。
通信プロトコルは、MODBUS TCP および MODBUS RTU をサポートします. MODBUS TCP 通信は、コントローラのイーサネット インターフェイスに接続する必要があり、ModBus RTU 通信は、コントローラの RS485インターフェイスまたはフランジの端にある RS485インターフェイスに接続できます。
MODBUS クライアント側の機能は LUA スクリプトによって実現されます。そのうち MODBUS クライアントは既にカプセル化されたインターフェイスであり、ユーザーは対応するパラメーターを入力するだけでいいです。他に特別なプロトコル要件がある場合は、TCP/UDP 通信、RS485 通信、TCI 通信 (フランジの端にある RS485)、および 232 通信も使用できます。具体的な方法については、Elite_lua のマニュアルを参照してください(https://drive.google.com/drive/folders/1l4xPfI6GooncpPrRxoS4nZwXp5MwWBUe)。
ctx = modbus_new_rtu(choose, baud, parity, data_bit, stop_bit)
パラメーター:
int型 choose: 0:コントローラの RS485 (ディフォルト),
2: フランジの端にある RS485(必須フィールド)
int型 baud: 4800 9600 ...(ディフォルトは4800)
int型 parity: ‘E’,‘N’,‘O’対応するASCII コードの値は 69,78,79(ディフォルト値は78)
int型 data_bit: 7/8 (ディフォルト値は8)
int stop_bit: 1/2 (ディフォルト値は1)
戻り値:
ctx: modbusハンドル
例:ctx = modbus_new_rtu(1, 9600, 78, 8, 1)
ctx = modbus_new_tcp(ip, port)
パラメータ:
string型 ip:modbus slaveのIPアドレス
int型 port:modbus スレーブのポート番号
戻り値:
ctx:modbusハンドル
例:ctx = modbus_new_tcp("192.168.1.15", 502)
ret = modbus_connect(ctx)
パラメータ:
ctx:modbusハンドル
戻り値(int型):
ret: -1:接続しません
他の値であれば成功です。
注意:MODBUS RTU ハンドル接続している場合,このインターフェースの戻り値は接続が成功するかどうかを判断する根拠ではない。
例:modbus_connect(ctx)
modbus_close(ctx)
パラメータ:
ctx:modbusハンドル
戻り値:空
例:modbus_close(ctx)
ret = modbus_set_slave(ctx, slave_id)
int型 slave_id:スレーブID
戻り値(Int型):ret: -1:接続に失敗
他の値であれば成功
例:modbus_set_slave(ctx ,0x2)
ret = modbus_write_register(ctx, reg, value)
パラメータ:
ctx:modbusハンドル
int型 reg:ゴールド レジスタのアドレス(十進数)
int型 value:値
int型 戻り値: ret:-1:エラー
他の値であれば成功
例:modbus_write_register(ctx , 771, 1)
reg_value = modbus_read_bits(ctx, reg, len)
パラメータ:
ctx:modbusハンドル
int型 reg:コイル アドレス
int型 value:コイル個数(<128)
テーブル型 戻り値: reg_value:コイルアドレスのデータリストを読み込みます
例:ret= modbus_read_bits(ctx , 771 ,1)
ret = modbus_write_bits(ctx, reg, size, value)
パラメータ:
ctx: modbusハンドル
int型 reg:コイル アドレス
int型 size:コイル個数
int型 value:コイル書き込みデータ、テーブル型
int型 戻り値: ret: -1:エラー
他の値であれば成功
例:value_array = {1, 1, 1}
modbus_write_bits(ctx, 1, 3, value_array)
ret = modbus_write_bit(ctx, reg, value)
パラメータ:
ctx:modbusハンドル
int型 reg:コイル アドレス
int型 value:コイルに書き込むデータ
int型 戻り値: ret: -1:エラー
他の値であれば成功
例:modbus_write_bit(ctx , 1, 1)
ret, reg_value = modbus_read_input_register(ctx, addr)
パラメータ:
ctx:modbusハンドル
int型 addr:入力レジスタ アドレス
int型戻り値: ret: -1:エラー
他の値であれば成功
int型 reg_value:正常に返されたレジスタ値を読み出し
例:modbus_read_input_register(ctx , 1)
modbus_write_registers(ctx, reg, size, value)
パラメータ:
ctx:modbusハンドル
int型 reg:レジスタ アドレス
int型 size:個数
テーブル型 value:書き込むデータ
int型 戻り値: -1:エラー
他の値であれば成功
例:modbus_write_registers (ctx , 1, 3, {0x3444, 0x3333, 0x4444})
modbus_read_registers(ctx, addr, len)
パラメータ:
ctx: modbusハンドル
int型 addr:レジスタ アドレス
int型 len:個数範囲は [1,125]
戻り値: 失敗:空,
成功:レジスタ値はテーブル型
RTU 例:
sleep(5)
ctx = modbus_new_rtu(0,9600,78,8,1)
modbus_connect(ctx)
ret1 = modbus_set_slave(ctx,0x3)
if(ret1 == -1) then
elite_print("Wrong address")
end
ret2 = modbus_write_register(ctx,771,1)
if(ret2 == -1) then
elite_print("Write error")
end
ret3,value = modbus_read_register(ctx,771)
if(ret3 == -1) then
elite_print("Read error")
end
elite_print("value is:",value)
modbus_close(ctx)
TCP例:
sleep(5)
ip = "192.168.1.7"
port = 502
ctx = modbus_new_tcp(ip,port)
repeat
ret = modbus_connect(ctx)
until(ret ~= -1)
ret2 = modbus_write_register(ctx,771,1)
if(ret2 == -1) then
elite_print("Write error")
end
ret3, value = modbus_read_register(ctx,771)
if(ret3 == -1) then
elite_print("Read error")
end
elite_print("value is:",value)
modbus_close(ctx)