亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? modbus.pas

?? delphi串口modbus源碼
?? PAS
字號:
unit Modbus;
{
  通訊協議 : Modbus;
}

interface

uses SysUtils;

type
 TDevModbus=class
  private
  //********************************
   Addr:integer;
   Port:integer;
   Baud:integer;
   Mode:integer;//comm para
   
   PortOpenOk:boolean;
   DebugM:boolean;

   id_RwDelayTime:integer;
   id_DataLength:integer;

   //***************************

   Procedure GetCRC(Data:array of byte;Nums:integer;var CRCH,CRCL:byte);
   Function CheckCrc(Data:array of byte;Nums:integer):Boolean;

   procedure ClearInBuff;
   procedure ClearOutBuff;
   procedure ClearInOutbuff;

   Function SendCmd(cmd:array of byte;len:integer):integer;//send cmd to pw
   Function Recv(var rev:array of byte;len:integer):integer;

  public
   Constructor create;
   destructor Destroy;override;
   Function PortOpen:integer;
   Function PortClose:integer;
   Function Read(RegAddr,RegNum:integer;var revdata:array of byte):integer;
   Function ReadByte(RegAddr:integer;High:boolean):integer;
   function ReadWord(RegAddr:integer):integer;
   Function Write(RegAddr:integer;writedata:Word):integer;
   Function WriteByte(RegAddr:integer;writedata:byte;High:boolean):integer;
   Function WriteMore(RegAddr:integer;data:array of byte;len:integer):integer;

   property PortOk:boolean read portOpenOk write PortOpenOk;

  published
    property DevAddr:integer read Addr write Addr;

    property ComPort:integer read Port write Port;// comm port
    property ComBaud:integer read Baud write Baud;//comm baud
    property ComMode:integer read Mode write Mode;//comm mode

    property DebugMode:boolean read debugM write debugM;//
    property RwDelayTime:integer read  id_RwDelayTime Write id_RwDelayTime;

end;

implementation

uses PComm;

{ TPowerMtModule }

procedure TDevModbus.GetCRC(Data:array of byte;Nums:integer;var CRCH, CRCL: byte);
var
  i,j:integer;
  CRC:integer;
begin
  CRC:=$FFFF;
  for i:=0 to Nums-1 do
  begin
    CRC:=CRC xor ord(Data[i]);
    for j:=0 to 7 do
    begin

      if (CRC mod 2=1) then
      begin
        CRC:= CRC div 2;
        CRC:=$A001 xor CRC
      end
      else
      begin
        CRC:= CRC div 2;
      end;
    end;
  end;
  CRCH := crc mod 256;
  CRCL := crc div 256;
end;

function TDevModbus.CheckCrc(Data: array of byte;
  Nums: integer): Boolean;
var i:integer;
    tmpdata:array of byte;
    CRCH,CRCL : byte;
begin
  setlength(tmpdata,Nums);
  for i:=0 to Nums-1 do
    tmpdata[i] := Data[i];
  GetCrc(tmpdata,Nums-2,CRCH,CRCL);
  if(CRCH=Data[Nums-2])and(CRCL=Data[Nums-1])then
    result := true
  else result := false;
end;

procedure TDevModbus.ClearInBuff;
begin
 if not PortOpenOk then exit;

   sio_flush(Port,0);

end;

procedure TDevModbus.ClearInOutbuff;
begin
 if not portOpenOk then exit;

  sio_flush(port,2);
end;

procedure TDevModbus.ClearOutBuff;
begin
 if not PortOpenOk then exit;

   sio_flush(Port,1);
end;

constructor TDevModbus.create;
begin
  PortOpenOk:=false;

  id_RwDelayTime:=3000;
  inherited;
end;

destructor TDevModbus.Destroy;
begin
  if portOpenOk then sio_close(Port);
  inherited;
end;

Function TDevModbus.PortClose:integer;
begin
  if portOpenOk then result:=sio_close(Port);
end;

function TDevModbus.PortOpen: integer;
var
  ret:integer;
