Raspberry Pi(ラズパイ)と三菱製PLCをMCプロトコル通信で接続する場合、PLCへ固定値(定数)を書き込むことはできても、プログラム内の変数データを送信する方法で悩むことがあります。実際には、変数をそのまま送る専用命令があるわけではなく、PLCのデバイスアドレスへ書き込み要求を行うことでデータを渡します。
この記事では、ラズパイ上で取得した変数データを三菱PLCへ送信する基本的な考え方や、MCプロトコルで使用する書き込み処理、注意点について解説します。
MCプロトコル通信でPLCへデータを送る基本的な仕組み
MCプロトコル(MELSEC Communication Protocol)は、三菱電機のPLCと外部機器を通信させるためのプロトコルです。ラズパイなどの上位機器からPLCのデバイスへ読み書きを行うことができます。
ラズパイ側のプログラムでは、センサー値や計算結果などを変数として保持します。しかしPLC側から見ると、その値が変数なのか固定値なのかは関係ありません。PLCが受け取るのは、指定されたデバイスへ書き込まれた数値データです。
例えば、ラズパイ内の変数「temperature」に25という値が入っている場合、その25という値をPLCのD100などのデータレジスタへ書き込む処理を行います。
変数データを送信する場合に使用するMCプロトコルの命令
MCプロトコルでPLCへ値を書き込む場合は、基本的に「ランダムライト」や「一括書込み」のコマンドを使用します。
例えば、PLCのデータレジスタD100へ値を書き込む場合、ラズパイ側では以下のような流れになります。
- ラズパイのプログラムで変数に値を格納する
- MCプロトコルの書き込みコマンドを生成する
- PLCの書き込み先デバイス(例:D100)を指定する
- 変数の値をデータとして送信する
つまり、「変数を送る命令」を探すのではなく、「変数の中身をPLCデバイスへ書き込む」という考え方になります。
定数なら送れるのに変数が送れない原因
定数で送信できる場合、MCプロトコルの通信自体は正常に動作している可能性が高いです。問題は多くの場合、プログラム側で変数の値を通信データへ正しく変換できていないことにあります。
例えば、プログラム内で以下のような処理をしている場合があります。
書き込みデータとして「100」を直接指定するとPLCへ届くが、「value」という変数を指定すると動作しない場合は、valueの型やデータ形式を確認する必要があります。
MCプロトコルでは送信データが16進数やASCII形式などで扱われる場合があるため、整数型、文字列型、バイト配列などへの変換が必要になることがあります。
ラズパイ側で変数をPLCデータへ変換する方法
ラズパイ側のプログラムでは、取得した値をPLCが理解できる形式に変換して送信します。例えばPythonを使用する場合、センサー値や計算結果を整数へ変換してから通信処理へ渡します。
具体例として、ラズパイで取得した温度データをPLCのD100へ送る場合は、以下のような流れになります。
- 温度センサーから値を取得する
- 取得値を変数へ保存する
- PLC書き込み用のデータ形式へ変換する
- MCプロトコルでD100へ書き込む
PLC側ではD100の値を監視することで、ラズパイから送られた最新データを利用できます。
PLC側で確認すべき設定
ラズパイからデータを書き込む場合、PLC側の通信設定も重要です。MCプロトコルを使用するには、PLCのEthernet設定や通信ポート、プロトコル設定などが正しく設定されている必要があります。
また、書き込み対象となるデバイスが存在するか、書き込み許可が有効になっているかも確認が必要です。
例えば、ラズパイ側ではD100へ書き込んでいるつもりでも、PLC側のプログラムでD100を別用途に使用している場合、期待した動作にならないことがあります。
データ型の違いによるトラブルに注意
PLCのデータレジスタは基本的に16ビット単位でデータを扱います。そのため、ラズパイ側で扱っているデータ型によっては変換処理が必要です。
例えば、ラズパイ側の変数が小数値(25.6など)の場合、そのままPLCへ送ることはできません。一般的には256などの整数に変換してPLC側で10分の1に戻す方法などが使われます。
また、32ビット整数や浮動小数点を扱う場合は、複数のPLCデバイスを使用する必要があります。
まとめ|ラズパイの変数はMCプロトコルでPLCデバイスへ書き込む
ラズパイから三菱PLCへ変数データを送信する場合、専用の「変数送信用命令」を使用するわけではありません。ラズパイ側の変数値をMCプロトコルの書き込みコマンドでPLCのデバイスへ渡します。
定数が送れるのに変数が送れない場合は、通信方法ではなく、データ形式や変換処理、送信データの作成方法を確認することが重要です。
PLCのDレジスタなどをデータ受け取り場所として決め、ラズパイ側で適切な形式に変換して書き込むことで、センサー値や計算結果などの動的なデータを安定してPLCへ渡すことができます。


コメント