首页 上一页 1 2 下一页 尾页

(已结束)工控PLC擂台第22期--PLC MODBUS通讯 点击:5953 | 回复:23



云锋

    
  • 精华:1帖
  • 求助:5帖
  • 帖子:278帖 | 5541回
  • 年度积分:0
  • 历史总积分:30128
  • 注册:2005年6月24日
发表于:2011-01-28 14:49:16
楼主
实际工程中用过的PLC  MODBUS通信案例,需要把PLC型号、与PLC通信的设备、通信的各种参数及情况、通信实现的功能等说明清楚,贴出程序并加详细的程序说明。

PLC及与PLC通信的设备类型型号不限。

工控PLC擂台每周一期,本期节后结贴。奖项设置:一等奖1名:50MP,二等奖5名:10MP,三等奖10名:30积分。

MP介绍:gongkongMP即工控币,是中国工控网的用户积分与回馈系统的一个网络虚拟计价单位,类似于大家熟悉的QB,1个MP=1元人民币。

MP有什么用?兑换服务:以1个MP=1元来置换中国工控网的相关服务。 兑换现金:非积分获得的MP可兑换等值现金(满100MP后、用户可通过用户管理后台申请兑换)。


楼主最近还看过



陈石头

  • 精华:28帖
  • 求助:2帖
  • 帖子:300帖 | 9288回
  • 年度积分:0
  • 历史总积分:54987
  • 注册:2008年3月07日
发表于:2011-01-28 14:59:39
1楼

在两个S7-200 CPU 之间建立一个简单的 Modbus 主-从通讯
在S7-200控制系统应用中,Modbus RTU从站指令库只支持CPU上的通讯0口(Port0)。要实现Modbus RTU通
讯,需要Step7-Micro/WIN V4.0 SP6版本的编程软件,而且须安装Step7-Micro/WIN Instruction Library (如果没有可以到咱们工控网资料库花1MP下载,下载地址在文字下已做好链接)。Modbus RTU功能是通过指令库中预先编好的程序功能块实现的。
首先:安装Step7-Micro/WIN V4.0 SP6 Instruction Library(指令库)软件包,Micro/WIN的指令树中如下
所示。

二、分配库指令数据区。调用Step7-Mciro/WIN32 V3.2 Instruction Library(指令库)需要分配库指令数据区(Library Memory)。库指令数据区是相应库的子程序和中断程序所要用到的变量存储空间。如果在编程时不分配库指令数据区,编译时会产生许多相同的错误。选重目录树中的程序块,选择右键菜单里的库存储区,设置如下图示:
注意:调用库子程序MBUS_INIT参数HoldStart和MaxHold指定的保持寄存器区,是在S7-200 CPU的V数据存储区中分配,此数据区不能和库指令数据区有任何重叠,否则在运行时会产生错误,不能正常通讯(其中及可能造成Error的值为10(从属功能未启用))。注意Modbus 中的保持寄存器区按“字”寻址,即MaxHold规定的是VW而不是VB的个数。
三、编程
编程主要是调用库子程序MBUS_INIT、MBUS_SLAVE,本例中使用SM0.1调用子程序MBUS_INIT进行初始化,使用SM0.0调用MBUS_SLAVE,并指定相应参数。
1、MBUS_INIT指令(初始化从站)
MBUS_INIT指令使能和初始化或禁止Modbus通讯,MBUS_INIT指令必须无错误的执行,才能够使MBUS_SLAVE指令。
1、MBUS_SLAVE指令
MBUS_SLAVE指令用于服务Modbus主站的请求,必须在每个循环周期都执行,以便检查和响应Modbus请求。

哈哈神

  • 精华:0帖
  • 求助:1帖
  • 帖子:6帖 | 255回
  • 年度积分:0
  • 历史总积分:1075
  • 注册:2010年10月10日
发表于:2011-01-28 15:37:54
2楼
板凳,期待高手来临指导!

ye_w

  • 精华:21帖
  • 求助:1帖
  • 帖子:69帖 | 5217回
  • 年度积分:0
  • 历史总积分:46739
  • 注册:2002年4月17日
发表于:2011-01-30 13:10:52
3楼

PLC Modbus的通讯都比较简单。

