作者 | 主题 |
---|---|
WWCWWC 至圣 经验值:71715 发帖数:8025 精华帖:145 |
楼主 2016-12-02 10:55:56
主题:说说西门子200smart modbus自由口通讯的那些事5 说说西门子200smart modbus自由口通讯的那些事5 上文说到接收指令应用时,定义控制字节SMB87各位值的含义及根据各位值设置相关参数的一些步骤和基本设置方法,这仅仅是自由口通讯应用开始的其中一些基础知识点,今天来说说编写自由口通讯的基本步骤。 编程自由口通讯的基本步骤: 1) 设置通讯参数:如果是集成在本机上基于RS485口,在SMB30中设置(prot0口);如果是采用通讯信号板,则在SMB130中设置(prot1口),这2个地址的设置,仅仅是对应的通讯口的不同,参数是相同的。 2) 定义接收信息的控制字节,对于prot0口在SMB87;对于prot1口在SMB187中设置。 3) 设置根据接收控制字节、通讯参数的通讯数据。端口0:SMB87/SMB88/SMW90/SMW92;端口1:SMB188/SMB189/SMW190/SMW192。(根据协议用户自由选择) 4) 设置通讯数据总字节数,SMB94/SMB194。(范围1~255) 5) 设置中断事件号、开中断。发送完成中断及接收完成中断。端口0:发送/接收完成中断事件号:9/23;端口1:发送/接收完成中断事件号:26/24 6) 启用发送指令XMT。 7) 在发送完成中断里编写接收指令RCV;在接收完成中断里编写发送指令XMT。 假设:做这样一个例子,让西门子200smart plc本机RS485口发送一串字符(siemens)到串口调试软件的信息接收区,串口调试软件的发送区发送一串(ni hao!)到200smart plc数据寄存器VB102开始的6个字节中,接收信息启用起始符、结束符方式。 做这个程序前先定义好一些通讯参数:(按上面的7点内容展开) 1) 定义SMB30:自由口通讯、频率9600、无校验,SMB30 = 16# 09 2) 定义SMB87:启用接收信息控制、启用起始符、结束符,SMB87 = 16# E0 3) 设置起始符:SMB88 = 16# 3A(自由选取) 4) 设置结束符:SMB89 = 16# 0A(自由选取) 5) 设置中断事件号:发送完成中断事件号9;接收完成中断事件号23 6) 开中断 7) 在上述初始化程序中,启用发送指令,并编写相应的程序 8) 定义好发送和接收数据的数据储存地址区 程序例子1: 1) 通讯初始化子程序: 2) 在发送完成中断中调用接收指令: 3) 在接收完成中断中调用发送指令: 4) 在主程序中调用通讯初始化子程序: 5) 定义发送数据块数据:(发送字符siemens:16#73;16#69;16#65;16#6D;16#65;16#6E;16#73)在数据块中写入,其中VB0是发送数据字符的个数不参与通讯。 6) 需要注意的一些问题:在“系统块”中设置“启动”项“cpu模式”为“RUN”并确定,其它暂时采用默认值。 7) 编译、保存用户程序,将程序下载到cpu中并运行cpu:创建一个便于观察的“状态图表”:将发送和接收的数据切换到ASCLL显示模式,并监控。 8) 连接通讯电缆,打开串口调试软件,设置好于PLC通讯SMB30一致的通讯参数,并在数据发送区填写好等待发送的数据:由起始符开始、、、、、、到结束符。 16#3A 16#6E 16#69 空格(占一个字符) 16#68 16#61 16#6F 16#21 16#0A 9) 这时,只要我点击串口调试软件发送区的“手动发送”按钮,软件的接收区如果通讯正常就会显示“Siemens”的字符 10) 观察串口调试软件的接收区回传回来的siemens字符: 11) 点击多次“手动发送”按钮,数据回传也是根据发送次数做相应的回传: 12) 回过来观察PLC“状态图表”中的显示部分内容: 自此,一个简单的数据发送和接收程序编写、调试已经完成。作为串口调试软件仅仅是学习、熟悉、掌握自由口通讯指令的一种工具,真正实际应用当然是需要与plc之间或者仪表、传感器之间的通讯了,有关通讯所涉及到的内容及问题将会更多,如校验程序的加入,多种数据参与通讯,数据类型的转换(ascll码),多站点之间的通讯等,程序将慢慢变的稍加复杂,但万变不离其中,最根本的且且是最实际的。连续、、、、、、 |