当前位置: 主页 > PLC控制

s7-200自由通讯时发送接收数据问题

我现在通过串口助手与S7-200进行自由口通讯设置了起始位数据位结束位。
PLC中初始化时已经设定了:如下
LDSM0.0//该位始终为1
MOVB9,SMB30//9600bit/s,8位数据,无校验,1位停止位
MOVB16#15,SMB88//允许接收,检测起始字符和结束字符,超时检测
MOVB16#EC,SMB87//送报文起始字符0
MOVB16#FF,SMB89//送报文结束字符十六进制数16#FF
MOVW+1000,SMW92//接收超时时间为1s
MOVB100,SMB94//接收最大字符数为100
ATCHINT_0:INT0,23//接收完成事件连接到中断程序0
ATCHINT_1:INT1,9//发送完成事件连接到中断程序1
ENI//允许用户中断
RCVVB100,0//端口0的接收缓冲区指针指向VB100
,通过接收中断,来控制输出点:程序如下
Network1
LDSM0.0
MOVBVB102,MB6
Network2
LDM6.0
=Q0.0
Network3
LDM6.1
=Q0.1
Network4
LDM6.2
=Q0.2
Network5
LDM6.3
=Q0.3
Network6
LDM6.4
=Q0.4
Network7
LDM6.5
=Q0.5
Network8
LDM6.6
=Q0.6
Network9
LDM6.7
=Q0.7
Network10
LDM6.0//如果校验正确
MOVB5,SMB34//复位校验错误指示位
ATCHINT2,10//定时5ms以提供PPI电缆接收/发送模式切换时间
CRETI//起动定时中断
//中断返回
//如果有校验错误
//将校验错误指示位置1
得到结果:
VB100接收的字节数3个VB101起始字符16#15VB102(数据这边有问题)VB103结束字符16#FF
,问题为什么单单VB102中的数据有问题,测试的结果与输出的Q0.x对应不上,很混乱
比如我数据发1500FF就出现VB102中的输出全为1,输入其他数据也是。这是为什么,我想要达到的效果是00全部不得电,01Q0.1得电,输入02Q0.2得电等等。求帮忙,是不是我哪边考虑错误了,新手还多多帮助,谢谢。

最佳答案

如果你想通过电脑中的串口调试助手来控制PLC200的I/O口,不需要写通信程序,只需在串口调试助手中设置参数,如波特率、奇偶校验位、停止位、数据位等等就可以与PLC通信,通信电缆必须用RS232转RS485.
如果你有外设想同PLC200通信,这就要写通信程序,一般地来说,1.外设与PLC通信时外设都有发送字符的条件,你的程序看不到;你的接受字符码是NAK,16#FF转换为字符码是什么呢?怎查不到?
2.字符接受完成后还需要发送字符,这样才能循环地发送接受字符,你程序中少了这部分。

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

专家置评

已阅,最佳答案正确。

  • 关注微信

猜你喜欢

微信公众号