S7-200自由口通讯RCV指令中能否调用字符中断

我先介绍一下项目情况:使用S7200 224XP以上型号的PLCPort0做自由口与第三方的智能模块进行modbus Rtu标准协议通讯。S7200做主站,其余智能模块做从站。modbus Rtu标准协议通讯中信息发送帧的格式为:T1+T2+T3+T4 站地址 功能码 起始地址 数据长度 CRC效验码 T1+T2+T3+T4 。智能模块的响应帧格式为:T1+T2+T3+T4 站地址 功能码 数据长度 寄存器数据1 寄存器数据2......寄存器数据n CRC效验码 T1+T2+T3+T4 由于上述格式中没有起始符和结束符,所以在PLC发送请求帧完成以后转为接收状态,故采取了大于3.5个T的方式,即检测空闲状态,空闲时间大于1/9600*10*3.5=3.65ms,设置SMW90为5ms来判断信息帧接收开始。判断信息帧接收完成:由于modbus Rtu标准协议通讯每个字符间的间隔时间为1.5T(昨天晚上在书店查施耐德通讯手册看见的),那么设SMW92为大于1.5T(1/9600*10*1.5=1.6ms)2ms来判断信息帧的结束。
 由于要进行CRC校验计算,能否在使用RCV接收指令时,调用字符中断时间8。如果能,字符间时间计时器SMW92时间是否应该加长。

问题补充:
【调用字符中断时间8】为【调用字符中断事件8】。调用字符中断,可以在中断中直接将SMB2采取间接地址进行CRC计算。
  老槐 非常感谢你的帮助。我还是想弄清楚昨天你说的RCV和字符中断是否可以同时使用。例如:初始化子程序中使Port0允许接收字符。再在主程序中使用MOVE命令使得SM87.7=0,XMT一下,调用ACTH事件9设定SM87.7=1,允许接收。请问此时如果不使用RCV命令能否使得MOV 1,SM87.7生效?中断事件9完成后返回主程序时,如果使用接收命令RCV后,能否再使用字符中断,在接收完成一个字符以后就立即进行CRC运算?当然程序编写是很灵活的。我在这是想把我的这个疑问弄清楚。谢谢。

 太感谢老槐了!我给你发了个邮件,你帮我发个字符中断的里程,我看看好么?谢谢。

最佳答案

初始化子程序中使Port0允许接收字符。再在主程序中使用MOVE命令使得SM87.7=0,XMT一下,
 初始化的时候没有执行RCV,所以就不应该在主程序中使用MOVE命令使得SM87.7=0,
 使能允许接收,然后执行RCV,硬件端口才执行发送,反过来也是一样的,使SM87.7=0,然后执行RCV才人工关闭接收。
 假如有3个从站,
 1 在初始化的时候,设置SMB30,SMB87以及接收开始条件和结束条件
  想写的东西太多,你还是看手册吧,或者给个邮箱,发个例子给你。

 CRC的计算和通讯可以分开来处理,通讯有中断来处理,CRC计算可以有主程序来处理。
 既然224xp做主站,那么一切的流量控制都在你的掌握之中,也可以把CRC计算完毕再和下一个站通讯

  
 能否在使用RCV接收指令时,调用字符中断时间8?
 前一个问题不是说的很明白了吗?用RCV就不要用字符中断时间8。

提问者对于答案的评价:
非常专业,谢谢。我还不会字符中断,请发个字符中断的例程给我,好好学习一下。我的邮箱是CTL1974@163.COM。

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

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

相关推荐

发表回复

登录后才能评论