s7-200 自由口通信错误处理

现在我的通信能够一发一收,但是如果发过以后,没有收,程序就等待着接收,这样我的程序就不能再通信了,也就是不能再收了,我应该怎么去设置接收接收呢?

问题补充:
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

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2017年6月9日 上午11:57
下一篇 2017年6月9日 上午11:57

相关推荐

  • SMART200 PLC程序保护

    SMART200 PLC除了一个上传密码和程序块加个密码,还有其他完全保障方法不 让别人把我的程序弄出来吗?网上有个人专门解密码为主的,以上两个密码都可以解开 …

    SIMATIC S7-200 SMART 2020年10月31日
  • S7-200 SMART绝对位置如何改变方向

    默认输出为正向,我走到正向限位处(还没走完设定量),不自动往回走而是停止,要改哪个参数吗 最佳答案 如果你使用的是绝对位置控制,只需要更改设定值然后启动就可以了,程序会自动判断需要…

    SIMATIC S7-200 SMART 2017年6月1日
  • 200Smart自由口有问题咨询

    本人用200smartPLC通过232转485模块,然后再用USB转232通过友善串口调试助手给PLC发16进制数,结果PLC能接收。我有一台仪器,通过USB转232能读取该设备的…

    SIMATIC S7-200 SMART 2020年10月30日
  • S7_200 Smart工作原理

    1.程序中涉及多个子程序,按功能写,分别实现初始化,通讯,控制伺服,控制阀,子程序调用顺序的不同,如先调用通讯,后调用其他子程序,这时PLC是先处理通讯还是根据PLC工作原理读取输…

    2019年6月10日
  • 200 smart PLC如何在系统块中去掉EM0中的数值

    大家好,我想请教一下如何在200 smart PLC中去掉(不要)之前在EM0中写过的数值,如下图所示,谢谢了!也提前给大家拜年! 图片说明:  &n…

    2021年7月4日
  • 求一份模拟量库

    1.自己制作了库A,(库A里面用了模拟量库S_ITR)这样就产生了冲突的情况,如果先拖放库A,就不能再用库S_ITR;如果先用库S_ITR,就不能再用库A所以想求一份不同名的模拟量…

    SIMATIC S7-200 SMART 2021年7月4日
  • 关于MOV_B的问题

    在MOV_B的指令中,IN的最大输入是255,如果我需要输入的数大于255该怎么办 最佳答案 MOV_B 是字节传送指令,其值的范围由字节宽度 8 位…

    2021年7月4日
  • smart 700 ie 向plc vd180写入小数,plc监控时vd180显示NAN

    smart 700 ie 向plc  vd180写入小数,plc监控时vd180显示NAN,请问各位老师我这个是不是哪边格式选错了…

    2019年6月10日
  • s7-200smart库指令如何指向04功能码

    s7-200smart作主站,需要读取温度表中的当前温度,厂家给出的301001地址,读不出来,经沟通,要求指令中用04功能码去读,而库指令中的RW管脚上,只能填写0或1,请教如何…

    2020年10月30日
  • 晶体管类型plc

    资料上说晶体管类型最大电流0.2~0.3,我接个中间继电器是不是不用考虑负载电流了,因为中继让晶体管触发就行了? 最佳答案 k还得考虑中间继电器触发电流多大吧 提问者对于答案的评价…

    SIMATIC S7-200 SMART 2021年7月4日