begin
//--------------打開并設置通訊端口
   if DebugM then exit;

   if Port<1 then
   begin
     PortOpenok:=false;
     result:=-99;
     exit;
   end;

   if portOpenOk then
   begin
     result:=0;
     exit;
   end;

   PortOpenOk:=true;
   ret:= sio_open(Port);
   if ret<>SIO_OK then//打開端口出錯
    begin
       if ret=sio_openfail then
       PortOpenOk:=false;

    end;

    result:=result+ret;

    ret := ret+sio_ioctl (Port,Baud,Mode);//設置端口
    if ret<>SIO_OK then
    begin
//      showmessage('SWRT端口通訊置錯誤: '+inttostr(ret));

      PortOpenOk:=false;
//      application.terminate;//終止程序

    end;
    portopen:=ret;

   if portOpenok then Result:=0;


end;

function TDevModbus.SendCmd(cmd: array of Byte;len:integer): integer;
begin
  if not portOpenOk then PortOpen;
  if not portOpenOk then exit;
  result:=sio_write(Port,@cmd,len);
end;

function TDevModbus.Recv(var rev: array of byte;len:integer): integer;
begin
  if not portOpenOk then PortOpen;
  if not portOpenOk then exit;
  result:=sio_read(Port,@rev,len);
end;

function TDevModbus.ReadWord(RegAddr:integer):integer;
var i,ret:integer;
    rev:array[0..1] of byte;
begin
  ret:=read(regaddr,1,rev);
  if(ret<0)then
  begin
    result:=-1;
    exit;
  end;

  result := rev[0]*256+rev[1];
end;

function TDevModbus.ReadByte(RegAddr:integer;High:boolean):integer;
var i,ret:integer;
    rev:array[0..1] of byte;
begin
  ret:=read(regaddr,1,rev);
  if(ret<0)then
  begin
    result:=-1;
    exit;
  end;
  
  if(High)then
    result := rev[0]
  else
    result := rev[1];
end;

function TDevModbus.Read(RegAddr,RegNum:integer; var revdata:array of byte):integer;
var cmd,rev:array of byte;
    i,ret,revlen:integer;
begin
  ClearInOutBuff;
  setlength(cmd,8);
  cmd[0]:=Addr;
  cmd[1]:=$03;
  cmd[2]:=RegAddr div 256;
  cmd[3]:=RegAddr mod 256;
  cmd[4]:=RegNum div 256;
  cmd[5]:=RegNum mod 256;

  getCRC(cmd,6,cmd[6],cmd[7]);

  ret:=SendCmd(cmd,length(cmd));

  sleep(200);

  revlen:=RegNum*2+5;
  setlength(rev,revlen);
  ret:=ret+Recv(rev,revlen);

  if(ret=revlen+8)then
    result := 0
  else
  begin
    result :=-1;
    exit;
  end;

  if(CheckCRC(rev,revlen))then
    result := 0
  else
  begin
    result := -1;
    exit;
  end;

  for i:=0 to RegNum*2-1 do
  begin
    revdata[i]:=rev[i+3];
  end;

end;

Function TDevModbus.Write(RegAddr:integer;writedata:word):integer;
var cmd,rev:array of byte;
    i,ret,revlen:integer;
begin
  ClearInOutBuff;
  setlength(cmd,8);
  cmd[0]:=Addr;
  cmd[1]:=$06;
  cmd[2]:=RegAddr div 256;
  cmd[3]:=RegAddr mod 256;
  cmd[4]:=writedata div 256;
  cmd[5]:=writedata mod 256;

  getCRC(cmd,6,cmd[6],cmd[7]);

  ret:=SendCmd(cmd,length(cmd));

  sleep(100);

  revlen:=8;
  setlength(rev,revlen);
  ret:=ret+Recv(rev,revlen);

  if(ret=revlen+8)then
    result := 0
  else
  begin
    result :=-1;
    exit;
  end;

  if(CheckCRC(rev,revlen))then
    result := 0
  else
    result := -1;
end;

Function TDevModbus.WriteByte(RegAddr:integer;writedata:byte;High:boolean):integer;
var cmd,rev:array of byte;
    i,ret,revlen:integer;
    bHigh,bLow:byte;
