现在我的通信能够一发一收,但是如果发过以后,没有收,程序就等待着接收,这样我的程序就不能再通信了,也就是不能再收了,我应该怎么去设置接收接收呢?
问题补充:
1,采用开始字符接收的时候,我能收发正常,也就是在通信正常的情况下没有问题,加入有一个仪表没有给我回应,我的程序一直在等待接收,下一次的发送也不能进行。
2,采用空闲时间作为开始接受条件时,程序不能发送的现象能解决,但是它把我不应该接收的信息也接收过来了,当然我希望的是能检测到开时字符的时候接收。
3,当我把空闲线和开始字符结合时,程序就不能接受信息。
我个人认为是3的情况是在空闲线一直在检测,所以数据都不再接收了,我是在发送完以后,使用发送完成中断,在中断中接收数据。
这个问题在论坛上看了好多,但是自己好像还有一些没有考虑到,是不是我的空闲线时间设置的不对,还是我空闲线和开始字符两个不能在一起混合使用。
我的接收条件是超时和最大字符数
最佳答案
自由口接受信息控制字节定义:
端口0应用于SMB87,各位意义如下
SM87.7 =0 禁止接收
=1 允许接收
SM87.6 =0 不使用SMB88中信息作为起始字符检测
=1 使用SMB88中信息作为起始字符检测
SM87.5 =0 不使用SMB89中信息作为结束字符检测
=1 使用SMB89中信息作为结束字符检测
SM87.4 =0 不使用SMW90中数值【单位是ms】作为空闲检测
=1 使用SMW90中数值【单位是ms】作为空闲检测
SM87.3 =0 当SM87.2=1时,该位为0设定接收超时时间是字符间计时
=1 当SM87.2=1时,该位为1设定接收超时时间是信息间计时
SM87.2 =0不使用SMW92的值作为定时器时间值来结束信息接收
=1使用SMW92的值作为定时器时间值来结束信息接收
SM87.1=0 不使用断线检测开始信息接收
=1 使用断线检测开始信息接收
SM87.0该位固定为0
根据你问题的描述,你可以选择设定SM87.3=0 SM87.2=1作为字符间计时器 或者SM87.3=1 SM87.2=1作为信息间计时器 来结束信息的接收;当然得看PLC是和什么设备通信来确定使用哪种方式结束信息接收!
希望对你有帮助!!
提问者对于答案的评价:
把控制字的参数了解清楚,对于编程时最重要的,然后加上不断的去调试,就能得到自己想要的。
专家置评
已阅,最佳答案正确。
对于自由口通信的接收条件有很多,起始结束字符和定时器。在接收完成中断里再去判断是什么条件接收结束的。
原创文章,作者:more0621,如若转载,请注明出处:https://www.zhaoplc.com/plc161276.html