回复关于200smart Modbus通讯之RS232的那些事
今天在“找答案”栏目中看到有一则提问,问题大致意思是组态了一个prot1口的基于RS232与扫描枪的通讯程序,程序基本按官方例子程序编写的,就是无法与扫描枪通讯连接起来,读取扫描枪发送过来的数据。
问题贴链接:http://www.ad.siemens.com.cn/service/answer/solved_246042_1076.html#
一说起官方提供的那些例子程序,我有部分验证过,均能够正常通讯。而无法通讯的可能原因大多是验证者的硬件连接错误或个别编程时的低级错误引起。所以,我在回复前很自然的想到自己初次验证时可能存在的错误,即外部硬件连接错误。
提问者他调用的通讯口为prot1,即为200smart 扩展信号板(SB CM01 信号板订货号:6ES7 288-5CM01-0AA0)。该扩展信号板共有6个接线端子,分别为:1#=(系统地)、2#=TX/B(RS232通讯信号正)、3#=RTS、4#=M(信号地)、5#=RX/A(RS232通讯信号负)、6#=5V(一般用于终端电阻的连接电源),200smart也只有扩展信号板通过硬件组态设置为RS232通讯口,集成的RS485口无法通过硬件组态设置为RS232口。
RS485与RS232通讯电平的差异:以prot1通讯信号板接线端子说明。
RS232通讯为通讯信号输出端与M端子之间的电压信号,即通讯时,通讯电平-15V~-5V为通讯电平逻辑1,+5V~+15V为通讯电平逻辑0,最高通讯频率20Kbit/S,通讯距离最长15米,只能实现一对一的通讯模式。
RS485通讯为通讯信号输出差分方式,即端子2#与端子5#之间的电压差。其中,+2V~+6V为通讯电平逻辑1,-6V~-2V为通讯电平逻辑0,通讯频率1200 ~ 115200Bit/S,通讯距离最长50米,可以与最多31个从站实现通讯。
由此,通过控制信号板CM01连接到扫描枪的RS232通讯接线,必须有2#、4#、5#这3个接线端子与扫描枪的通讯输出端子对接,端子2#、5#交叉,4#对接。提问者没有列举具体的扫描枪,故无法最进一步说明连接方式。这个是我首先怀疑无法通讯,容易出错的地方。
另外容易出错的地方是定义接收指令的接收信息,接收起始符或者信息定时器。相对起始符容易理解,即plc一直处在接收状态,当plc接收到定义好的起始符(在SMB188中定义字符),即作为接收信息的开始。如果定义接收信息的结束符,那么,同样道理,接收信息接收到结束符即判断为接收信息的结束。提问者没有定义这些起始和结束符,而是调用了信息定时器,即判断信息“串”与信息“串”之间的时间间隔,他定义为5mS在SMW192中),另外,同时定义信息的长度50个字符(这个定义非常重要,是必须要填写的项目之一)。根据他的问题描述,倒推通讯参数的控制字节SMB187的值应该是2#10001000,因为手头上没有通讯电缆,无法测试通讯控制字节的这点差异(通讯控制字节第0位),这个是我第二个疑点。其次,定义接收信息控制字节SMB187,建议定义为2#10010100比较合适。
还有一个可能出错的原因是定义的SMB130数据,是否与扫描枪的通讯参数保持一致,如果不一致也是造成通讯失败的原因之一。