matlabでMODBUS②WAGOのPLC 750シリーズ
WAGOのPLCを取り上げます。多くのマニュアルが日本語になっています。MODBUS/TCPを使うために、TCPインターフェース750-342、アナログ入力のモジュール750-479、終端の750-600を組み合わせました。
アナログ入力モジュールは2チャネルです。13ビット+符号(左詰め、下2ビットはエラー・コード。通常'00')の、2の補数形式で保持レジスタから読み取れます。アナログ・モジュールのアドレスは、つないだ順番に振られるようで、'1'と思われます。
TCPインターフェース750-342の外側にはMACアドレスが書かれています。これをもとに、TCP/IPアドレスを振ります。750-842のマニュアルを読んで設定しました。具体的な説明は、こちらの記事を参照してください。
まずは、Modbus Explorer
Deviceをクリックして、出てきたModbus TCP/IPのアイコンをクリックします。
Device Addressに、設定した192.168.111.24を入れ、Register TypeはHolding...を選択します。Register Addressは'1'、Readアイコンをクリックすると、8195が読み出されました。
Confirm Parametersをクリックします。次の画面が立ち上がって、連続してreadが実行されてグラフが描かれます。
Reg_1の横にチェックをし、Generate Scripts CODEをクリックします。
ライブエディタが立ち上がります。
プログラム
自動で生成された、
% Holding Registers
% Read 1 Holding Register of type 'int16' starting from address 1.
modbusData.Reg_1 = read(m, 'holdingregs', 1, 1, serverId, 'int16');
の記述でデータを読み出して、値はmodbusData.Reg_1 に入ります。これを電圧に変えます。
16ビット長 2の補数形式なので、一度dec2bin()でバイナリの文字列に変換します。この文字列の前に接頭語'0b'をくっつけ、後ろに桁数?を表す's16'をつなげます。その文字列をbin2dec()で10進数に変換すると、先頭が'1'であればマイナスの符号の処理が行われます(R2020a以降)。
アナログ・データのフォーマットは±10Vなので、2^15で割って10をかけると電圧に変換されます。
プログラムです。
% Create a Modbus Object.
m = modbus('tcpip', '192.168.111.24');
m.Timeout = 3;
% Save the Server ID specified.
serverId = 1;
% Holding Registers
% Read 1 Holding Register of type 'int16' starting from address 1.
modbusData.Reg_1 = read(m, 'holdingregs', 1, 1, serverId, 'int16');
binStr = dec2bin(modbusData.Reg_1,16);
Vin = bin2dec(append('0b',binStr,'s16')) / 32768 * 10;
fprintf('Vin0 = %.5fV\n', Vin);
% Clear the Modbus Object created.
clear m
% Clear the Server ID.
clear serverId
Author And Source
この問題について(matlabでMODBUS②WAGOのPLC 750シリーズ), 我々は、より多くの情報をここで見つけました https://qiita.com/jamjam/items/cc03d4a78b8be0c6da4b著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .