s7200自由口与多台仪表通讯

通讯规约
     说明:()内为内容说明,通讯数据均为ASCII码
 通讯规则
 发(上位机发送ASCII码) @XX(站号00至15)R(r大小写均可)
 回 (下位机返回ASCII码)   :(前导符)XXXX  XXXX  XXXX  XXXX  XXXX  XXXX  XXXX  XXXX (8路通道数据,范围0000~9999) XXXX(站号,板号)CRLF(两字节表示回车、换行)。
 通过S7 200自由口通讯怎样循环发送接收
 3块相同仪表的数据。如何做到通讯故障检测,
 自动跳过故障仪表。

问题补充:
单块仪表通讯已建立,如何实现3块仪表的循环和通讯故障检测。程序如下:
  主程序
  网络1
  LD     SM0.1
  MOVB   16#09, SMB30
  MOVB   16#B0, SMB87
  MOVB   16#0A, SMB89
  MOVW   +5, SMW90
  网络2
  LD     SM0.1
  MOVB   200, SMB34
  ATCH   INT_0:INT0, 10
  网络3
  LD     SM0.1
  ATCH   INT_1:INT1, 9
  ATCH   INT_2:INT2, 23
  ENI

  INT0
  LD     SM0.0
  DTCH   10
  MOVB   4, VB200
  MOVB   16#40, VB201
  MOVB   16#30, VB202
  MOVB   16#31, VB203
  MOVB   16#52, VB204
  XMT    VB200, 0

  INT1
  LD     SM0.0
  DTCH   10
  RCV    VB100, 0

  INT2
  LD     SM0.0
  ATCH   INT_0:INT0, 10

 我想将 MOVB   16#31, VB203 用MOVB VB300 VB203代替
 用LD SM86.5
   EU
   INCB VB300
 做累加
 当无反馈数据时如何累加地址
 比如第三个模块损坏
 

最佳答案

用LD SM86.5
   EU
   INCB VB300

 用这个你能测试哪个仪表?

 MOVB   16#B0, SMB87
 如果仪表有问题,或者有干扰,收不到结束字符,那怎么停止RCV?

 
 MOVB   4, VB200
  MOVB   16#40, VB201
  MOVB   16#30, VB202
  MOVB   16#31, VB203
  MOVB   16#52, VB204
  这些放到数据块里就可以了,数据块空间那么大。

  

  
  1 说一下思路:
   先通讯初始化
   向仪表1发数据,发送完成中断里接收,接收完成里定时,定时中断里向仪表2发送数据,发送完成中断里接收,接收完成里定时,定时完成中断里向仪表3发送数据,发送完成中断里接收,接收完成里定时,定时中断里向仪表1发送数据,如此循环。
   这样做的目的是思路清晰,但中断程序较多,如果从站更多的话,就没必要这样做了,用间址的方式,只要两个中断就可以和若干个从站通讯。

   2 3块相同仪表的数据。如何做到通讯故障检测?
   当向仪表发数据时,它不回数据,那就证明通讯有问题了。

   LDB=   VB3070, 0
   TON    T254, 15

   LD     T254
   =      V3200.0  (通讯故障位)

   3 西门子提供的modbus主站库只支持RTU的方式。

提问者对于答案的评价:
分析透彻 思路清晰 多谢支持

原创文章,作者:ximenziask,如若转载,请注明出处:https://www.zhaoplc.com/plc353496.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2021年7月5日 上午1:34
下一篇 2021年7月5日 上午1:34

相关推荐

发表回复

登录后才能评论