RS232串列埠通訊模組

2021-04-01 15:20:54 字數 4714 閱讀 5116

應為工作需要自己編寫的rs232通訊模組,該模組已經編寫了蠻久,在實際使用中可能有沒有考慮和不完善的地方。

//如果使用該模組請保留該注釋,如果被修改或編輯請將修改後的**傳送乙份給我

//編寫:戴琪英

//e_mail:[email protected]

//2000-09-01

unit r232comm;

inte***ce

uses

windows,sysutils;

const

initr12comm_success=0;

initr12comm_failure=-1;

varbsendfinish:boolean=true;//傳送完標誌

irecvlen:dword=0;

recvbuff,tempbuff:pchar;

sendcommand,recvcommand:string;//傳送和接收到的命令

recvfinish:bool=false;

recvbuffinit:bool=false;

sendcommandsuccess:bool; //切換臺命令被成功傳送標誌

function  initr12commdev(comno:pchar):string;  //初始化切換臺串列埠,返回狀態字元

procedure switchr12(writebuffer:pchar);//對切換臺進行切換函式

procedure switchr12byte(writebuffer:byte);

procedure commsendnotify;//串列埠接收到字元事件響應過程

procedure commrecvnotify; //串列埠傳送緩衝區空事件響應過程

procedure commwatchthread(var lpdwparam:dword);//通訊口監視執行緒

function  coninfo :string;

//以下對串列埠進行配置

dcb.dcblength:=sizeof(_dcb);

comstate:=getcommstate(hcommdev,dcb);  //得到預設設定

if  comstate=false then

initr12commdev:='切換臺通訊埠初始化失敗.'

else

initr12commdev:='切換臺通訊埠初始化成功.';

dcb.baudrate:=9600;  //波特率 9600

dcb.bytesize:=8;//7;  //資料長度7位

dcb.parity:=noparity;//oddparity; //校驗方式 奇校驗

dcb.stopbits:=onestopbit; //停止位 1 位

dcb.flags := 0;         // enable fbinary

dcb.flags := dcb.flags or 2;          // enable parity check

dcb.xonchar:= chr($00) ;

dcb.xoffchar:= chr($00) ;

dcb.xonlim:= 100 ;

dcb.xofflim:= 100 ;

dcb.evtchar := char($ff);

comstate:=setcommstate(hcommdev,dcb);  //設定串列埠

if comstate=false then

initr12commdev:='切換臺通訊埠初始化失敗.'

else

initr12commdev:='切換臺通訊埠初始化成功.';

//設定通訊接收到字元事件控制代碼

postrecvevent:=createevent(nil,

true,//手工重置事件

true, //初始化為有訊號狀態

nil);

//設定讀非同步i/o操作事件控制代碼

read_os.hevent:=createevent(nil,

true,//手工重置事件

false, //初始化為無訊號狀態

nil);

//設定傳送緩衝區空事件控制代碼

postsendevent:=createevent(nil,

true,//手工重置事件

true, //初始化為有訊號狀態

nil);

//設定寫非同步i/o操作事件控制代碼

write_os.hevent:=createevent(nil,

true,//手工重置事件

false,//初始化為無訊號狀態

nil);

//建立通訊監視執行緒

comthreadhwnd:=createthread(nil,

0,@commwatchthread, //通訊線程函式的位址

nil,

0,   //建立後立即執行

dwthreadid1);//通訊線程id號

if comthreadhwnd=invalid_handle_value  then

initr12commdev:='initr12comm_failure'

else

initr12commdev:='切換臺通訊埠初始化成功.';

end;

///切換臺切換控制函式

///輸入引數;切換命令字串

procedure switchr12(writebuffer:pchar);

vardwwritebyte,txcount:dword;

bl:bool;

dwerror:dword;

procedure switchr12byte(writebuffer:byte);

vardwwritebyte,txcount:dword;

bl:bool;

dwerror:dword;

begin

os.hevent:=createevent(nil,

true,

false,

nil);

//傳送緩衝區空處理過程

procedure commsendnotify;

begin

setevent(postsendevent);//置傳送事件未有訊號狀態,以便進行下一次傳送

end;

///接收到字元處理函式

procedure commrecvnotify;

varrxcount,dwreadbyte:dword;

indata :byte;

begin

clearcommerror(hcommdev,dwerrorflag,@comstat);

rxcount:=comstat.cbinque; //獲取接收緩衝區的字元個數

if rxcount>0 then

begin

if not recvbuffinit then

begin

strcopy(recvbuff,'');

recvbuffinit:=true;

end;

strcopy(tempbuff,'');

readfile(hcommdev,byte(tempbuff^),rxcount,dwreadbyte,@read_os);//讀字元存入

//臨時緩衝區中

irecvlen:=irecvlen+dwreadbyte; //接收到字元個數統計

if irecvlen >=1 then

begin

indata := byte(tempbuff^);

if indata = $d9 then

begin

sendcommandsuccess:=true;  //如果狀態一致,則置該標誌為真,標誌切換成功

endelse

begin

sendcommandsuccess:=false;//否則,置該標誌為假,表示切換失敗

end;

irecvlen:=0;

strcopy(recvbuff,'');

recvbuffinit:=false;

purgecomm(hcommdev,purge_rxclear ); //清空接收緩衝區

endend;

setevent(postrecvevent); //置接收事件控制代碼為有訊號狀態,以便接收新字元

end;

function coninfo :string;

begin

if  sendcommandsuccess =true then

begin

result := '切換器聯機監測成功!';

endelse

begin

result := '切換器聯機監測失敗!';

end;

end;

initialization

recvbuff:=stralloc(50*sizeof(char));

tempbuff:=stralloc(50*sizeof(char));

finalization

strdispose(recvbuff);

strdispose(tempbuff);

closehandle(postrecvevent);

closehandle(read_os.hevent);

closehandle(postsendevent);

closehandle(write_os.hevent);

end.

RS232串列埠通訊詳解

rs232串列埠通訊詳解 引腳定義,電氣特性,傳輸格式,接收過程,微控制器晶振,rs485,rs422 轉 2010 03 13 15 47 串列埠是計算機上一種非常通用的裝置通訊協議。串列埠的引腳定義 9芯訊號方向來自 縮寫描述 1數據機 cd載波檢測 2數據機 rxd接收資料3pc txd傳送資...

RS232串列埠通訊詳解

rs232串列埠通訊詳解 串列埠是計算機上一種非常通用的裝置通訊協議。串列埠的引腳定義 9芯 訊號方向來自 縮寫 描述 1 數據機 cd 載波檢測 2 數據機 rxd 接收資料 3 pc txd 傳送資料 4 pc dtr 資料終端準備好 5 gnd 訊號地 6 數據機 dsr 通訊裝置準備好 7 ...

RS232串列埠通訊詳解

串列埠是計算機上一種非常通用的裝置通訊協議。兩個串列埠連線時,接收資料針腳與傳送資料針腳相連,彼此交叉,訊號地對應相接即可。rs 232介面 通常適合於資料傳輸頻率在0 20000bps範圍的通訊。是點對點的通訊方式,在pc機上通常都是com串列埠。不足 抗干擾能力差,通訊距離短,速率低。rs 42...