抖音粉丝群1
『7x24小时有问必答』

一、任务描述

1.在同一个项目中,分别组态S7-1215C和S7-1217C PLC,其中S7-1215C作为客户端,S7-1217C作为服务器;

2.S7-1215C读取S7-1217C的40001~40008的数据并存储到MW100 ~ MW114;

3.S7-1215C将MW116 ~ MW130 的数据写入到S7-1217C的 40009~40016。

二、S7-1215C(客户端)组态与编程

1.启动TIA Portal(博图)软件,创建新项目,修改项目名称、存储位置等信息,单击创建,并进入到项目视图。

2.双击“项目树”下的“添加新设备”,在弹出的“添加新设备”对话框中找到S7-1215C的CPU,选中供货号后单击“确定”按钮,如下图所示。

1.jpeg

3.进入“设备视图”,双击CPU,打开属性对话框,在“常规”-“Profinet接口”-“以太网地址”中单击“添加新子网”,然后“IP协议”中修改IP地址为192.168.8.10,子网掩码为255.255.255.0,如下图所示。

2.jpeg

4.单击“系统常数”,查看“Local~PROFINET_接口_1”的硬件标识符,硬件标识符为64,如下图所示。

3.jpeg

5.双击“项目树”-“程序块”下的OB1,打开主程序工作区域,打开右侧“指令”选项卡,在“通信”-“其它”里面找到MB_CLIENT指令,并将该指令拖拽到OB1内,在弹出“调用选项”中选择“单个实例”,单击“确定”,完成指令的调用,如下图所示。

4.jpeg

MB_CLIENT指令的各个引脚含义如下:

(1)REQ:与服务器之间的通信请求,上升沿有效;

(2)DISCONNECT:通过该参数,可以控制与 Modbus TCP服务器建立和终止连接。0(默认):建立连接;1:断开连接;

(3)MB_MODE:选择 Modbus 请求模式(读取、写入或诊断)。0:读;1:写;

(4)MB_DATA_ADDR:由“MB_CLIENT”指令所访问数据的起始地址;

(5)MB_DATA_LEN:数据长度:数据访问的位或字的个数;

(6)MB_DATA_PTR:指向 Modbus 数据寄存器的指针;

(7)CONNECT:指向连接描述结构的指针。TCON_IP_v4(S7-1200)

(8)DONE:最后一个作业成功完成,立即将输出参数 DONE 置位为“1”;

(9)BUSY:作业状态位:0:无正在处理的“MB_CLIENT”作业;1:“MB_CLIENT”作业正在处理;

(10)ERROR:错误位:0:无错误;1:出现错误,错误原因查看STATUS;

(11)STATUS:指令的详细状态信息。

5.jpeg
6.打开“网络视图”,从右侧的“硬件目录”中找到“分布式I/O”-“ET200 SP”-“接口模块”-“PROFINET”-“IM 155-6 PN HF”,并将其拖拽到网络视图中,如下图所示。

6.jpeg

7.双击“IM 155-6 PN HF”,进入模块的设备视图,从右侧“目录”中找到“服务器模块”,双击其模块添加到机架上,如下图所示。

7.jpeg

注意:ET200 SP站点中,服务器模块是必须要组态的。

8.再从右侧的硬件目录中找到“通信模块”-“点到点”,双击其模块添加到机架上,如下图所示。

8.jpeg

9.在ET200SP"设备视图"中用鼠标双击CM PTP,在“属性”→“常规”→“接口”→“操作模式”中配置此模块硬件接口参数,如下图所示。

9.jpeg

10.接下来,在“属性”→“常规”→“接口”→“端口组态”中配置此模块端口组态参数,如下图所示。

10.jpeg

三、Modbus RTU主站编程

Modbus RTU主站编程需要调用Modbus_Comm_Load 指令和Modbus_Master 指令,其中Modbus_Comm_Load 指令通过 Modbus RTU 协议对通信模块进行组态,Modbus_Master 指令可通过由 Modbus_Comm_Load 指令组态的端口作为 Modbus 主站进行通信, Modbus_Comm_Load 指令的 MB_DB 参数必须连接到 Modbus_Master 指令的(静态)MB_DB 参数。

1.双击“项目树”下的添加新块,弹出添加新块对话框,在对话框中选择“DB数据块”,修改数据块的名称,单击“确定”按钮,如下图所示。

11.jpeg

2.Modbus_Master指令的“DATA_PTR”参数用于指向要进行数据写入或数据读取的数据区域地址,该数据区域支持优化访问的数据块或者非优化(标准的)数据块,建议采用非优化访问的数据块。

本例中使用的数据区为非优化访问的数据块,在数据块的属性中取消“优化的块访问”即可将数据块修改为非优化访问的数据块(鼠标右键数据块,选择“属性”,取消“优化的块访问”),如下图所示。

12.jpeg

3.在数据块中分别创建如下图所示的数据。

13.jpeg

4.双击“OB1”,打开程序编辑工作区,从右侧“指令”选项卡中找到“通信”-“通信处理器”-“MODBUS(RTU)”,将Modbus_Common_Load指令拖拽到OB1中,如下图所示。

