自由口通信请教

各位学长,小弟做了一个S7-200 PLC与日本理化CD/CH系列回路调节器进行自由口通信的程序。不知道是否正确,请大家提出意见。
 日本理化CD/CH系列回路调节器的协议中所有字符及数字均为ASCII码形式。协议中的控制字符的符号及对应的ASCII码值(16进制)
 分别为:EOT(04H),ENQ(05H)----------

 VB100:发送数据区
 VB200:接收数据区

 MAIN
 NET 1 读数据,向仪表发信息。
 PLC发送:EOT,  表号,  参数名, ENQ
                     EOT, 0,  1, M, 1, ENQ (PLC读1号表的过程值 M1)
 ASCII码形式:04H,30H,31H,4DH,31H, 05H

 LD     I0.1
 EU
 MOVB   16#09, SMB30                //基本设置
 MOVB   6, VB100                    //一共6个字节
 MOVB   16#04, VB101                //EOT
 MOVB   16#30, VB102                //表号
 MOVB   16#31, VB103                //表号
 MOVB   16#4D, VB104                //参数名
 MOVB   16#31, VB105                //参数名
 MOVB   16#05, VB106                //ENQ
 XMT    VB100, 0                    //VB100:发送数据区
 ATCH   INT_0:INT0, 9
 ENI

 INT_0
 NET 1 接收数据,获取仪表信息。
 LD     SM0.0
 MOVB   16#80, SMB87                //16#80(1000 0000:允许接收信息功能,其它七项设置全部忽略)
 RCV    VB200, 0                    //VB200:接收数据区

 1.我以上的编程是否正确?如果有错误,在哪里?
 2.在主程序中,我只对特殊存储器字节SMB87进行设置,其它没有设置,是否会对通信有影响?如果需要设置,应如何设置?(请给程序)
 3.我还有什么没有考虑到的地方?

最佳答案

我不敢说你程序哪里不对,但依我的经验(先声明一下,俺也是新手)总体上感觉你的程序结构有点问题:数据的发送和接收一般放在中断允许之后,并且中断允许一般都有发送中断和接收中断的。以下是我当时学习自由口通讯时在网上找到的一个例程,主要介绍如何用 S7-200连接 GSM 调制解调器发送短消息,说得很清楚的,但限于篇幅,没办法全部帖上来,你可以去百度找一下原文(《S7-200  自由口通讯》),WORD和PDF文档都有。
 MAIN 
 Network 1 
 LD          SM0.1 
 MOVB      9, SMB30 
 MOVB      2#11000100, SMB87 
 MOVB      '>', SMB88 
 MOVW      +5, SMW92 
 MOVB      255, SMB94 
 ATCH      INT_0, 23 
 ATCH      INT_1, 9 
 ENI 
 Network 2 
 LD          SM0.0 
 RCV        VB100, 0 
 Network 3 
 LD          M0.0 
 EU 
 R            SM87.7, 1 
 RCV        VB100, 0 
 XMT        VB0, 0 
 Network 4 
 LD          M0.1 
 EU 
 R            SM87.7, 1 
 RCV        VB100, 0 
 XMT        VB20, 0 
  
  
  INT_0 
 Network 1 
 LDB=      VB101, '>' 
 S            M0.1, 1 
 Network 2 
 LDB=      VB104, 'G' 
 MOVB      '>', SMB88 
 Network 3 
 LDB=      VB104, 'S' 
 MOVB      '>', SMB88 
 S            M0.0, 1 
  
  
 INT_1 
 Network 1 
 LD          M0.0 
 S            SM87.7, 1 
 RCV        VB100, 0 
 R            M0.0, 1 
 Network 2 
 LD          SM0.0 
 FILL      +0, VW100, 10 
 Network 3 
 LD          M0.1 
 S            SM87.7, 1 
 MOVB      '+', SMB88 
 RCV        VB100, 0 
 R            M0.1, 1 
  
 这里需要特别注意的是,在初始化程序中,端口 0 已被置为接收状态,此时如果直接发送AT指令,将会导致端口 0发生通讯冲突,而导致其不能正常工作。因此,我们在发送指令前必须先禁止接收(将 SM87.7 复 0)然后执行 RCV 指令,RCV 指令执行时将会检测 SM87.7 的状态,当发现 SM87.7=0 时,即停止端口 0的接收。这里我们建议,在使用XMT指令前,首先执行 R      SM87.7, 1  、  RCV        VB100, 0两条指令(VB100可以换成其他地址)。 

  这里我们总结以下自由口编程的一般原则: 
 1.  SM0.1触发端口初始化,连接发送完成和接收完成中断(中断事件 9和 23) 
 2.  SM0.0触发RCV 指令 
 3.  XMT 指令用上升沿触发,并在指令运行前先停止端口 0 的接收(复位 SM87.7,
 执行RCV指令) 
 4.  在发送完成中断中,重新置端口 0为接收状态(置位 SM87.7,执行 RCV 指令),
 清空RCV指令的接收缓冲区 
 5.  尽量减少在中断程序中编程,如果时间允许仅在中断程序中置标志位,然后在主
 程序中扫描该位执行具体的程序 
 6.  根据将要接收信息的不同,合理设置 SMB87~SMB94

