Delphi 7:操作串口(ComPort)
2020-07-27 本文已影响0人
酸奶不错
一、串口的简介
串行接口(Serial Interface),简称串口,即COM接口(cluster communication port,串行通讯端口),是采用串行通讯方式的扩展接口。
一条信息的各位数据被逐位按顺序传送的通讯方式称为串行通讯。
串口的出现是在1980年前后,初期一般用来连接鼠标和外置Modem以及老式摄像头和写字板等设备,它也可以应用于两台计算机(或设备)之间的互联及数据传输。
串口的特点是通信线路简单,只要一对传输线就可以实现双向通信,从而大大降低了成本,特别适用于远距离通信,但传送速率较慢,115kbps~230kbps。
由于串口不支持热插拔及传输速率较低,部分新主板和大部分便携电脑已取消该接口,目前多用于工控和测量设备以及部分通信设备中。
二、串口与USB
USB,Universal Serial Bus 通用串行总线,是一个外部总线标准,诞生于1996年之后,用于规范电脑与外部设备的连接和通讯,是应用在PC领域的接口技术。
USB设备有以下优点:
- 支持热拔插
- 携带方便
- 标准统一
- 可以同时连接多个设备
- 传输速率快
相较于USB,串口已经是一种古老的技术了,而且PC上已经很少见到串口了,但为什么有了USB还要用串口呢?
- 串口成本低,而且更主要的是,串口对开发者和使用者而言,不需要去专门开发和安装驱动,这样又省了软件成本。
- 串口虽然速度慢,使用繁杂,但它的抗干扰能力是远远超过USB的,在同等高频干扰情况下,使用USB通讯的设备经常会死机卡住,但串口就不会。现在很多工业上还是会用串口,就是这个原因。
- 在传输速度要求不高的情况下,很多设备还是会保留串口,只是串口用起来真的没USB的方便。
三、查看电脑上的串口
我的电脑上没有串口.png可以使用虚拟串口软件生成.png
生成后的效果.png
一般而言,一个串口只能被一个软件占用,其他软件就用不了这个串口了。
使用这个虚拟串口软件生成的COM1、COM2,默认是相互连接的,从COM1发送数据,可以从COM2接收到;从COM2发送数据,可以从COM1接收到。我们可以通过这样的方式,来测试自己所写的软件。
四、ComPort的使用
Delphi 7 操作串口,我这里引用了第三方控件 ComPort:uses CPort
{获取当前设备所有串口号}
procedure TFrm_Main.FormCreate(Sender: TObject);
var
PortList: TStrings;
i: Integer;
begin
PortList:= TStringList.Create;
EnumComPorts(PortList); {获取所有串口号函数}
for i:= 0 to PortList.Count - 1 do
begin
cbb_Ports.Items.Add(PortList.Strings[i]);
end;
PortList.Free;
end;
{打开指定端口号}
procedure TFrm_Main.btn_OpenClick(Sender: TObject);
begin
if btn_Open.Caption = '打开串口' then
begin
if cbb_Ports.Text = '' then
begin
Application.MessageBox('请先选择一个串口号', '提示', MB_OK);
Exit;
end;
ComPort.Port:= cbb_Ports.Text;
try
ComPort.Open;
except
Application.MessageBox('串口打开失败,可能被占用了', '提示', MB_OK);
Exit;
end;
cbb_Ports.Enabled:= False;
btn_Open.Caption:= '关闭串口';
end else
begin
ComPort.Close;
cbb_Ports.Enabled:= True;
btn_Open.Caption:= '打开串口';
end;
end;
{发送数据}
procedure TFrm_Main.btn_SendClick(Sender: TObject);
begin
if ComPort.Connected then
ComPort.WriteStr(memo_Send.Text)
else
Application.MessageBox('请先打开相应串口', '提示', MB_OK);
end;
{接收数据}
procedure TFrm_Main.ComPortRxChar(Sender: TObject; Count: Integer);
var
str: string;
begin
str:= '';
ComPort.ReadStr(str, Count);
memo_Receive.Text:= str;
end;
{退出程序}
procedure TFrm_Main.btn_ExitClick(Sender: TObject);
begin
Close;
end;
五、实际运行效果图
我这里是将两个exe文件,分别运行了。
实际运行效果图.gif