通过WRREC指令修改CM1242-5的DP地址

S7-1200 增加 CM1242-5 通信模块后可以做 PROFIBUS DP 从站。一般情况下,可以通过TIA Portal 组态该模块的地址,当在软件中修改组态PROFIBUS地址后,需要下载硬件配置或者完整下载整个项目,修改的地址才可以生效。

对于一些特殊应用场景,PROFIBUS DP从站的站地址无法预先设置成固定的地址值,需要在适当的时候根据需要,在不重新下载硬件配置/项目的情况下,通过程序修改DP地址。为此,本文介绍通过编程调用 WRREC 指令修改 CM1242-5 的 PROFIBUS 地址。

注意

CM1242-5模块固件版本在V1.0.5及更高,支持数据记录 0x2001(8193),当使用WRREC指令写入数据记录之后,从站会以该地址重启。8193数据记录结构如表1.所示

表1.8193数据记录结构

数据记录

结构

字节1 字节2 字节3 字节4
版本(高字节) 版本(低字节)

Opcode

=0 不更改;=1 更改

来自Opcod的数据

新地址

分配示例 01h 00h 01h 03h
实现功能 版本为V1.0 需要更改DP地址 新地址为3

实验思路

CPU1215+CM1243-5模块作为PROFIBUS DP主站,站名称为“DP_Master”,CPU1214+CM1242-5作为PROFIBUS DP从站,站名称为“DP_Slave”,双方进行PROFIBUS DP主从通信。

在DP_Slave站点中,在CM1242-5模块属性中设置的从站地址为30。为了更直观的验证通过程序修改地址生效,在博途中导入CM1242-5的GSD文件,在DP_Master站点中,在CM1243-5主站模块下方组态2个CM1242-5(GSD)。一个从站地址配置为3,名称修改为Address_3;另外一个从站地址配置为5,名称修改为Address_5。在DP_Slave站点中编程,通过调用WRREC指令分别修改CM1242-5模块的从站地址为3和5,在网络视图中在线监控主站模块是否与相应的从站模块通信成功。网络配置概况如图1.所示。

图1.网络配置概况

硬件和软件需求

所需硬件及角色分配如表2.所示:

表2.硬件与版本

角色 PROFIBUS DP主站 PROFIBUS DP从站
硬件 6ES7 215-1AG40-0XB0 6GK7 243-5DX30-0XE0 6ES7 214-1AG40-0XB0 6GK7 242-5DX30-0XE0
固件 V4.4 V1.3 V4.4 V1.0.6

软件STEP 7 Professional V16

CM1242-5 模块组态

1. 打开博途软件,创建一个新项目,添加新设备中,添加 CPU1214(6ES7 214-1AG40-0XB0) 模块,固件版本为V4.4。

2. 在CPU1214的设备视图中添加CM1242-5模块,设置从站地址为30,如图2.所示。

图2.添加CM1242-5并设置DP地址

3. 设置CM1242-5的操作模式和传输区域,如图3.所示。

图3.设置操作模式和传输区域

CPU1215+CM1243-5组态

1.与CPU1214同一个项目中,添加CPU1215(6ES7 215-1AG40-0XB0),固件版本为V4.4,同时添加CM1243-5模块。

2.设置CM1243-5模块的DP地址,如图4所示。

图4.CM1243-5模块的地址

3.添加CM1242-5的GSD文件

CM1242-5 GSD文件下载链接及添加GSD文件的方法,请点击:添加和删除GSD文件

CM1242-5的固件版本如果低于V1.0.5,需要对CM1242-5进行固件更新,CM1242-5固件下载及更新方法,请点击:CM1242-5固件下载 固件更新方法

4.从硬件目录中将添加好的CM1242-5的GSD文件拖拽至网络视图中组态,分配PROFIBUS DP主站给CM1242-5,同时修改从站名称为Address_3,如图5.所示。

图5.分配主站及修改站名称

5.设置从站地址及传输区,如图6.所示。

注意:传输区的组态与CM1242-5模块中组态(参见图3.)的传输区相对应(图3.中为输出,1个字节;此处需要组态为输入,1个字节)。

图6.对GSD文件组态从站地址及传输区

6.从硬件目录中添加第二个CM1242-5(GSD)组态,从站地址设置为5,站名称设置为Address_5,添加传输区也是1 Byte Input,操作步骤同重复上述4-6。

CPU1214+CM1242-5 编程

1.在CPU1214+CM1242-5(站点名称为DP_Slave)中添加全局DB数据块并定义变量,如图7.所示。

将数据块中RECORD的数组的起始值设置为16#01,16#00,16#01,16#03,此4个字节的含义参见表1.所示。

图7.添加数据块定义变量

2.在OB1中调用WRREC指令,指令填写如图8.所示。

注意:WRREC指令是异步通信,REQ指令建议使用上升沿触发。如果使用电平信号触发,会不断的向模块写数据记录。如果短时间内多次写入数据记录,则会使用最后写入的地址。

图8.调用WRREC指令

3.捕捉指令完成位及错误代码,如图9.所示。

图9.捕捉错误位和完成位

4.添加监控图表,在其中添加2个变量,分别为"Change_Address_DB".DATA.New_Address 和 "Change_Address_DB".DATA.REQ。将"Change_Address_DB".DATA.New_Address 修改从站地址为3,然后将"Change_Address_DB".DATA.REQ修改为1,触发WRREC指令。如图10所示。

图10.修改从站地址为3触发WRREC指令

5.切换至网络视图,观察到CPU1215和站地址为3的GSD文件组态的站点通信成功。如图11.所示。

注意:由于CPU1215下方挂了2个CM1242-5 GSD文件,但是实际只有一个CM1242-5模块,所以同一时刻,只有一个从站通信成功,CPU1215有报错现象属于正常现象。

图11.修改地址后观察结果1

6.将"Change_Address_DB".DATA.New_Address 修改从站地址为5,然后将"Change_Address_DB".DATA.REQ修改为1,触发WRREC指令,如图12.所示。

图12.修改从站地址为5触发WRREC指令

7.网络视图中,观察到CPU1215和站地址为5的GSD文件组态的站点通信成功。如图13.所示。

图13.修改地址后观察结果2

注意:

使用这种方法后,CPU断电重启会恢复组态地址(30),所以如果想要保持性存储DP 从站地址,应将其保存在 CPU 的设置有保持性的 DB块中(参见图7.数据块中的变量设置有保持性,断电从新上电后数据保持断电之前的值不变)

在 OB100 中编程调用WRREC指令,将REQ直接填写为TRUE,将数据记录写入 CM1242-5模块中。如图14.所示。

注意:因为WRREC指令是异步指令,需要执行多个周期,而OB100只能执行一次,所以在程序中加入跳转指令,即当指令仍在执行时则不跳出OB100继续执行WRREC。

图14.OB100中触发WRREC指令