begin

  bHigh:=0;
  bLow:=0;

  //先讀出整個寄存器中的數據
  setlength(rev,2);
  ret:=Read(RegAddr,1,rev);
  if(ret=0)then
  begin
    bHigh :=rev[0];
    bLow := rev[1];
  end;

  //然后寫入相應的字節
  ClearInOutBuff;
  setlength(cmd,8);
  cmd[0]:=Addr;
  cmd[1]:=$06;
  cmd[2]:=RegAddr div 256;
  cmd[3]:=RegAddr mod 256;
  if(not High)then
  begin
    cmd[4]:=bHigh;
    cmd[5]:=writedata mod 256;
  end
  else
  begin
    cmd[4]:=writedata mod 256;
    cmd[5]:=bLow;
  end;

  getCRC(cmd,6,cmd[6],cmd[7]);

  ret:=SendCmd(cmd,length(cmd));

  sleep(100);

  revlen:=8;
  setlength(rev,revlen);
  ret:=ret+Recv(rev,revlen);

  if(ret=revlen+8)then
    result := 0
  else
  begin
    result :=-1;
    exit;
  end;

  if(CheckCRC(rev,revlen))then
    result := 0
  else
    result := -1;
end;

function TDevModbus.WriteMore(RegAddr: integer; data: array of byte;
  len: integer): integer;
var cmd,rev:array of byte;
    i,ret,revlen:integer;
begin
  ClearInOutBuff;
  setlength(cmd,len+8);
  cmd[0]:=Addr;
  cmd[1]:=$10;
  cmd[2]:=RegAddr div 256;
  cmd[3]:=RegAddr mod 256;

  for i:=0 to len-1 do
    cmd[i+4]:=data[i];

  getCRC(cmd,len+5,cmd[len+6],cmd[len+7]);

  ret:=SendCmd(cmd,length(cmd));

  sleep(100);

  revlen:=8;
  setlength(rev,revlen);
  ret:=ret+Recv(rev,revlen);

  if(ret=revlen+8+len)then
    result := 0
  else
  begin
    result :=-1;
    exit;
  end;

  if(CheckCRC(rev,revlen))then
    result := 0
  else
    result := -1;
end;

