日志
实战S7-200之间通讯
2018-10-05 19:19
今天我们来展示一个S7-200的组网通讯的实战过程。今天是2108年-10-5日,星期五。本次实战的目的是利用S7-200的通讯能力实现2个PLC之间的数据通讯。
实战材料: 两台S7-200的PLC,采用的接头是S7的PROFIBUS接头。用软线连接,并采用终端的形式连接。 说明一下,采用的PLC是国产特别的PLC,具有以太网连接的能力。可以通过以太网为PLC进行通讯。 1、PLC编程软件通讯篇 采用PLC, 采用STEP 7-Micro/WIN为PLC进行编程 (1)、PLC软件的版本要注意,新的PLC编程软件是可以启动和停止PLC但好像无法将PLC的程序上在上来。所以要选择特定版本的PLC编程软件。我选择的PLC版本是V4.0 STEP 7-Micro/WIN SP9. (2)、在西门子网站上下载库文件。Toolbox_V32_-STEP 7-Micro WIN 32 Instruction Library (3)、解压文件,运行Setup程序。运行结束后出现下面的程序:
选择内存为VB2000的开始地址作为MODBUS的出生地址 (5)、编辑主站程序 Network 1 扫描第一个周期,地位各操作位 LD First_Scan : SM0.1 R. MBUS_CTRL_DONE : M0.0, 8 Network 2 初始化Modbus主站通讯 EN: 使能:必须保证每一次扫描周期都被使能(使用SM0.0) Mode: 模式:常为1,使能Modbus协议功能;为0时恢复系统的PPI协议。 Baud: 波特率:设为9600,与从站波特率对应。 Parity: 教研,校验方式选择,0=无教研 Timeout: 主站等待从站相应时间,以毫秒为单位,典型的设置值为1000毫秒,1秒。 注意,这个值要足够大以便从站有足够的相应时间。 Done: 完成位,初始化完成,此位会自动置1.可以用该位启动MBUS_MSG读写操作 Error: 初始化错误代码(只有在Done位为1时有效):0 = 无错误 1 = 校验选择非法 2 = 波特率选择非法 3 = 模式选择非法 LD Always_On : SM0.0 =. L60.0 LD. Always_On : SM0.0 =. L63.7 LD L60.0 CALL. MBUS_CTRL : SEB1, L63.7, 9600, 0, 1000, MBUS_CTRL_Done: M0.0 MBUS_CTRL_Error:MB1 Network 3 Modbus 主站初始化完成后,启动读写指令 LD MBUS_CTRL_Done : M0.0 EU S. Start_MBUS_MSG : M0.1, 1 Network 4 本例程中,完成如下对从站的访问功能 (1)访问从站地址为3 (2)访问不同的Modbus地址,分别以40001,40020为起始地址 (3)C0=1时,执行读操作 (4)C0=2时,执行写操作,同时,下一周期复位计数器 (5)利用MBUS_MSG指令的Done触发计数器C0,每次操作完成,计数器加1 LD MBUS_MSG_Done : M0.3 LD. C0 CTU. C0, 2 Network 5 当C0 = 1时,设置为读模式0,读取从站的起始地址,40001,十个字。存放在VB1000起始的10个字中 LDW C0, 1 EU MOVB 0, RW_Mode : VB801 AENO MIVD. 40001, Start_Addr : VB802 AENO MOVW. 10, Count : VW806 AENO MOVD. &VB1000, Pointer_Addr : VD808 Network. 6 当C0=2时,设置写模式1,将存放在VB1100起始的20个字,写入到从站地址为40020起始的20个字 LDW. C0, 2 EU MOVB. 1, RW_Mode : VB801 AENO MOVD. 40020, Start_Addr : VB802 AENO MOVW. 20, Count : VW806 AENO MOVD. &VB1100, Pointer_Addr ; VD808 Network. 7 读取从站保持寄存器的数据 EN: 使能:同一时刻只能有一个读写功能(即MBUS_MSG)使能 注意:建议每个读写功能(即MBUS_MSG)都用一个MBUS_MSG指令的Done完成位来激活 以便保证所有读写指令循环进行(见程序) First 读写请求位:每一个新的读写请求必须使用脉冲触发 Slave 从站地址:可选择的范围1-247 RW 读写操作:0=读,1=写 注意:1. 开关量输出和保持寄存器支持读和写功能 2. 开关量输入和模拟量输入只支持读功能 Addr 读写从站的数据地址:选择读写的数据类型:00001 至 0xxxx - 开关量输出 10001 至 1xxxx - 开关量输入 30001 至 3xxxx - 模拟量输入 40001 至 4xxxx - 保持寄存器 Count 通讯的数据个数(位或字的个数) 注意:Modbus从站可读/写的最大数量为120个字(是指每一个MBUS_MSG指令) DataPtr 数据指针:1. 如果是读指令,读回的数据放到这个数据区中 2. 如果是写指令,要写的数据放到这个数据区中 Done 读写功能完成位 Error 错误代码:只有在Done位为1时,错误代码才会有效 0 = 无错误 1 = 响应校验错误 2 = 未用 3 = 接收超时 4 = 请求参数错误(slave address,Modbus address, count,RW) 5 = Modbus/自由口没使用 6 = Modbus 正忙于其他请求 7 = 响应错误(响应不是请求的操作) 8 = 响应CRC校验和错误 101 = 从站不支持请求的功能 102 = 从站不支持数据地址 103 = 从站不支持此种数据类型 104 = 从站设备故障 105 = 从站接受了信息,但是响应被延迟 106 = 从站忙,拒绝了该信息 107 = 从站拒绝了信息 108 = 从站存储器奇偶错误 常见的错误及其错误代码: 1. 如果有多个MBUS_MSG指令同时使能会造成6号错误 2。 从站的delay参数设的时间过长会造成3号错误 3. 从站掉电或不运行,网络故障都会造成2号错误 LD. Always_On : SM0.0 = L60.0 LD. Start_MBUS_MSG : M0.1 O EU = L63.7 LD L60.7 CALL MBUS_MSG : SBR2, L63.7, 3, RW_Mode : VB801, Start_Addr : VD802, Count : VW806, Pointer_Addr : VD808 MBUS_MSG_Done : M0.3, MSG_error : MB2 Network 8 通讯请求执行完成,复位MBUS_MSG指令的触发位; 同时,启动延时定时器,其目的是使MBUS_MSGz指令的触发位复位后,在下一个周期被再一次触发(本例子的演示是10ms)。 LDN MBUS_MSG_Done : M0.3 R Start_MBUS_MSG : M0.1, 1 R Trigger : M0.2. 1 Network. 9 LD. MBUS_MSG_Done : M0.3 S Trigger : M0.2, 1 今天的程序就到这里了。 |
下一篇: S7-200 直接及间接寻址
caixf25:卓品智控
2018-10-07 21:59