发送代码:
LenOfSbuf:=length(sssbuf); //-----取数据帧长度。
//------------------------------ 准备工作 ----------------------------//
//??? setupcomm(hcom,4096,4096);//---------input buff and output buff is 4096 bytes.
getcommstate(hcom,lpdcb);
lpdcb.BaudRate:=CBR_1200;//----------BautRate is 1200 bps.
lpdcb.StopBits:=OneStopBit;
lpdcb.ByteSize:=8;
lpdcb.Parity:=3; //----------------恒为1,传号校验。
setcommstate(hcom,lpdcb);
/////////-------------------------^^^^^^^^^^^^
ResetEvent(post_event);
PurgeComm(hCom,PURGE_TXCLEAR);//---清发送缓冲
PurgeComm(hCom,PURGE_RXCLEAR);//---清接收缓冲。
EscapeCommFunction(hcom,CLRRTS);//--------改RTS为高电平,发送模式。
sleep(10);
//--------------------------送机号地址----------------------------------//
writefile(hcom,sssbuf[1],1,snum,lpol);//---送机地址。
// waitforsingleobject(POST_EVENT,infinite);
GetOverlappedResult(hcom,lpol^,snum,true);
resetevent(post_event);
if snum<1 then
begin
// form11.myshowmessage('发送错误!');
exit ;
end;
sleep(10);
//------------------------- 送数据 -------------------------------------//
getcommstate(hcom,lpdcb);
lpdcb.BaudRate:=CBR_1200;//----------BautRate is 1200 bps.
lpdcb.StopBits:=OneStopBit;
lpdcb.ByteSize:=8;
lpdcb.Parity:=4; //----------------------恒为0,空号校验。
setcommstate(hcom,lpdcb);
EscapeCommFunction(hcom,CLRRTS);//--------保持RTS为高电平,发送模式。
sleep(10);
for i:=2 to LenOfSbuf do
begin
writefile(hcom,sssbuf,1,snum,lpol);//--发送数据到串口。
// waitforsingleobject(POST_EVENT,infinite);
GetOverlappedResult(hcom,lpol^,snum,true);
resetevent(post_event);
if snum<1 then
begin
// form11.myshowmessage('发送错误!');
exit ;
end;
sleep(10);
end;
///!!! writefile(hcom,sbuf[2],Lenofsbuf-1,snum,lpol);//--发送数据到串口。
//------------------------- 送数据完毕,进行接收返回信息----------------//
while true do
begin
clear:=clearcommerror(hcom,lperrors,@coms);
if clear then
begin
cbNum:=coms.cbOutQue;
if cbnum<1 then break;
end;
end;
EscapeCommFunction(hcom,SETRTS); //------改RTS为低电平,进入接收模式。
// sleep(1);
PurgeComm(hCom,PURGE_TXCLEAR);//---清发送缓冲
PurgeComm(hCom,PURGE_RXCLEAR);//---清接收缓冲。