提问者对于答案的评价:
ok

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

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

相关推荐

  • 能否用RCV接收数据个数来停止RCV

    比如用RCV接收数据放入VB100数据有100多个字节,而我只需要前50个能否当VB100=50的上升沿,复位SM87.7来停止RCV的接收? 问题补充:可能我表达的不明确。我的意…

    SIMATIC S7-200 2020年11月1日
  • S7-200有个可查询表格(VD108什么的)是什么样?麻烦谁提供一下信息!

    S7-200有个可查询表格(VD108什么的)是什么样?麻烦谁提供一下信息,急! 问题补充:PID生成的表格之类什么的,我第一次用,也不是太清楚…… 最佳答案 200表指令在下列手…

    SIMATIC S7-200 2020年11月1日
  • ppi下载设置

    PPI下载方式,在控制面板中进行PG/PC设置时,COM无法选中,总是出现USB口并且是灰色的,不能更改成COM口?应该在怎样设置? 最佳答案 1.在设置PG/PC接口中,选择PC…

    SIMATIC S7-200 2021年7月5日
  • RS485-RS232通讯线问题

    我现在要用计算机串口向PLC发送命令,我现在有一个RS232-RS485转接口,与PLC该怎么连,转接口有D+/A、D-/B、GND、+9V四个接线端,与PLCPORT0口该怎么连…

    SIMATIC S7-200 2020年11月1日
  • s7200smart高速计数器

    有两个编码器接在同一个plc上分别测不同设备的转速,定义了HSC0和HSC2,但只能读到HC0中的数值。请问各位大神,这是什么情况? 问题补充:刚开始计数模式都定义为9,也读不到H…

    SIMATIC S7-200 2021年7月5日
  • 200与伺服

    请问有S7-200与伺服编程实例吗 钻石用户推荐最佳答案 1、实例:交流伺服电机的PLC控制:http://www.ad.siemens.com.cn/service/answer…

    SIMATIC S7-200 2021年7月5日
  • PC与S7-200通信故障

    1个小时前PC与plc通信还很正常,不知道哪里出了问题,突然怎么样都不能与plc通信了。排除通信口故障,因为用hmi通过mpi电缆可以正常与运行中的plc进行通信,监视plc中数值…

    SIMATIC S7-200 2021年7月5日
  • cpu224cn

    用V4.0软件能将CPU224cn中的程序上传,修改后编译未出现错误.但下载时,系统块和数据块能下载但程序块下载时出现编译错误并导致下载失败. 问题补充:请问如何确认自己使用的是哪…

    SIMATIC S7-200 2021年7月5日
  • plc200程序调用

    在step7-microwin中怎样调用子程序?比如已经编好模拟量输出显示的程序(烧入后能不能显示?),后续不同的模拟量都要输出,那么是不同的量都要编写一遍还是可以调用?具体怎样调…

    SIMATIC S7-200 2017年11月12日
  • 西门子200PLC与电能表通讯通讯上来了 但是读取到的都是乱码

    这个电表与台达PLC,与施耐德Twido PLC通讯都通上了,读取上来的直接就是浮点数,现在我使用224XP与该电表通讯上了读上来的不管是浮点数还是整数,都是乱码,请大神…

    2017年11月13日

发表回复

登录后才能评论