MELSEC MX Component を Delphi XE5 / 10.2.3 Tokyoで使う
※2019/02/10 USB 接続のコードを追加 (2019/02/10)
■ActiveX の取り込みを行います。
通信設定をプログラムから行う場合は、MITSUBISHI ActProgType Controls Ver1.0, 1.0 をインポートします。
MX Component 付属の 「通信設定ユーティリティ」 を使う場合は、MITSUBISHI ActUtlType Controls Ver1.0, 1.0 をインポートします。
ActUtlType の論理局番 ActLogicalStationNumber := 0; のように設定するだけ通信可能になります。
通信テストもユーティリティーから行え、非常に簡単です。
Delphi のツールパレットの ActiveX に追加されます。
■ ActProgType 用 コード
unit ActProgUnit1; interface uses Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics, Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, Vcl.OleCtrls, ActProgTypeLib_TLB; type TForm1 = class(TForm) ActProgType1: TActProgType; Button1: TButton; Edit1: TEdit; Button2: TButton; Button3: TButton; procedure Button1Click(Sender: TObject); procedure Button2Click(Sender: TObject); procedure Button3Click(Sender: TObject); private { Private 宣言 } public { Public 宣言 } end; var Form1: TForm1; implementation {$R *.dfm} // ***************************** // シミュレータ // ***************************** procedure TForm1.Button1Click(Sender: TObject); var ret : integer; szCpuName : WideString; lCpuType : Long; szDevice : WideString; lData : Long; begin Edit1.Text := ''; with ActProgType1 do begin // LLT(ラダーロジックテスト)モード // GX Simulator 通信に関係するプロパティのみ // MX Component version4 プログラミングマニュアル //「第4章各通信経路で設定するプロパティ」を参照 ActCpuType := $90; // Q03UDECPU ActNetworkNumber := 0; // 固定(自局) ActProtocolType := 6; // PROTOCOL_SHAREDMEMORY ActStationNumber := 255;// 固定(自局) ActTimeOut := 500; // ms単位でユーザ任意 ActUnitType := $B; // UNIT_SIMULATOR // 接続 ret := Open; if ret <> 0 then begin ShowMessage('オープン失敗'); Exit; end; // シーケンサ型番読み出し GetCpuType(szCpuName, lCpuType); Edit1.Text := szCpuName; szDevice := 'X10'; // デバイス読み込み GetDevice(szDevice, lData); // デバイス書き込み SetDevice(szDevice, abs(lData-1)); // 切断 Close; end; end; // ***************************** // TCP // ***************************** procedure TForm1.Button2Click(Sender: TObject); var ret : integer; szCpuName : WideString; lCpuType : Long; szDevice : WideString; lData : Long; begin Edit1.Text := ''; with ActProgType1 do begin // MX Component version4 プログラミングマニュアル // 4.3.7 接続局がEthernet ポート内蔵QCPU のEthernet 通信(TCP) ActCpuType := $90; // Q03UDECPU ActDestinationIONumber := 0;// 固定 ActDestinationPortNumber := 5007; // TCP ActDidPropertyBit := 1; ActDsidPropertyBit := 1; ActHostAddress := '169.254.251.71'; ActIntelligentPreferenceBit := 0; //固定 ActIONumber := 1023; //シングルCPU時固定 ActMultiDropChannelNumber := 0; //固定 ActNetworkNumber := 0; // 固定(自局) ActPassword := ''; ActProtocolType := 5; // PROTOCOL_TCPIP ActStationNumber := 255;// 固定(自局) ActThroughNetworkType := 0; ActTimeOut := 500; // ms単位でユーザ任意 ActUnitNumber := 0;// ActUnitType := $2C; // UNIT_QNETHER // 接続 ret := Open; if ret <> 0 then begin ShowMessage('オープン失敗'); Exit; end; // シーケンサ型番読み出し GetCpuType(szCpuName, lCpuType); Edit1.Text := szCpuName; szDevice := 'X10'; // デバイス読み込み GetDevice(szDevice, lData); // デバイス書き込み SetDevice(szDevice, abs(lData-1)); // 切断 Close; end; end; // ***************************** // UDP // ***************************** procedure TForm1.Button3Click(Sender: TObject); var ret : integer; szCpuName : WideString; lCpuType : Long; szDevice : WideString; lData : Long; begin Edit1.Text := ''; with ActProgType1 do begin // MX Component version4 プログラミングマニュアル // 4.3.8 接続局がEthernet ポート内蔵QCPU のEthernet 通信(UDP) ActCpuType := $90; // Q03UDECPU ActDestinationIONumber := 0;// 固定 ActDestinationPortNumber := 5006; //UDP ActDidPropertyBit := 1; ActDsidPropertyBit := 1; ActHostAddress := '169.254.251.71'; // ActHostAddress := ''; ActIntelligentPreferenceBit := 0;//固定 ActIONumber := 1023;//シングルCPU時固定 ActMultiDropChannelNumber := 0; //固定 ActNetworkNumber := 0; // 固定(自局) ActPassword := ''; ActProtocolType := 5; // PROTOCOL_TCPIP // ↓どういう訳か OPEN できない //ActProtocolType := 8; // PROTOCOL_UDPIP($08) ActStationNumber := 255;// 固定(自局) ActThroughNetworkType := 0; ActTimeOut := 500; // ms単位でユーザ任意 ActUnitNumber := 0;// // Host を指定しない(直結)ときは、$2D にする ActUnitType := $2C; // UNIT_QNETHER // 接続 ret := Open; if ret <> 0 then begin ShowMessage('オープン失敗'); Exit; end; // シーケンサ型番読み出し GetCpuType(szCpuName, lCpuType); Edit1.Text := szCpuName; szDevice := 'X10'; // デバイス読み込み GetDevice(szDevice, lData); // デバイス書き込み SetDevice(szDevice, abs(lData-1)); // 切断 Close; end; end; // ***************************** // USB (2019/02/10 追加) // ***************************** procedure TForm4.Button1Click(Sender: TObject); var szCpuName : WideString; lCpuType : Long; szDevice : WideString; lData : Long; begin Edit1.Text := ''; with ActProgType1 do begin // FXCPU USB 通信 // 「4.5.7 接続局がFXCPU のUSB 通信」 ActCpuType := $20A; // FX3S ActDestinationIONumber := 0; // 0(0x00) 固定 ActIONumber := 0; // 0(0x00) 固定 ActProtocolType := $0D; // PROTOCOL_USB(0x0D) ActTimeOut := 500; ActUnitNumber := 0; // 0(0x00) 固定 ActUnitType := $0F; // UNIT_FXCPU(0x0F) // 接続 if Open <> 0 then begin ShowMessage('オープン失敗'); Exit; end; // シーケンサ型番読み出し GetCpuType(szCpuName, lCpuType); Edit1.Text := szCpuName; szDevice := 'Y0'; // デバイス読み込み GetDevice(szDevice, lData); // デバイス書き込み SetDevice(szDevice, abs(lData - 1)); // 切断 Close; end; end; end.