三个串行口控件的"小"比较:
1:VB的MSCOMM控件
各种属性,串行口的通讯细节设置方便,但只有一个事件,编程繁琐,需要自己
用"Case"来区分各种事件,并由于是非多线程控件,而串行口的发送速度相对主机较慢,
故在程序里要注意释放CPU资源.
2: Comm32.zip
最新的源代码,Ver 1.08,据说可以支持到 16个串行口,在Delhi4下也不能正常
安装,故没有用,只记得过去在Delphi2编译正常,各种设置多可通过下拉框选择.
3: Spcomm控件:
细节设置不方便,端口,速度要手工键入,但是,事件多,且是一个多线程控件.
故编程很方便.简单,本人推荐.已成功使用COM1,COM2,COM3.
如何初始化Com口?设置好 "端口,速度,停止"后, "Comm1.startcomm;"便可
如何向串口发送位? 设置好要发送的缓冲指针,发送长度,如下
if comm1.WriteCommData(Pchar(strTxCode),CodeLength)
then begin
Wait232Rime:=0; // 发送成功后,开启定时器, 此时间为串行口未响应最长时间
Timer1.Enabled:=True;
statusLine.Panels.Items[0].Text:='通讯端口命令发送成功';
end
else begin
FaSongStatus:=False;
statusLine.Panels.Items[0].Text:='通讯端口联络命令发送不成功 !';
end;
如何响应Com口的位到达,有接收事件
procedure TfrmRs232Main.Comm1ReceiveData(Sender: TObject; Buffer: Pointer;
BufferLength: Word);
var
strRxIn:string;
charCode:char;
intPos:integer;
intCheck:integer; // 检验和计数
CheckTemp:integer;
begin
SetLength(strRxIn,BufferLength); // 设置接收字符串长度
Move(Buffer^, PChar(strRxIn)^, BufferLength); // RS232数据==>strRxIn
或者按比特传送后,判断每一位数据是什么? 用Pascal的逻辑指令分离吧
...
注意: 1: 0值处理 为结束符号处理? 不处理
2: 硬件连接, 25针同9针 管脚的不同,如果用三线连接,要用软件来达到握手信号
3: 发送流要加同步字符