1、如果是走串口的话,尤其是PLC作为从站的时候,通常只需要串口初始化;

2、如果是走以太网的话,也只需要设置后IP地址就可以通讯。

 

如果作为主站,不仅仅需要对串口初始化,还需要使用modbus专用指令;如果是以太网,可谓客户机的访问,同样需要modbus指令。

 

至于西门子S7-200稍微有点不同,是使用自由口指令来制作的modbus库指令来实现modbus的通讯,陈石头已经描叙的很清楚。只是提醒的是,库指令或者库向导占有不少V区地址,在使用的时候需避免地址重复,造成冲突。

 

其实modbus通讯与通用的串口或以太网通讯在应用上没有本质区别。使用的硬件也无特殊性,不像很多总线需要特殊或专用的适配器或者通讯模块。

 

 

modbus不管是使用串口还是以太网,调试过程都是很关键的,虽然modbus指令有故障提示,但有可能不好理解。所以借助于调试工具就很有必要啦。modbus调试软件常用的有ModScan32,其使用说明可以鄙人写的小豆腐文章。当然需要下载软件本身就请大家百度谷歌吧。

 

 

 

勇者

  • 精华:0帖
  • 求助:0帖
  • 帖子:16帖 | 2756回
  • 年度积分:442
  • 历史总积分:30819
  • 注册:2007年7月13日
发表于:2011-01-31 12:28:00
4楼
在一个S7-200 CPU 和支持RS485通讯的控制器之间建立一个简单的 Modbus 主-从通讯。
在S7-200中,Modbus RTU从站指令库只支持CPU上的通讯0口(Port0)。

林 森

  • 精华:16帖
  • 求助:0帖
  • 帖子:678帖 | 8694回
  • 年度积分:0
  • 历史总积分:57901
  • 注册:2010年6月30日
发表于:2011-02-05 20:23:43
5楼

这里就以西门子S7-1200 与S7-200Modbus通讯为例介绍

1.控制系统原理

 
2、本例中使用的PLC硬件为:

1)PM1207电源 ( 6EP1 332-1SH71 )
2) S7-1214C ( 6ES7 214 -1BE30 -0XB0 )
3) CM1241 RS485 ( 6ES7 241 -1CH30 -0XB0 )
4)CPU224XP (6ES7 214-2AD23-0XB0)
3.软件需求


4.组态

我们通过下述的实际操作来介绍如何在Step7 Basic V10.5 中组态S7-1214C 和S7-200的Modbus通信。
4.1 S7-1200作Modbus主站,S7-200作Modbus从站

S7-1200作为Modbus主站的配置步骤如下:
点击桌面上的“Totally Integrated Automation Portal V10”图标,打开如下图:
                                                               新建S7 -1200项目
首先需要选择“Create new project”选项,然后在“Project name:”里输入Modbus_Master;在“Path:”修改项目的存储路径为“C:\”;点击“Create”,这样就创建了一个文件Modbus的新项目。创建后的窗口如下图所示:
                                                                                新建项目后
点击门户视图左下角的“Project View”切换到项目视图下,如下图:
                                                           切换到项目视图
打开后,在“Devices”标签下,点击“Add new device”,在弹出的菜单中输入设备名“PLC_1”并在设备列表里选择CPU的类型。选择后如下图:
插入CPU后,点击CPU左边的空槽,在右边的“Catalog ”里找到“Communication”下的RS485模块,拖拽或双击此模块,这样就把串口模块插入到硬件配置里,接下来就需要配置此RS485模块硬件接口参数,选择RS485模块,在其下方会出现该模块的硬件属性配置窗口, 在属性窗口里有下面五个选项, “general”; “Port Configuration”;“Transmit message Configuration”;“Receive Message Configuration”;“IO Address/HW identify”。在“General”里包括了此模块的“项目信息”;而在“Port Configuration”里可以对端口的进行参数配置,
波特率为:9600 ;
校验方式:无;
数据位为:8 ;
停止位: 1;
硬件流控制:无;
等待时间: 1ms
设置参数如下图:
                                                                 RS485端口配置
