低头读手腕上的时钟,显示北京时间08点25分,刚抵达公司的正门,刷第一次门禁,接着刷第二次门禁,08点30分准时坐在答热线的座位上,忙碌而充实的一天已被触发。
一如既往的打开问题平台并扫描客户登记的问题,“S7-200自由口通信的停止位设置”映入眼帘,之前与自由口通信已是亲密无间,于是信心满格的拨通客户那头的号码。
“喂,哪位?”电话那头传来急促的声音;
“李工您好,这里是西门子技术热线,请问您有什么技术问题”,始终如一的开场白再次出现;
“啊!是西门子的工程师啊,您好!我有一个问题想请教一下……”急促的声音顿时跳变为些许欣慰,问题内容是S7-200的PLC与第三方的仪表进行自由口通信,通信对象的传输格式有两个停止位,S7-200是否支持?
查阅Micro’Power文档的自由口通信部分,明确的说明了S7-200使用的芯片不支持上述格式,即硬件不支持。告知客户该结论后,客户进一步咨询:如果S7-200的传输格式有一个停止位,而通信对象本身设置的接收格式为两个停止位,能否实现数据的收发?
听了客户的描述不禁懵了,这样的数据收发能实现吗?俗语说“到处留心皆学问”,这个有价值的问题需要进一步确认。
根据客户提的这个问题而做了以下的测试:
测试一: 通过串口调试器测试,S7-200与串口调试器的波特率、数据位、校验位设置完全一致,只有停止位是不同的,S7-200的停止位默认是一位且无法修改,而串口调试器的停止位设置为两位; S7-200无论是发送数据到串口调试器,还是从串口调试器接收数据,通信一切正常;
测试二: 通过S7-300的串口模块CP341测试,S7-200与CP341的波特率、数据位、校验位设置完全一致,只有停止位是不同的,S7-200的停止位同上为1位,而CP341的停止位设置为两位;无论是同上的数据收发测试,还是更改通信双方的校验位(奇校验或偶校验)之后的测试,通信仍然正常。
根据传送数据的格式规定的不同,串行通讯可采用以下两种传输方式:
(1)异步通讯: 以字符为数据传输单位,在通信的数据流中,字符间异步,字符内部各位间同步。一旦传送开始,组成这个字符的各个数据位将被连续发送,并且每个数据位持续的时间是相等的,接收端通过检测字符中的起始位和停止位(奇偶校验位)来判断接收到达的字符;
(2)同步通讯:以帧(含多个字符)为数据传输单位,字符之间不允许有间隙,也没有起始位和停止位,为了保证接收端能正确区分数据流,收发双方必须建立起同步的时钟。
S7-200 的自由口通信方式显然属于异步通信方式,其每个字符的传输格式如下图所示:

起始位表示一个字符的开始,低电平表示,停止位表示一个字符的结束,用高电平表示,停止位结束到下一个字符的起始位之间的空闲位(即空闲线)用高电平填充。当校验类型是奇校验或偶校验时,对应的校验位为低电平或高电平,字符的数据位为11位;当校验类型是无校验时,传输格式中则无校验位,数据位之后直接是停止位,字符的数据位为10位。如果在空闲线时间到之前S7-200接收到任何字符,接收消息功能会忽略那些字符并且按照给定的时间重新启动空闲线定时器,在空闲线时间到之后,接收消息功能将起作用。S7-200的空闲线时间应该大于在指定波特率下传输一个字符的时间,典型值为在指定波特率下传输三个字符的时间。当S7-200将空闲线检测作为接收指令的起始条件时,由于停止位和空闲位都是高电平,在通信双方的停止位设置不一致的前提下,只要通信对象发送的字符能满足S7-200的空闲线条件,就可以实现二者的通信,反之亦然。
结论如下:S7-200的硬件不支持传输格式有两个停止位,当通信对象的停止位设置与其不同时通信也可能正常,比如说串口调试器、CP340/341(串行异步通讯)等等。将以上测试结果在第一时间与客户进行分享,并建议客户进行实际测试以确认是否可行,客户听后大受鼓舞,之前失落的谈吐也一去不复返。低头读手腕的时钟,已经是10点30分,目光再次回到问题平台,继续扫描客户登记的问题……