Mitsubish FX 3U PLC 串口 连接单元

页面导航:首页 > 软件编程 > Delphi > Mitsubish FX 3U PLC 串口 连接单元

Mitsubish FX 3U PLC 串口 连接单元

来源: 作者: 时间:2016-01-15 15:17 【

前段时间遇到一个Mitsubish FX 3U PLC ,现将PLC连接单元分享一下,希望对其他人有所启示。unit PLC_MitsubishiFX; interface uses Windows, Messages, SysUtils, Classes, syncob
 前段时间遇到一个Mitsubish FX 3U PLC ,现将PLC连接单元分享一下,希望对其他人有所启示。
 
unit PLC_MitsubishiFX;  
  
interface  
  
uses  
  Windows, Messages, SysUtils, Classes, syncobjs,UnitCom, ACTPCCOMLib_TLB,  
  PLC_Base, PLCCommonFunc;  
  
  
  
type  
  TPLC_MitsubishiFX=class(TPLC)  
  private  
    FMyCom:TActFXCPU;{定义串口通信对象}  
  public  
    ConStructor Create; override; {构造函数}  
    destructor Destroy; override; {析构函数}  
    function Open(ComName,IpAddress: string):Integer;override;{打开PLC}  
    function Close:Integer;override;  {关闭PLC}  
    //读PLC函数  
    function DoRead(Station:Integer; StartAddress:Integer; Count:Integer; Buffer:Pointer; DataType:array of TPLCDataType): Integer;override;  
    //写PLC函数  
    function DoWrite(Station:Integer; StartAddress:Integer; Count:Integer; Buffer:Pointer; DataType: TPLCDataType):Integer;override;{返回值为写入成功与否}  
  
  
end;  
  
implementation  
  
{ TPLC_Mitsubishi }  
  
  
  
constructor TPLC_MitsubishiFX.Create;  
begin  
  Inherited;  
  FMyCom:=TActFXCPU.Create(nil); {创建串口通信对象}  
  FMyCom.ActTimeOut:=10000;  
end;  
  
  
destructor TPLC_MitsubishiFX.Destroy;  
begin  
  FMyCom.Free ;{释放串口通信对象}  
  inherited;  
end;  
  
  
  
function TPLC_MitsubishiFX.Open(ComName,IpAddress: string): Integer;  
begin  
  FMyCom.ActPortNumber :=strtoint(copy(comname,4,length(comname)-3));     //com1  
  Result:=FMyCom.Open; //该函数返回0为成功  
  if Result = 0 then  
    Result := SUCCESS;  
end;  
  
function TPLC_MitsubishiFX.Close: Integer;  
begin  
  Result := FMyCom.Close;{关闭串口通信对象}  
  if Result = 0 then  
    Result := SUCCESS;  
end;  
  
  
function TPLC_MitsubishiFX.DoRead(Station:Integer; StartAddress:Integer; Count:Integer; Buffer:Pointer; DataType:array of TPLCDataType): Integer;  
var  
  DataInfo:TPLCStruct; //接收从Buffer传来的参数  
  lpdata: array[0..99] of integer;  
  i:integer;  
  LState:integer;  
begin  
  DataInfo := PTPLCStruct(Buffer)^;  
  try  
    LState:=FMyCom.ReadDeviceBlock('D'+ConvertStartAddr(StartAddress),Count,lpdata[0]) ;  
  except  
    LState:=-1;  
  end;  
  
  FLinkState := LState =0;  
  
  if LState<>0 then  //读取失败的情况  
  begin  
    Result:=UNSUCCESS;  
    exit;  
  end;  
  
  for i:=0 to Count-1 do  
  begin  
      DataInfo.PLCInteger[i]:=lpdata[i];  
  end;  
  
  PTPLCStruct(Buffer)^:=DataInfo; //传出读取的PLC数据  
  Result:=SUCCESS;  
end;  
  
function TPLC_MitsubishiFX.DoWrite(Station:Integer; StartAddress:Integer;  
  Count:Integer; Buffer:Pointer; DataType: TPLCDataType): Integer;  
var  
  DataInfo:TPLCStruct; //接收从Buffer传来的参数  
  LDataInfo :array[0..100] of integer;  
  i:integer;  
  LState:integer;  
begin  
  DataInfo := PTPLCStruct(Buffer)^;  
//  if DataType = dtHexInt then  
//    for i:=0 to Count - 1 do  
//      LDataInfo[i]:=StrToint('$'+DataInfo.PLCChar[i]) //十六进制  
//  else  
    for i:=0 to Count - 1 do  
      LDataInfo[i]:=DataInfo.PLCInteger[i];  //十进制  
  try  
    LState:=FMyCom.WriteDeviceBlock('D'+ConvertStartAddr(StartAddress),Count,LDataInfo[0]) ;  
  except  
    LState:=-1;  
  end;  
  
  FLinkState := LState = 0;  
  
  if LState = 0 then  
    result:= SUCCESS  
  else  
    result:=UNSUCCESS;  
end;  
  

 


Tags:

文章评论

最 近 更 新
热 点 排 行
Js与CSS工具
代码转换工具

<