2010-01-11 18 views
1

我正在研究一个大量使用串行端口的程序。在tcl 8.5.1中接收'BREAK'会导致COM端口退出工作(win xp)

它目前是一个windows-only程序(不幸的是:-),运行在Windows XP上。 TCL版本是8.5.1.0--它可能是也可能不是“官方”的TCL,不确定。

一切工作完美,直到另一端的设备发送一个BREAK(或者,只需断开串口:-)。

一旦发生这种情况,数据仍然可以正常收到,但通过'puts'将数据发送到端口不会导致数据进入串口。事实上,当我发送一个字符,询问fconfigure最后一个错误时,它总是说BREAK。现在,我不知道这是否仅仅是前一次错误的遗留物。

在任何情况下,世界上的HOW如何清除TCL串口上的'break'条件?

谢谢!

生锈

更新:这里是我们如何打开串口:

set state(com_port_handle) [open $name r+] 


    #  Configure the COM port. 

    fconfigure $state(com_port_handle) -mode 115200,n,8,1 \ 
             -blocking 0 \ 
             -buffering none \ 
             -translation binary 
    fconfigure $state(com_port_handle) -handshake none 

当我们想迫使我们这边休息一下,我们这样做:

fconfigure $state(com_port_handle) -ttycontrol {break 1} 
    after 100 
    fconfigure $state(com_port_handle) -ttycontrol {break 0} 
+0

嗯,我还不知道如何清除这个条件,但我发现如果你不使用xonxoff模式,条件从不会发生。 Rusty – rustycar 2010-01-11 23:01:19

+0

当你说BREAK时,你的意思是一个NUL/0x00/CTRL- @字符? – Jackson 2010-01-12 11:22:21

+0

您是否尝试使用open命令的-ttycontrol选项禁用BREAK条件? – Jackson 2010-01-12 11:35:46

回答

0

通过阅读后this summary软件流控制,它看起来像发送Xon字符可能会唤醒链接备份(如果它确实由Xoff暂停)。

此外,你可能想看看在TCLer的wiki上关于串行端口的thesearticles。这是我通常用作任何涉及串行端口的框架的代码。