14.jpeg

5.Modbus_Comm_Load指令背景数据块中的静态变量“MODE”用于描述PTP模块的工作模式,如下图所示,有效的工作模式包括:

(1)0 = 全双工 (RS232)

(2)1 = 全双工 (RS422) 四线制模式(点对点)

(3)2 = 全全双工 (RS 422) 四线制模式(多点主站,CM PtP (ET 200SP))

(4)3 = 全全双工 (RS 422) 四线制模式(多点从站,CM PtP (ET 200SP))

(5)4 = 半双工 (RS485) 二线制模式

15.jpeg

6.在S7-1200启动的第一个扫描周期,设置通信端口模式,将数值4传送到在“Modbus_Comm_Load.DB”MODE,将工作模式设置为半双工 RS485两线模式,如下图所示。

16.jpeg
三、S7-1217C(服务器)组态与编程

1.双击“项目树”下的“添加新设备”,在弹出的“添加新设备”对话框中找到S7-1217C的CPU,选中供货号后单击“确定”按钮,如下图所示。

17.jpeg

2.进入“设备视图”,双击CPU,打开属性对话框,在“常规”-“Profinet接口”-“以太网地址”中选择子网“PN/IE_1”,然后“IP协议”中修改IP地址为192.168.8.20,子网掩码为255.255.255.0,如下图所示。

18.jpeg

3.单击“系统常数”,查看“Local~PROFINET_接口_1”的硬件标识符,硬件标识符为64,如下图所示。

19.jpeg

4.双击“项目树”-“程序块”下的OB1,打开主程序工作区域,打开右侧“指令”选项卡,在“通信”-“其它”里面找到MB_SERVER指令,并将该指令拖拽到OB1内,在弹出“调用选项”中选择“单个实例”,单击“确定”,完成指令的调用,如下图所示。

20.jpeg

MB_CLIENT指令的各个引脚含义如下:

(1)DISCONNECT:为0代表被动建立与客户端的通信连接,为1代表终止连接;

(2)MB_HOLD_REG:指向Modbus保存寄存器的指针;

(3)CONNECT:指向连接描述结构的指针。TCON_IP_v4(S7-1200)

(4)NDR:为0代表无数据;为1代表从Modbus客户端写入新的数据;

(5)DR:为0代表无读取的数据;为1代表从Modbus客户端读取的数据;

(6)ERROR:错误位:0:无错误;1:出现错误,错误原因查看STATUS;

(7)STATUS:指令的详细状态信息。

5.双击“项目树”-“PLC_2”-“程序块”下的“添加新块”,弹出“添加新块”对话框,在对话框中选择“DB数据块”,并修改数据块的名称,如下图所示。

21.jpeg

6.单击“确定”,打开DB数据块,在“数据类型”里面选择“TCON_IP_V4”,并修改名称,如下图所示。

22.jpeg

各个引脚的含义如下:

(1)Interfaceld:硬件标识符;

(2)ID:连接ID,取值范围1~4095;

(3)Connection Type:连接类型,TCP连接默认为16#0B;

(4)ActiveEstablished:建立连接,主动为1(客户端),被动为0(服务器);

(5)ADDR:服务器侧的IP地址;

(6)RemotePort:远程端口号;

(7)LocalPort:本地端口号。

7.本案例的客户端的端口号为0,另外ADDR引脚对应的是服务器侧的IP地址,所以这里就不需再填写IP地址,所以服务器侧该数据结构的各项值如下图所示。

23.jpeg

8.配置MB_SERVER指令各参数,使能 Modbus TCP 服务器功能,本例中 MW 100 映射为 40001;MW102 映射为 40002;......MW296 映射为 40099;MW298 映射为 40100。如下图所示。

24.jpeg

9.由于M0.3对应的ERROR的状态只存储一个周期,所以为了读取 Modbus TCP 通信错误代码,编写如下功能。

25.jpeg

三、S7-1217C(服务器)组态与编程

1.双击“项目树”下的“添加新设备”,在弹出的“添加新设备”对话框中找到S7-1217C的CPU,选中供货号后单击“确定”按钮,如下图所示。

26.jpeg

2.进入“设备视图”,双击CPU,打开属性对话框,在“常规”-“Profinet接口”-“以太网地址”中选择子网“PN/IE_1”,然后“IP协议”中修改IP地址为192.168.8.20,子网掩码为255.255.255.0,如下图所示。

27.jpeg

3.单击“系统常数”,查看“Local~PROFINET_接口_1”的硬件标识符,硬件标识符为64,如下图所示。

28.jpeg

4.双击“项目树”-“程序块”下的OB1,打开主程序工作区域,打开右侧“指令”选项卡,在“通信”-“其它”里面找到MB_SERVER指令,并将该指令拖拽到OB1内,在弹出“调用选项”中选择“单个实例”,单击“确定”,完成指令的调用,如下图所示。

29.jpeg

MB_CLIENT指令的各个引脚含义如下:

(1)DISCONNECT:为0代表被动建立与客户端的通信连接,为1代表终止连接;

(2)MB_HOLD_REG:指向Modbus保存寄存器的指针;

(3)CONNECT:指向连接描述结构的指针。TCON_IP_v4(S7-1200)

(4)NDR:为0代表无数据;为1代表从Modbus客户端写入新的数据;

(5)DR:为0代表无读取的数据;为1代表从Modbus客户端读取的数据;

(6)ERROR:错误位:0:无错误;1:出现错误,错误原因查看STATUS;

(7)STATUS:指令的详细状态信息。

5.双击“项目树”-“PLC_2”-“程序块”下的“添加新块”,弹出“添加新块”对话框,在对话框中选择“DB数据块”,并修改数据块的名称,如下图所示。

30.jpeg

6.单击“确定”,打开DB数据块,在“数据类型”里面选择“TCON_IP_V4”,并修改名称,如下图所示。

31.jpeg

各个引脚的含义如下:

(1)Interfaceld:硬件标识符;

(2)ID:连接ID,取值范围1~4095;

(3)Connection Type:连接类型,TCP连接默认为16#0B;

(4)ActiveEstablished:建立连接,主动为1(客户端),被动为0(服务器);

(5)ADDR:服务器侧的IP地址;

(6)RemotePort:远程端口号;

(7)LocalPort:本地端口号。

7.本案例的客户端的端口号为0,另外ADDR引脚对应的是服务器侧的IP地址,所以这里就不需再填写IP地址,所以服务器侧该数据结构的各项值如下图所示。

32.jpeg

8.配置MB_SERVER指令各参数,使能 Modbus TCP 服务器功能,本例中 MW 100 映射为 40001;MW102 映射为 40002;......MW296 映射为 40099;MW298 映射为 40100。如下图所示。

33.jpeg

9.由于M0.3对应的ERROR的状态只存储一个周期,所以为了读取 Modbus TCP 通信错误代码,编写如下功能。

34.jpeg
10.第一步完成位或错误位作为条件转到第二步,使能MOVE指令,对步地址"Master.Step"赋值2,如下图所示。

35.jpeg

11."Master.Step"值=2时触发“Modbus_Master”指令,将存放于“DATA_PTR”指定的地址中的4个字数据写到Modbus RTU从站40003地址开始的保持寄存器,如下图所示。

36.jpeg

12.第二步完成位或错误位作为条件转到第三步,使能MOVE指令,对步地址"Master.Step"赋值3,如下图所示。

37.jpeg

13."Master.Step"值=3时触发“Modbus_Master”指令,将存放于“DATA_PTR”指定的地址中的8位数据写到Modbus RTU从站Q0.0-Q0.7,如下图所示。

38.jpeg

14."Master.Step"值=3,且第三步完成位或错误位作为条件回到第一步,使能MOVE指令,对步地址"Master.Step"赋值1,如下图所示。

39.jpeg

15.Modbus RTU主站的组态与编程已经完成,下一步进行Modbus RTU从站的组态与编程。

8.在S7-1200启动的第一个扫描周期,设置通信端口模式,将数值4传送到在“Modbus_Comm_Load.DB”MODE,将工作模式设置为半双工 RS485两线模式,如下图所示。

40.jpeg

9.在S7-1200启动的第一个扫描周期,将Modbus RTU通信的RS485端口参数初始化为波特率:9600,无校验,无流控,响应超时1000ms(Modbus RTU默认为数据位:8位,停止位:1位),MB_DB指向"Modbus_Slave"指令所使用的背景数据块引用,如下图所示。

41.jpeg

10.设置Modbus RTU从站地址 MB_ADDR=2,定义Modbus RTU 保持寄存器地址 MB_HOLD_REG,如下图所示。

42.jpeg

指令中各参数的含义如下:

(1)MB_ADDR:Modbus从站的地址;

(2)MB_HOLD_REG:数据指针,指向Modbus保存寄存器的地址,Modbus保存寄存器可以为M存储区或DB数据区;

(3)NDR:False代表无数据,True代表新数据已由Modbus主站写入;如果上一个请求完成并且没有错误,NDR位将变为True保持一个周期;

(4)DR:False代表无数据,True代表该指令已将Modbus主站接收到的数据存储在目标区域中;

(5)ERROR:如果上一个请求完成出错,则ERROR位将变为TRUE并保持一个周期,如果执行因错误而终止,则STATUS参数中的错误代码仅在ERROR=TRUE的周期内有效;

(6)STATUS:错误代码。

以上内容作者:工控小知

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

上一主题上一主题         下一主题下一主题
QQ手机版小黑屋粤ICP备17165530号

关于我们·投诉举报· 用户帮助· 联系我们 · 本站服务 · 版权声明· 隐私政策 · 投搞指南

法律保护:PLC技术网,plcjs.com,plcjs.net等字样
Copyright 2010-2030. All rights reserved. 


微信公众号二维码 抖音二维码 百家号二维码 今日头条二维码哔哩哔哩二维码