ラズパイ一台でModbusMasterとModbusSlaveの両方を存在させることができるのかを検証していきます

今回の処理の流れとしては上の画像のような構造で行っていきます。
PCのModbusToolアプリを使用して検証を行っていきます
ModbusToolについては下記を参照しました。
https://digital-light.jp/2022/06/15/tested-modbus-master-slave-simulator/
ModbusToolのダウンロードが終わったらModbusSlaveの設定を行っていきます。

Slaveを開いたら左上の「Mode」を[TCP]、「TCP」のPortを今回は[502]、右の「Slave ID」を[1]、画面中央の「Start」を[0]、下の値を今回は例として[123]に設定したら右上の[Listen]を押してlogに「Listening to TCP port 502」と表示されればOKです!
PC側のSlaveの設定が終わったらラズパイ側のNode-red設定を行います。

まずはラズパイをMasterにしてPC側のSlaveが読み込めるかの検証を行います。
injectノードはpayloadをJSONにして
{
"fc": 3,
"unitid": 1,
"address": 0,
"quantity": 1
}
上記のコードを入力
modbus-flex-getterノードの中身は

画像の「Host」の部分をPC側のIPで設定してください。
最後にdebugノードを繋いでデバッグのpayloadに[123]が出力されれば成功です。
ここまでできたら次は演算(今回は値を×10)を行いラズパイをSlaveにしてPC側のModbusMasterで読めるかを行います。
まずはModbus Server(ラズパイSlave)を追加


Modbus Serverの中の設定は画像のような形で行ってください。
Serverの設定が終わったら次はfunctionノードとmodbus-flex-writeノードの追加を行い
functionノード側へは×10するために
const v = Array.isArray(msg.payload) ? msg.payload[0] : msg.payload?.data?.[0];
const out = Number(v) * 10;
msg.payload = {
fc: 16,
unitid: 1,
address: 0,
quantity: 1,
value: [out]
};
return msg;
上記のコードを入力、modbus-flex-writeノードは書き込み先=自分にするため

画像のような形でHost、Portなどの設定を行ってください。
ここまでできたらNode-redでの設定は終わりです。
PC側に戻ってModbus Masterの設定を行っていきます。

上記の画像のように「Mode」を[TCP]、「TCP」のPortを[1502]、「IP Address」はラズパイのIPアドレスを入力、「Slave ID」を[1]、「Start」は[0]で「Size」は[1]になっていますが[20]くらいで設定しておいても良いと思います、設定が終わったら右上の「Connect」を押してlogに
「Connected using TCP to “ラズパイのIPアドレス”:1502」と表示されればOKです!
すべての設定が終わったら画面中央の「Function」項目にある[Read holding]のボタンを
クリックすると下の0の項目にSlaveで入力した値×10(同じように設定していた場合1230)が表示されます

