FAIRINO Modbus TCPでの通信方法

ロボットプログラムでのModbus TCP通信設定方法

FAIRINOではマスター側、スレーブ側での使用が可能ですが今回はスレーブ側として使用する場合の設定を紹介。

1.IPアドレス等の設定

Program Teachingで動作プログラムを開いた状態でツールの一番右のアイコン(ポップアップの表示)をクリックする。

拡張されたツールバーに表示される4つのアイコンの内、一番左のアイコン(①)をクリックするとModobus TCPの設定ページが表示される。

IPアドレス(マスター側)、ポート名(502)、スレーブNoを入力すれば、マスター側機器と通信可能な状態になる。

マスター側からAI0(アドレスは100)を変更すると、ロボット側も変更されていることがわかる。

2.ロボット動作プログラムの設定方法

作成したいプログラムを開き、Modbusのアイコンをクリックする。開いたダイアログのModbus_TCPを選択

開いたダイアログに対してSlave_Stationを選択

今回実施したい入出力の設定を入力して一番下のApplyボタンを押すとプログラムにコマンドが登録される。

このままでは出力はできても入力値の取得ができないので、入力値の取得をするために直接Lua形式のデータ修正を行う。

ツールバーの双方向矢印アイコンをクリックすると直接入力モードに切り替わる。

変数の取得は変数とModbus読み取りの関数を=で結ぶことで取得できる。
連続4個のデータを取得する場合は下記のように4個の変数を割り当てる。

- 変更前
ModbusSlaveReadDI(DI3,4)

- 変更後
- DI3から連続4つのデータを取得する
local  les1,les2,les3,les4 = ModbusSlaveReadDI(DI3,4)

以下のように取得した変数は、他の関数の引数としても使用可

- DI3から連続4つのデータを取得する
local  les1,les2,les3,les4 = ModbusSlaveReadDI(DI3,4)
-- DO0から2つ分の連続データを"1","0"とする
ModbusSlaveWriteDO(DO0,2,{les1,les4})

-- AI0(ushort)を読み取り、その値から1を引いた数をAO0へ出力する
local res5 = ModbusSlaveReadAI(AI0,1)
ModbusSlaveWriteAO(AO0,1,{res5-1})

現状は入出力ともに浮動小数点データの設定がうまくできないがやり方を把握できていない。

-- floatデータの書き込みは現状うまくいかない。調査中
ModbusSlaveWriteAO(AO32,1,{1.45})

【参考】取得したデータはLua言語のプログラミングで簡単な変換bit配列→byte等は可能です。

-- 4bitを整数(unsigned)へ変更 if文ないと構文エラーになる
if not(les2 == nil) then
    local num = les1+les2*2+les3*4+les4 * 8
    ModbusSlaveWriteAO(AO15,1,{num})
end