在“Transmit message Configuration”和“Receive Message Configuration”里保持默认设置,在“IO Address/HW identify”里确认一下“硬件识别号”为11。
此时,完成了硬件的组态,接下来需要编写Modbus通讯程序。
在PLC中编写发送程序。在项目管理视图下双击“Device”—》“Program block”—》“Add new block”在弹出的窗口中选择“Organizations Block(OB)”,然后在其右边的窗口里选择“Startup”,去除“Symbolic Access Only”的选项勾。如下图所示:
                                                                                           添加启动OB块
点击“OK”后会打开此OB块,然后在启动OB块里用MB_COMM_LOAD(注:MB_COMM_LOAD和MB_MASTER功能块是在“Project Library”下的“Library”选项卡里,如下图所示:)
                                                                            Library
调用后如下图所示:
                                                                   调用MB_COMM_LOAD块
在调用MB_COMM_LOAD功能块时,都会自动弹出创建相应背景数据块的界面,如下图:
                                                                       创建背景数据块
按上面的步骤在OB1中插入MB_MASTER功能块如下图:
                                                      调用MB_MASTER块
在插入功能块的过程,相应的生成MB_COMM_LOAD_DB和MB_MASTER_DB,两个背景数据块。然后再创建一个发送或接收的数据缓冲区,点击PLC_1项目下的“Program Block”下的“Add new block”,在弹出的窗口中选择DB类型为“Global DB”,并去掉“Symbolic access only”选项勾(这样可以对该DB块进行直接地址访问),并取名该DB块为MB_COMM_DB。建好这个DB块后,双击打开MB_COMM_DB预先定义数据区的大小,如下图所示:
                                                                                              数据区的定义
完成数据区的定义后,接下来就可以对MB_COMM_LOAD功能块和MB_Master功能块进行参数赋值,赋值的参数见前面。在上面的编程块里需要注意的是,在MB_MASTER功能块中的参数MB_ADDR参数是从站的Modbus的站地址。这里要读取的从站的站地址为2;关于MODE、DATA_ADDR、DATA_LEN可在下表中查看,DATA_PTR存放发送或接收到的数据。
                                                               MB.masterModbus功能表
上面就完成了程序的编写,对项目进行编译;右击PLC_1项目在弹出的菜单里选择“Complies ALL”选项,这样就对硬件与软件进行编译,如下图:
                                                                   编译项目
编译且没有错误后就可以下载程序到PLC中,同样右击PLC_1项目,在弹出的菜单选择“Download to Device”。
S7-200作为Modbus从站的配置步骤如下:
点击桌面上的“V4.0 STEP 7 MicroWIN SP6”图标(因为STEP 7 MicroWIN安装时并没有安装Modbus的库程序,所以Modbus的库程序是需要单独安装的,安装后才可以在库程序中调用Modbus的通讯功能块,关于库程序可以咨询西门子热线或访问西门子的官方网站),打开后并编写Modbus从站程序如下图:
在上面调用的是端口0的程序,所以在连接通讯线时,需要连接到端口0上,编译并下载项目到S7-200的PLC中。下载后运行PLC。
用DP电缆连接S7-1200与S7-200。
在线监控S7-200中的程序,并监控变量表,修改VB1000到VB1011的值为1到12(VB1000到VB1011对应的Modbus的地址为40001-40006)。监控到的值如下图所示:
                                                                                S7-200监控变量值
在线监控 S7-1200变量表如下图
                                                                         S7-1200监控变量值
1) 编程软件Step7 Basic V10.5 ( 6ES7 822-0AA0-0YA0)
2)编程软件 STEP 7 MicroWIN; Modbus库软件选项包

林 森

  • 精华:16帖
  • 求助:0帖
  • 帖子:678帖 | 8694回
  • 年度积分:0
  • 历史总积分:57901
  • 注册:2010年6月30日
发表于:2011-02-05 20:38:51
6楼

需要的软件:

1) 编程软件Step7 Basic V10.5 ( 6ES7 822-0AA0-0YA0)
2)编程软件 STEP 7 MicroWIN; Modbus库软件选项包

 

S7-200作Modbus主站,S7-1200作Modbus从站部分明天发上来!

林 森

  • 精华:16帖
  • 求助:0帖
  • 帖子:678帖 | 8694回
  • 年度积分:0
  • 历史总积分:57901
  • 注册:2010年6月30日
