procedure OpenComm(COM:Integer); var cc:TCOMMCONFIG; Temp:string; hComm: THandle; begin SetCommMask(hcomm,$0); CloseHandle(hComm); Temp:='COM'+inttostr(COM); // 选择所要打开的COM hComm:=CreateFile(PChar(Temp), GENERIC_READ or GENERIC_WRITE, 0, nil, OPEN_EXISTING, 0, 0); // 打开COM if (hComm = INVALID_HANDLE_VALUE) then begin // 如果COM 未打开 MessageBox (0, '打开通信端口错误!!','',MB_OK); exit; end; GetCommState(hComm,cc.dcb); // 得知目前COM 的状态 cc.dcb.BaudRate:=CBR_9600; // 设置波特率为9600 cc.dcb.ByteSize:=8; // 字节为 8 bit cc.dcb.Parity:=EVENPARITY; // Parity 为 None cc.dcb.StopBits:=ONESTOPBIT; // 1 个Stop bit if not SetCommState(hComm, cc.dcb) then begin// 设置COM 的状态 MessageBox (0, '通信端口设置错误!!!','',MB_OK); CloseHandle(hComm); exit; end; // ShowMessage('通信端口设置成功!'); beep; end; 把自己项目的源程序都给你了。分是一定要给哟,呵呵!
这是我曾经写过的代码,直接复制上,希望能对你有帮助。 编码还算是规范,相信您能看懂。 MSComm是微软的Microsoft Comm Control6.0控件。procedure TfrmComSendTest.MSCommInitialize; begin if MSComm.PortOpen then MSComm.PortOpen := false;
对于您的想法,我想可以用下面方法实现。
1、首先在终端设备上作一个探测响应,当收到一个探测时就发送一个回复。
2、取得系统所用串口,在注册表'hardware\devicemap\serialcomm'下存有系统所有串口。
3、做扫描函数,依次打开串口,成功地话就发送探测报文。如果有回复的话就使用此串口。
var
cc:TCOMMCONFIG;
Temp:string;
hComm: THandle;
begin
SetCommMask(hcomm,$0);
CloseHandle(hComm);
Temp:='COM'+inttostr(COM); // 选择所要打开的COM
hComm:=CreateFile(PChar(Temp), GENERIC_READ or GENERIC_WRITE,
0, nil, OPEN_EXISTING, 0, 0); // 打开COM
if (hComm = INVALID_HANDLE_VALUE) then begin // 如果COM 未打开
MessageBox (0, '打开通信端口错误!!','',MB_OK);
exit;
end; GetCommState(hComm,cc.dcb); // 得知目前COM 的状态
cc.dcb.BaudRate:=CBR_9600; // 设置波特率为9600
cc.dcb.ByteSize:=8; // 字节为 8 bit
cc.dcb.Parity:=EVENPARITY; // Parity 为 None
cc.dcb.StopBits:=ONESTOPBIT; // 1 个Stop bit if not SetCommState(hComm, cc.dcb) then begin// 设置COM 的状态
MessageBox (0, '通信端口设置错误!!!','',MB_OK);
CloseHandle(hComm);
exit;
end;
// ShowMessage('通信端口设置成功!');
beep;
end;
把自己项目的源程序都给你了。分是一定要给哟,呵呵!
编码还算是规范,相信您能看懂。
MSComm是微软的Microsoft Comm Control6.0控件。procedure TfrmComSendTest.MSCommInitialize;
begin
if MSComm.PortOpen then
MSComm.PortOpen := false;
MSComm.OutBufferSize := 1024; //设置接收缓冲区的大小
MSComm.InBufferSize := 1024; //设置发送缓冲区的大小
MSComm.Settings := '9600,n,8,1'; //设置串口通信参数
MSComm.CommPort := 1; //设置串行端口号
end;如果初始化出错,证明端口被占用或不存在。procedure TfrmComSendTest.InitSend;
begin
MSComm.PortOpen := true; //打开串口
MSComm.OutBufferCount := 0; //清空发送缓冲区
MSComm.DTREnable := true; // 数据终端准备好
MSComm.RTSEnable := true; // 请求发送
MSComm.Handshaking := 0;
end;procedure TfrmComSendTest.SendOver;
begin
MSComm.PortOpen := false; //关闭串口
MSComm.DTREnable :=false;
MSComm.RTSEnable :=false;
end;