TO jafy:
你发给我的Log文件我以收到,但给你回复的时候邮件被退回来了[
!],现在我在上海[
]
根据Log文件分析,前面的一部分可以是程序自动控测哪一个串口连接有可用设备,这些实际上都可以转换成API来实现,如:
14 20:47:16 TRWIN VCOMM_OpenComm COM2 SUCCESS
// ComHandle:=CreateFile('COM2',GENERIC_READ or GENERIC_WRITE,0,nil,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,0);
15 20:47:16 TRWIN VCOMM_SetupComm COM2 SUCCESS RxSize: 1024 TxSize: 512
// SetupComm(ComHandle,1024,512);
16 20:47:16 TRWIN VCOMM_SetCommState COM2 SUCCESS Mask: ffffffff Baud: 9600 Bits: 7 Stop: 1 Parity: Even
// SetCommState(ComHandle,FDCB); DCB的设置查看帮助
17 20:47:16 TRWIN VCOMM_SetCommEventMask COM2 SUCCESS
// SetCommMask(CommHandle,...);
18 20:47:16 TRWIN VCOMM_EscapeCommFunction COM2 SUCCESS GETCOMBASEIRQ
// EscapeCommFunction ...
19 20:47:16 TRWIN VCOMM_SetCommState COM2 SUCCESS Mask: ffffffff Baud: 9600 Bits: 8 Stop: 1 Parity: None
// SetCommState
20 20:47:16 TRWIN VCOMM_SetCommEventMask COM2 SUCCESS
// SetCommMask
21 20:47:16 TRWIN VCOMM_PurgeComm COM2 SUCCESS Receive Queue
// PurgeComm
...
看以看到,VCOMM_...后面的字符串基本上就是调用了对应的API函数,最后一列就是其参数
根据这些信息,稍加分析一下,完全可以重新实现一遍这个过程了
建议你用SpComm这个控件,带全部源码,分析它会对你有帮助
回到主题上来,我觉得对于前面自动检测设备这一部分完全可以忽略,由你来指定使用哪一个串口,这样程序也会简化许多,
53 20:47:26 TRWIN VCOMM_WriteComm COM2 SUCCESS Length: 2: 00 00
// 连续写入两个 0,可能与下一条指令有一定的间隔时间
54 20:47:26 TRWIN VCOMM_WriteComm COM2 SUCCESS Length: 1: 11
// 写入一个 11,可能与下一条指令有一定的间隔时间
55 20:47:26 TRWIN VCOMM_WriteComm COM2 SUCCESS Length: 1: EE
// 写入一个 EE,可能与下一条指令有一定的间隔时间
用mscomm来实现,如下
mscomm.output:=#0#0;
sleep(5); //延时5毫秒
mscomm.output:=#$11;
sleep(5);
mscomm.output:=#$EE;
用Spcomm实现,如下:
var
Cmd: Array[0..1] of Byte;
begin
FillChar(Cmd,2,#0);
SpComm.WriteCommData(@Cmd,2)
Sleep(5);
Cmd[0]:=$11;
SpComm.WriteCommData(@Cmd,1)
Sleep(5);
Cmd[0]:=$EE;
SpComm.WriteCommData(@Cmd,1)
end;
如果有数据返回的话,处理控制的事件就可以了
如果以上操作仍然不行的话,那你就再调节调节各种参数,多多调试,相信你总会成功的![
]