发表于:2011-02-06 21:05:01
7楼

下面给出S7-200作Modbus主站,S7-1200作Modbus从站通信部分

 

 

S7-1200作为Modbus从站的配置步骤如下:
点击桌面上的“Totally Integrated Automation Portal V10”图标,打开如下图:


                                                                   S7-1200监控变量值

林 森

  • 精华:16帖
  • 求助:0帖
  • 帖子:678帖 | 8694回
  • 年度积分:0
  • 历史总积分:57901
  • 注册:2010年6月30日
发表于:2011-02-06 21:14:27
8楼
                                 

林 森

  • 精华:16帖
  • 求助:0帖
  • 帖子:678帖 | 8694回
  • 年度积分:0
  • 历史总积分:57901
  • 注册:2010年6月30日
发表于:2011-02-06 21:25:36
9楼

首先需要选择“Create new project”选项,然后在“Project name:”里输入Modbus_Slave在“Path:”修改项目的存储路径为“C:\Backup file”;点击“Create”,这样就创建了一个文件Modbus_Slave的新项目。创建后的窗口如下图所示: 


 新建项目后

林 森

  • 精华:16帖
  • 求助:0帖
  • 帖子:678帖 | 8694回
  • 年度积分:0
  • 历史总积分:57901
  • 注册:2010年6月30日
发表于:2011-02-06 21:26:36
10楼
                                       

林 森

  • 精华:16帖
  • 求助:0帖
  • 帖子:678帖 | 8694回
  • 年度积分:0
  • 历史总积分:57901
  • 注册:2010年6月30日
发表于:2011-02-06 21:28:35
11楼

点击门户视图左下角的“Project View”切换到项目视图下,如下图:   


                                                                     切换到项目视图

开后,在“Devices”标签下,点击“Add new device”,在弹出的菜单中输入设备名“PLC_1”并在设备列表里选择CPU的类型。选择后如下图:


                                                PLC硬件组态

林 森

  • 精华:16帖
  • 求助:0帖
  • 帖子:678帖 | 8694回
  • 年度积分:0
  • 历史总积分:57901
  • 注册:2010年6月30日
发表于:2011-02-06 21:31:38
12楼

插入CPU后,点击CPU左边的空槽,在右边的“Catalog ”里找到“Communication”下的RS485模块,拖拽或双击此模块,这样就把串口模块插入到硬件配置里,接下来就需要配置此RS485模块硬件接口参数,选择RS485模块,在其下方会出现该模块的硬件属性配置窗口, 在属性窗口里有下面五个选项, “general”; “Port Configuration”;“Transmit message Configuration”;“Receive Message Configuration”;“IO Address/HW identify”。在“General”里包括了此模块的“项目信息”;而在“Port Configuration”里可以对端口的进行参数配置,
波特率为:9600 ;
校验方式:无;
数据位为:8 ;
停止位: 1;
硬件流控制:无;
等待时间: 1ms
设置参数如下图: 


                                                                                 RS485端口配置
在“Transmit message Configuration”和“Receive Message Configuration”里保持默认设置,在“IO Address/HW identify”里确认一下“硬件识别号”为11。
此时,完成了硬件的组态,接下来需要编写Modbus通讯程序。
在PLC中编写发送程序。在项目管理视图下双击“Device”—》“Program block”—》“Add new block”在弹出的窗口中选择“Organizations Block(OB)”,然后在其右边的窗口里选择“Startup”,去除“Symbolic Access Only”的选项勾。如下图所示: 



                                                                             添加启动OB块
点击“OK”后会打开此OB块,然后在启动OB块里用MB_COMM_LOAD(注:MB_COMM_LOAD和MB_Slave功能块是在“Project Library”下的“Library”选项卡里,如下图所示:) 


                                                                                      Library
调用后如下图所示: 


                                                             调用MB_COMM_LOAD块

在调用MB_COMM_LOAD功能块时,都会自动弹出创建相应背景数据块的界面,如下图:


                                                                 创建背景数据块
按上面的步骤在OB1中插入MB_Slave功能块如下图:


                                                              调用MB_Slave块

