斑竹分享:
4年前研究过, 总结了些心得, 但是时间久了,忘记了, 结果这次又犯晕,折腾了N久才回过神。记下来,备忘。
1. A、B端子问题:
RS485信号线通常会标记为 A、B. 但是, 但是... S7-200 的A是负, B是正; 而通常USB转RS485或是智能仪表都是A为正, B为负的. 稍不注意就会接错线的....
2. 奇偶校验、停止位问题:
官方、网上文章所有的例程都是设为 不做校验 (Parity = 0), 呵呵呵。 实际的情况是, S7-200 做从站时, 如果不做校验, 需要把智能仪表的停止位设成2, 凑成11位;
如果S7-200做主站, 选择不做校验,那么智能仪表这边停止位还是设为1.
所以, 不如设成奇校验或是偶校验, 简单方便。
MBRTU 串口调试工具很好用, 打开串口时, Line Control中默认是 N,8, 1; 即不做奇偶校验, 把N 改成O (奇校验 odd) 或是E (even, 偶校验)即可. 只支持Com 1 / Com2, 所以对USB转RS485的,注意在电脑上设备管理器中端口号要改一下, 同时要通讯参数也要设置一致
3.网络连接器
用Profitbus DP数据总线插头就行了, 或者直接把设备的RxD+ 和 RxD- 分别与S7-200串口中对应的针脚连起来也能用。
4. Modbus地址问题.
*简单的办法是根据智能仪表的手册 功能号 来选择对应的地址段. 比如手册上说读模拟量寄存器功能号是4, 那就反查出是3xxxx.
S7-200 的地址 在智能仪表的基础上加1, 比如说仪表手册上是0x0040, 那么地址要设为65
5. 其它
没有其它了, 上面的问题解决了, 一切顺利了......
关于楼主说的**点,系统手册明确指出停止位主从站均为1位,哪里可以把停止位设为2位?200的通讯口好像就还只支持1位停止位的格式。
斑竹:
第2点的意思是说:
(1) 如果S7-200做从站, 选择 无校验, 那么要把 智能仪表 这边停止位设成 2.
(2) 如果S7-200做主站, 选择 无校验, 那么要把 智能仪表 这边停止位还是设成 1.
S7-200这边库指令是没办法调停止位的
**点实际是仪表匹配将就做主站的200(它只支持1位停止位),智能仪表仍应该选择无校验
综上所述,校验位的选择必须仪表和200匹配才行。
斑竹:
如果仪表的停止位你能随意控制(比如程序就是你写的),不妨区分收停止位和发停止位。
一般的串口通讯收发停止位是相同的。本着严以律已宽以待人的精神,尽量给通讯对方多的停止位(即发时的停止位),而收时则只要求基本的停止位(一般是1位),这样就可以适应任何的停止位模式。