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.