林 森

  • 精华:16帖
  • 求助:0帖
  • 帖子:678帖 | 8694回
  • 年度积分:0
  • 历史总积分:57901
  • 注册:2010年6月30日
发表于:2011-02-06 21:36:11
13楼

在插入功能块的过程,相应的生成MB_COMM_LOAD_DB和MB_Slave_DB,两个背景数据块。然后再创建一个发送或接收的数据缓冲区,点击PLC_1项目下的“Program Block”下的“Add new block”,在弹出的窗口中选择DB类型为“Global DB”,并去掉“Symbolic access only”选项勾(这样可以对该DB块进行直接地址访问),并取名该DB块为MB_COMM_DB。建好这个DB块后,双击打开MB_COMM_DB预先定义数据区的大小,如下图所示:


                                                                             数据区的定义
完成数据区的定义后,接下来就可以对MB_COMM_LOAD功能块和MB_SLAVE功能块进行参数赋值,赋值的参数见图24和图26。在上面的编程块里需要注意的是,在MB_SLAVE功能块中的参数MB_ADDR参数是此从站的Modbus站地址。这里定义为此从站的站地址为2;MB_HOLD_REG是指向Modbus保持寄存器DB的指针。保持寄存器DB必须为典型的全局DB。MB_SLAVE所提供给主站的功能见下表:


                                         MB_SLAVE Modbus功能表A


                                          MB_SLAVE Modbus功能表B
上面就完成了程序的编写,对项目进行编译;右击PLC_1项目在弹出的菜单里选择“Complies ALL”选项,这样就对硬件与软件进行编译,如下图:


                                                          编译项目
编译且没有错误后就可以下载程序到PLC中,同样右击PLC_1项目,在弹出的菜单选择“Download to Device”。

 


S7-200作为Modbus主站的配置步骤如下:



                                                                  S7-200 Modbus主站编程
在上面调用的是端口0的程序,所以在连接通讯线时,需要连接到端口0上,编译并下载项目到S7-200的PLC中。下载后运行PLC。


用DP电缆连接S7-1200与S7-200。


在线监控S7-1200中的程序,并监控变量表,修改DB3.DBB0到DB3.DBB20的值为1到21(DB3.DBB0到DB3.DBB19对应的Modbus的地址为40001-40010)。监控到的值如下图所示:

 


                                   S7-1200监控变量值
在线监控 S7-200变量表如下图:

 
S7-1200监控变量值
从上面的变量监控表里可以看到VB420中没有数据,因为在主站的S7-200里的程序里只读取10个变量(即40001-40010)对应着的VB400-VB419,所以VB420的数据没有接收。

点击桌面上的“V4.0 STEP 7 MicroWIN SP6”图标(因为STEP 7 MicroWIN安装时并没有安装Modbus的库程序,所以Modbus的库程序是需要单独安装的,安装后才可以在库程序中调用Modbus的通讯功能块,关于库程序可以咨询西门子热线或访问西门子的官方网站),打开后并编写Modbus主站程序如下图:

玻璃的心

  • 精华:30帖
  • 求助:2帖
  • 帖子:962帖 | 5801回
  • 年度积分:0
  • 历史总积分:61250
  • 注册:2010年6月11日
发表于:2011-02-06 21:47:32
14楼

 

我也举一个S7-200 Modbus 通信的例子

 

将一台 S7-200 CPU224XP 组态为 Modbus 主站,当主站 I0.3 为 ON时,读取另一台作为 Modbus 从站的 S7-200 CPU224XP 的 I0.0~I0.7 的数值。

硬件需求:

PC 机、2台 S7-200 CPU 224XP、RS 232 电缆(推荐采用西门子 S7-200 串口编程电缆)

示例的简要实现步骤如下:

(1)编写作为 Modbus 从站的 S7-200 CPU 的 PLC 程序,将程序下载到从站 PLC 中。

(2)编写作为 Modbus 主站的 S7-200 CPU 的 PLC 程序,将程序下载到主站PLC中。

(3)用串口电缆连接 Modbus 主从站,在Step-7 Micro/Win 的状态表中观察 Modbus 主站保持寄存器中的数值,并与实际数值对比。

玻璃的心

  • 精华:30帖
  • 求助:2帖
  • 帖子:962帖 | 5801回
  • 年度积分:0
  • 历史总积分:61250
  • 注册:2010年6月11日
