各位学长,小弟做了一个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