| 作者 | 主题 |
|---|---|
|
WWCWWC 至圣
经验值:79166 发帖数:9103 精华帖:157 |
楼主
主题:说说西门子200smart modbus自由口通讯的那些事9
说说西门子200smart modbus自由口通讯的那些事9 上文说到用指针方式连续发送个字符串的例子,旨在熟悉发送不同信息的多个字符串时,应用指针方式,直接按发送数据地址的偏移能够方便快捷的、有目的、有选择性地发送多个字符串数据。 今天来做这样一个实验,用一个模拟应答方式,来模拟通讯的请求与应答。即PLC先发送一串字符“modbus”的请求给串口调试软件,如果串口调试软件接收到正确的这串字符,则回传给PLC一串字符“ok!”的应答(串口调试软件手动发送)。如果在串口调试软件发送的字符PLC接收过程中出现错误字符(与发送的字符不符),则PLC请求再次发送字符串“modbus!”,连续发送3次接收错误的字符串后,则PLC发送一串字符“Error”给串口调试软件,表示通讯出现故障,并停止请求发送数据。其中,串口调试软件用手动的方式进行发送字符模拟次数。 所需要准备的器件: 1) 一台安装有串口调试软件和200smart V2.1版本软件的电脑 2) 一条以太网通讯电缆线;串口调试软件所需要连接的PPI电缆及USB转换电缆 编程思路: 1) 定义200smart PLC集成的基于RS485口为自由口通讯;9600;无校验;8个数据位;1个停止位(SMB30 = 16# 09) 2) 定义接收控制字节SMB87 = 16# DC, 3) 定义起始符为SMB88 = 16# 3A 4) 不定义结束符为SMB89 = 5) 定义空闲线定时器时间SMW90 = +4 //每一个字符的间隔 6) 定义消息定时器时间SMW92 = +10 //根据串口调试软件的字符串长度大概1.5倍确定 7) 定义一次所需要发送、接收的数据总数为SMB94 = 255个 8) 启用接收完成中断事件号23;发送完成中断事件号9 9) 开中断 10) 启用发送指令XMT 11) PLC侧准备的发送给串口调试软件的字符串有2个,一个是“modbus!”,另一个是“Error!”,串口调试软件测准备一个字符串“ok!”。 程序: 初始化通讯子程序: 数据块中准备发送的数据字符: 将plc程序下载到cpu后,新建一个“状态图表”,方便监控串口调试软件回传的字符: 启动串口调试软件,并设置与SMB30一致的通讯参数,端口设置为COM3,将plc设置为运行,串口调试软件正确接收到第一串字符“modbus!”,图示: 在串口调试软件发送区编辑“ok!”字符串,用16进制发送:16#3A(起始符);16#6F(O);16#6B(K);16#21(!),点击发送后,查看PLC“状态图表”接收地址区信息,图示: 可以看到串口调试软件发送的“ok!”正确的字符串。如果这时我修改串口调试软件发送区最后一个字符值由原16#21改为16#22,连续点击发送3次,则,串口调试软件接收区就接收到一个错误显示字符“Error”,图示: 假设,这时,我再将最后一个字符改为原字符值16#21,看显示内容,图示: 在发送完成中断中编辑接收指令: 在接收完成中断中编辑发送正确和错误信息,图示: 总结: 本次验证能够达到原思路要求,实际上真正的目的是为了能够正确使用校验子程序的例子程序做前期的准备,而不是仅仅取一个发送字符的某一个字符能够正确校验整串字符的正确性,简单的取一个字符作为“校验”的结果,错误概率远比一串数据进行校验后的要大的多。 |