发表于:2011-02-06 21:48:56
15楼
分配库存储区

利用指令库编程前首先应为其分配存储区,否则 Step7-Micro/Win 编译时会报错。具体方法如下:

(1)执行 Step7-Micro/Win 菜单命令“文件”>“库存储区”,打开“库存储区分配”对话框。
(2)在“库存储区分配”对话框中输入库存储区的起始地址,注意避免该地址和程序中已经采用或准备采用的其它地址重合。

(3)点击“建议地址”按钮,系统将自动计算存储区的截止地址。

(4)点击“确定”按钮确认分配,关闭对话框。

玻璃的心

  • 精华:30帖
  • 求助:2帖
  • 帖子:962帖 | 5801回
  • 年度积分:0
  • 历史总积分:61250
  • 注册:2010年6月11日
发表于:2011-02-06 21:50:40
16楼
2 从站组态说明

根据示例要求,本从站要响应主站报文,故只需编写主程序。主程序由以下两个网络构成,程序说明如下。

(1)网络1用于初始化 Modbus 从站,即是将从站地址设为1,将端口0的波特率设为9600、无校验、无延迟,允许存取所有的I、Q 和 AI 数值,保存寄存器的存储空间为从 VB0 开始的1000个字(2000个字节)。

 

(2)网络2用于在每次扫描时执行Modbus_Slave指令。

玻璃的心

  • 精华:30帖
  • 求助:2帖
  • 帖子:962帖 | 5801回
  • 年度积分:0
  • 历史总积分:61250
  • 注册:2010年6月11日
发表于:2011-02-06 21:52:14
17楼

调用 Modbus 主站指令编程前也应分配库存储区,与从站编程类似,不再赘述。

Modbus主站指令也只需编写主程序,主程序也由两个网络构成。

(1) 网络1用于每次扫描时调用 MBUS_CTRL 指令来初始化和监视Modbus 主站设备。Modbus 主设备设置为9600波特,无奇偶校验,允许从站1000毫秒(1秒)的应答时间。

2)网络2实现在 I0.3 正跳变时执行 MBUS_MSG 指令读取从站2的地址 10001~10008 的数值。保持寄存器存储区从 VB200 开始,长8个字。根据 Modbus 从站寻址规约,10001~10008 即 S7-200 PLC 中I0.1~I0.7的 Modbus 地址值。

玻璃的心

  • 精华:30帖
  • 求助:2帖
  • 帖子:962帖 | 5801回
  • 年度积分:0
  • 历史总积分:61250
  • 注册:2010年6月11日
发表于:2011-02-06 21:53:10
18楼
通信测试的步骤如下:

(1)用串口电缆连接主从站 PLC 的端口0。

(2)将主从站 PLC 设置为 Run 状态。

(3)设置从站 I0.0~I0.7。

(4)将主站的 I0.3 设为ON,利用 Step7-Micro/Win 状态表监测主站保持寄存器的数值。






从图中可以看出VB200存储的即是 I0.0~I0.7 的数值,此时均为 ON 状态,与这些输入点的实际状态一致。

玻璃的心

  • 精华:30帖
  • 求助:2帖
  • 帖子:962帖 | 5801回
  • 年度积分:0
  • 历史总积分:61250
  • 注册:2010年6月11日
发表于:2011-02-06 21:53:18
19楼
补充说明:

(1)如果 Modbus RTU 通信失败,可分别从主从站的报文入手。

(2)测试 Modbus 从站通信是否正常,可利用计算机上的串口通信调试软件向从站发送请求帧,查看是否能接受到正确的响应帧。

(3)测试 Modbus 主站通信是否正常,可由主站向计算机串口发送请求帧,在计算机上用串口通信调试软件查看请求帧是否正常。

woyaokong

  • 精华:0帖
  • 求助:0帖
  • 帖子:0帖 | 61回
  • 年度积分:0
  • 历史总积分:610
  • 注册:2010年5月26日
发表于:2011-02-08 12:29:48
20楼
过年人气部旺啊哈哈                 

热门招聘
相关主题

官方公众号

智造工程师
    首页 上一页 1 2 下一页 尾页