作者:步履乘风 | 来源:互联网 | 2023-05-19 06:39
我在开发IBM4614收银机时,遇到串口死机现象。该机型使用的是netmos9835串口扩展卡,安装的windows2000系统。首先,我把收银机跟PC机用串口线对接,然后两边开启Ac
我在开发IBM 4614收银机时,遇到串口死机现象。
该机型使用的是netmos 9835串口扩展卡,安装的windows2000系统。
首先,我把收银机跟PC机用串口线对接,然后两边开启AccessPort串口工具,进行数据对发。
在串口打开的情况下,收发均正常。
但是当收银机串口关闭后,PC机往收银机发送数据,发现收银机死机。
后来发现好像是流控的问题,当PC机设置为硬件流控时,收银机串口关闭后,PC机发送数据,收银机则不死机。
后来发现,不管两边的流控是否一致,只要PC机不是硬件流控,在收银机串口关闭后,PC机发送数据均会导致收银机死机。
我试过两个PC机对连,不管两边的流控怎么设置,都不会导致死机的。
我现在需要修改收银机的配置,使其不死机,不知道该怎么做?
3 个解决方案
硬件流控制常用的有RTS/CTS流控制和DTR/DSR(数据终端就绪/数据设置就绪)流控制。
硬件流控制必须将相应的电缆线连上,用RTS/CTS(请求发送/清除发送)流控制时,应将通讯两端的RTS、CTS线对应相连,数据终端设备(如计算机)使用RTS来起始调制解调器或其它数据通讯设备的数据流,而数据通讯设备(如调制解调器)则用CTS来起动和暂停来自计算机的数据流。这种硬件握手方式的过程为:我们在编程时根据接收端缓冲区大小设置一个高位标志(可为缓冲区大小的75%)和一个低位标志(可为缓冲区大小的25%),当缓冲区内数据量达到高位时,我们在接收端将CTS线置低电平(送逻辑0),当发送端的程序检测到CTS为低后,就停止发送数据,直到接收端缓冲区的数据量低于低位而将CTS置高电平。RTS则用来标明接收设备有没有准备好接收数据。
常用的流控制还有还有DTR/DSR(数据终端就绪/数据设置就绪)。我们在此不再详述。由于流控制的多样性,我个人认为,当软件里用了流控制时,应做详细的说明,如何接线,如何应用。
这个是我看了你的问题去查的资料,你的问题就是PC机一定要是硬件流控制,收银机才不死机。我觉得是不是你的串口设计有问题,我们使用串口一般只使用3根线,TDX,RDX和GND。如果要使用硬件流控制,那么就要将CTS,和RTS也要接上。因此我觉得你的收银机上面肯定应该是使用的硬件流控制,只有当PC机也是硬件流控制才不会导致死机。我觉得,如果你的数据量不大的话,可以就把收银机改成软件流控制,或则不要流控制。
收银机是使用的硬件流控;
问题是我将其修改成无流控/软流控后,串口关闭后,PC机发数据仍然会导致收银机死机。
注意我说的问题,“不管两边的流控是否一致,只要PC机不是硬件流控,在收银机串口关闭后,PC机发送数据均会导致收银机死机。”
我再加一句,“不管两边的流控是否一致,不管收银机使用的是何种流控(无/软/硬),只要PC机不是硬件流控,在收银机串口关闭后,PC机发送数据均会导致收银机死机。”
所以,我怀疑是不是这款收银机,我设置流控设置无效啊。。。