當前位置:編程學習大全網 - 源碼下載 - 求DELPHI編寫串口通訊程序的簡單例子 用MSComm控件的 要詳細的剛學delphi的就能看懂的那種

求DELPHI編寫串口通訊程序的簡單例子 用MSComm控件的 要詳細的剛學delphi的就能看懂的那種

這裏MSComm控件的屬性Rthreshold設置為0,采用查詢的方法讀取串口數據。

Function readFromPLC(ReadChar:Array of char;ReadAddress:Array of Byte;ReadBytes:Integer):Booleam;

Var

ReadDataSum:integer;

DataSumCheck:integer;

tmpStr:String;

tmpchr,chr,chr2:char;

tmpVar:Variant;

Input:Variant;

InputLen,i,tmpInt:Integer;

tmpVar[1]:=$02;//STX 起始標誌

tmpVar[2]:=$30;//CMD0 讀命令

DataSumCheck:=DataSumCheck+$30

DataSumCheck:=0;//和校驗位初始化

tmpVar:=VarArrayCreate([1,11]),

//創建數組,用來存放待發送的命令格式數據流

tmpVar[3]:=ReadAddress[0];

//讀位元件4位起始地址:0~3

DataSumCheck:=DataSumCheck+ReadAddress[0];

tmpVar[4]:=ReadAddress[1];

DataSumCheck:=DataSumCheck+ReadAddress[1];

tmpVar[5]:=ReadAddress[2];

DataSumCheck:=DataSumCheck+ReadAddress[2];

tmpVar[6]:=ReadAddress[3];

DataSumCheck:=DataSumCheck+ReadAddress[3];

tmpStr:=IntToHex(ReadBygtes,2);

//讀位元件個數轉化為2位16進制

tmpChr:=tmpStr[1];//取16進制的低位

tmpVar[7]:=Ord(tmpChr);//轉化為ASCII形式

DataSumCheck:=DataSumCheck+Ord(tmpChr);

mpChr:=tmpStr[2];// 取16進制的高位

tmpVar[8]:=Ord(tmpChr);//轉化為ASCII形式

DataSumCheck:=DataSumCheck+Ord(tmpChr);

tmpVar[9]:=$03;//ETX 停止位標誌

DataSumCheck:= DataSumCheck+$03;

tmpStr:=IntToHex(DataSumCheck,2);

//和校驗位轉化為2位16進制

tmpChr:=tmpStr[1];

tmpVar[10]:=Ord(tmpStr);

tmpChr:=tmpStr[2];

tmpVar[11]:=Ord(tmpStr);

MainForm.MSComm.Outupt:=tmpVar;

//向發送緩沖區寫數據流

Sleep(1000);//延時

InputLen:=MaiForm.MSComm.InBufferCount;

//返回輸入緩沖區內的等待讀取的字節個數

Input:=MaiForm.MSComm.Input;

//讀取接收緩沖區中的數據

If InputLen>0 then//待讀取的字節個數大於0

Begin

If Input[0]=$02 then//STX返回數據的起始誌

Begin //讀取返回數據

ReadDataSum:=0;//返回值求和初始化

For i:=1 to ReadBytes do

Begin

tmpInt:=Input[i];

ReadChar[i-1]:=chr(tmpInt);

//將返回的ASCⅡ值轉換為字符型

ReadDataSum:=ReadDataSum+Input[1];

End;

Inc(i);

If Input[i]=$03 then //ETX,停止位標誌

Begin

ReadDataSum:= ReadDataSum+$03;

tmpStr:=InttoHex(ReadDataSum,2);

chr1:=tmpStr[1];//求校驗位

chr2:=tmpStr[2];

if (Ord(chr1)=Input[i+1]) and

(Ord(ch2)=Input[i+2]) then//校驗成功

Begin //數據取成功

Result:=True;

ShowMessage(‘DataRead succeed’);

end

else begin //校驗錯

Result:=False;

ShowMessage(‘DataRead Check fail’);

end;

end; //ETX

end //STX

else // If Input[0]<>$02

Result:=False;

end

else // If InputLen=0

Result:=False;

End;

  • 上一篇:支持 Android 和 iOS 系統手機,那麽Ticwatch的含金量如何?
  • 下一篇:產品經理該不該畫原型?原型設計上誰負責
  • copyright 2024編程學習大全網