end.

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
成人黄色小视频| 欧美国产1区2区| 亚洲高清免费视频| 欧美在线视频全部完| 国产亚洲一区二区三区四区 | 国产一区二三区| 欧美三级中文字| 亚洲精品欧美专区| 欧美性大战久久久久久久| 亚洲欧美电影院| 色噜噜狠狠色综合欧洲selulu| 国产人久久人人人人爽| 黄色日韩网站视频| 久久精品一区八戒影视| 精品亚洲国产成人av制服丝袜 | 欧美在线视频全部完| 亚洲一区二区视频在线| 欧美精品18+| 激情综合色播激情啊| 欧美激情中文不卡| 91成人免费在线| 国内久久婷婷综合| 中文字幕一区二区三区在线播放 | 亚洲123区在线观看| 精品国偷自产国产一区| 懂色av中文一区二区三区| 国产精品网站在线观看| 欧美在线视频你懂得| 蜜桃传媒麻豆第一区在线观看| 久久人人97超碰com| 在线观看视频91| 国产一区二区久久| 亚洲欧美一区二区久久| 日韩欧美第一区| 91免费在线视频观看| 精品一区二区三区av| 亚洲精品视频在线看| 久久精品亚洲一区二区三区浴池| 成人免费毛片高清视频| 午夜精彩视频在线观看不卡| 久久久亚洲高清| 日韩美女一区二区三区四区| 色综合亚洲欧洲| 国产高清精品网站| 麻豆精品久久久| 亚洲国产美女搞黄色| 国产三级久久久| 日韩午夜激情av| 欧美一区二区高清| 欧美日韩国产精品成人| 色噜噜夜夜夜综合网| 91蜜桃网址入口| 99精品欧美一区| 99久久夜色精品国产网站| 国产白丝精品91爽爽久久| 精品一二三四区| 国产精品一区一区三区| 韩国在线一区二区| 国产一区二区在线观看免费| 精品一区二区免费看| 国产一区不卡视频| 粗大黑人巨茎大战欧美成人| 成人高清视频免费观看| 波多野洁衣一区| 91久久精品一区二区三区| 欧美午夜电影在线播放| 在线不卡中文字幕播放| 精品国产网站在线观看| 久久久久久久久免费| 中文字幕日韩精品一区| 一区二区三区在线视频观看58| 亚洲一区二区三区视频在线播放| 亚洲麻豆国产自偷在线| 日韩激情视频在线观看| 精品亚洲国产成人av制服丝袜| 国产福利一区在线观看| 色欧美片视频在线观看在线视频| 欧美午夜电影一区| 久久精品男人天堂av| 亚洲另类中文字| 精品一区二区三区视频在线观看| 国产激情视频一区二区在线观看| youjizz国产精品| 91精品国产综合久久久蜜臀粉嫩| 久久久综合九色合综国产精品| 国产欧美一区视频| 蜜臀av性久久久久蜜臀av麻豆| 国产91色综合久久免费分享| 精品婷婷伊人一区三区三| 亚洲国产成人在线| 久色婷婷小香蕉久久| 91久久精品国产91性色tv| 国产日韩欧美精品一区| 青青草97国产精品免费观看无弹窗版| 国产 日韩 欧美大片| 亚洲精品一区二区三区精华液| 亚洲一卡二卡三卡四卡| 麻豆精品久久精品色综合| 欧美丝袜第三区| 亚洲国产精品欧美一二99| www.av亚洲| 中文字幕一区二区不卡| 成人精品gif动图一区| 亚洲精品在线免费播放| 久久不见久久见中文字幕免费| 欧美一区二区三区日韩视频| 国产精品国产三级国产aⅴ入口| 国产一区二区三区久久久| 精品国产乱码久久久久久1区2区| 男人的天堂久久精品| 日韩一区二区三区在线观看| 婷婷中文字幕综合| 欧美一区二区三区系列电影| 亚洲午夜免费视频| 91精品国产aⅴ一区二区| 麻豆一区二区三区| 国产亚洲一区字幕| 99久久精品99国产精品| 午夜激情一区二区三区| 久久精品亚洲一区二区三区浴池| 国产精品影视在线观看| 亚洲人一二三区| 欧美视频中文一区二区三区在线观看| 亚洲成人久久影院| 久久亚洲精精品中文字幕早川悠里| 韩国毛片一区二区三区| 国产精品美女久久福利网站| av在线播放成人| 视频一区在线播放| 国产精品无圣光一区二区| 95精品视频在线| 免费在线一区观看| 久久久精品综合| 欧美日韩国产中文| 91丨国产丨九色丨pron| 午夜国产精品一区| 中文字幕制服丝袜成人av | 亚洲一区二区三区三| 精品捆绑美女sm三区| 91网站在线观看视频| 另类综合日韩欧美亚洲| 亚洲无人区一区| 亚洲日本一区二区| 久久久久久毛片| 欧美一级免费大片| 色婷婷综合视频在线观看| 精品一区二区三区免费观看| 亚洲一级二级三级| 亚洲欧美激情在线| 亚洲国产成人在线| ww久久中文字幕| 欧美大片国产精品| 91精品国产综合久久久久| 91在线porny国产在线看| 成人高清在线视频| 99精品欧美一区| 91一区一区三区| 日本伦理一区二区| 在线免费观看日韩欧美| 精品1区2区3区| 制服丝袜激情欧洲亚洲| 日韩精品一区二区三区四区视频| 日韩美女在线视频| 国产视频911| 亚洲柠檬福利资源导航| 亚洲欧洲日本在线| 亚洲一区二区3| 国内久久精品视频| 国产不卡免费视频| 欧美日韩综合在线| 国产亚洲一区字幕| 亚洲一区在线免费观看| 日本视频一区二区| 国产91富婆露脸刺激对白| 日本久久一区二区三区| 91 com成人网| 国产精品青草久久| 久久精品免费观看| 在线看日本不卡| 欧美国产在线观看| 亚洲国产欧美在线| 91麻豆国产精品久久| 2023国产精品自拍| 午夜欧美大尺度福利影院在线看| 在线影院国内精品| 中文字幕在线不卡国产视频| 免费在线看成人av| 欧美亚洲日本一区| 亚洲欧美在线视频| 国产一区二区三区日韩| 91精品国产综合久久精品| 国产精品污网站| 粉嫩av一区二区三区| 精品久久国产老人久久综合| 天堂va蜜桃一区二区三区| 91麻豆蜜桃一区二区三区| 中文字幕日本不卡| www.视频一区| 伊人性伊人情综合网| 成人精品国产一区二区4080|