如何使用Modbus协议实现PLC与仪表间的可靠通信 (如何使用mod)

如何使用Modbus协议实现PLC与仪表间的可靠通信 如何使用Modbus协议实现PLC与仪表间的可靠通信

一、引言

随着工业自动化水平的不断提高,PLC(可编程逻辑控制器)与各类仪表之间的通信变得越来越重要。
为确保数据准确、快速地传输,Modbus协议成为了广泛应用的通信标准之一。
本文将详细介绍如何使用Modbus协议实现PLC与仪表间的可靠通信。

二、Modbus协议概述

Modbus是一种串行通信协议,广泛应用于工业自动化系统中。
它采用主从模式,即一个主设备(如PLC)与多个从设备(如仪表)进行通信。
Modbus协议支持多种物理接口,如RS232、RS485等,且通信速率较高,能够满足大部分工业自动化应用的需求。

三、PLC与仪表间的Modbus通信原理

1. 设备连接:需要将PLC和仪表通过适当的物理接口连接起来。连接方式可以是电缆、光纤或无线传输等。
2. 设备配置:确保PLC和仪表的Modbus参数设置正确,包括通信速率、数据位、停止位、奇偶校验等。
3. 建立连接:PLC作为主设备,发起连接请求,与仪表建立通信连接。仪表作为从设备,接收来自PLC的请求并响应。
4. 数据传输:PLC向仪表发送读写请求,仪表根据请求返回相应数据或执行操作。数据格式遵循Modbus协议规定。
5. 错误处理:在通信过程中,如出现错误,PLC和仪表会进行错误识别和处理,确保数据正确传输。

四、使用Modbus协议实现可靠通信的步骤

1. 需求分析:明确通信需求,包括通信距离、传输速率、数据格式等。
2. 设备选型:根据需求选择合适的PLC和仪表,并确保它们支持Modbus协议。
3. 硬件连接:根据设备接口类型,使用适当的线缆将PLC和仪表连接起来。
4. 配置参数:根据设备手册,设置PLC和仪表的Modbus参数,确保通信参数一致。
5. 编程实现:在PLC中编写Modbus通信程序,实现与仪表的数据交换。
6. 调试测试:在实际环境中进行调试测试,检查通信是否正常,数据是否准确。
7. 维护与优化:定期维护通信系统,解决可能出现的问题,并根据实际需求对系统进行优化。

五、Modbus协议在PLC与仪表通信中的应用实例

以工业自动化领域的温度控制系统为例,PLC需要实时获取温度仪表的数据,并根据设定值控制加热设备。
通过Modbus协议,PLC可以轻松地与温度仪表进行通信,实现数据的实时交换和控制。
具体实现过程如下:

1. PLC通过Modbus协议向温度仪表发送读取请求。
2. 温度仪表接收到请求后,将实时温度数据通过Modbus协议发送给PLC。
3. PLC接收温度数据,并与设定值进行比较。
4. 根据比较结果,PLC通过Modbus协议向加热设备发送控制指令。
5. 加热设备根据指令执行相应操作,如加热或停止加热。

六、注意事项

1. 确保PLC和仪表的Modbus参数设置正确,以免影响通信质量。
2. 在选择线缆时,需考虑传输距离、环境等因素,以确保信号传输稳定。
3. 定期对通信系统进行检查和维护,及时解决可能出现的问题。
4. 在编写Modbus通信程序时,需注意数据的格式和编码方式,以确保数据正确传输。

七、结语

通过使用Modbus协议,PLC与仪表之间的可靠通信得以实现。
在实际应用中,我们应根据具体需求选择合适的设备和连接方式,正确配置参数,编写通信程序,并进行调试测试和维护。
希望本文能为读者在工业自动化领域中的PLC与仪表通信提供有益的参考。


一文看懂Modbus协议

自从 1979 年出现工业串行链路的事实标准以来,Modbus使成千上万的自动化设备能够通信。 Modbus是OSI模型第 7 层上的应用层报文传输协议,它在连接至不同类型总线或网络的设备之间提供客户机/服务器通信。 Modbus应用层协议和服务规范主要包含两类:一类是串行链路上的Modbus(Modbus 串行链路取决于TIA/EIA 标准:232-F 和 485-A),另一类是TCP/IP 上的Modbus(ModbusTCP/IP 取决于IETF 标准:RFC793 和 RFC791 有关)。 Modbus通信栈示意图如下所示: Modbus协议允许在各种网络体系结构内进行简单通信,每种设备(PLC、HMI、控制面板、驱动程序、动作控制、输入/输出设备)都能使用 Modbus协议来启动远程操作。 在基于串行链路和以太 TCP/IP 网络的 Modbus上可以进行相同通信,一些网关允许在几种使用 Modbus协议的总线或网络之间进行通信。 Modbus网络体系结构的实例如下所示: Modbus协议本质上和我们平时自定义的协议一致,就是一种数据传输格式,也是由起始帧、数据帧、校验帧等组成,只不过Modbus协议更为规范。 Modbus协议定义了一个与基础通信层无关的简单协议数据单元(PDU)。 特定总线或网络上 的 Modbus协议映射能够在应用数据单元(ADU)上引入一些附加域,通用Modbus帧协议如下图所示: 具体解析如下: 地址域:子节点的地址信息; 功能码:指明服务器要执行的动作,有效的码字范围是十进制 1-255(128-255 为异常响应保留),当从客户机向服务器设备发送报文时,功能码域通知服务器执行哪种操作(功能码内容较多,建议查阅Modbus协议说明手册,上面介绍的很清晰)。 数据:传输的数据内容,在某种请求中,数据可以是不存在的(0 长度),在此情况下服务器不需要任何附加信息,功 能码仅说明操作。 差错校验:验证收、发的数据是否正确。 如果在一个正确接收的 ModbusADU 中,不出现与请求Modbus功能有关的差错,那么服务器至客户机的响应数据域包括请求数据。 如果出现与请求 Modbus功能有关的差错,那么域包括一个异常码,服务器应用能够使用这个域确定下一个执行的操作。 Modbus事务处理的状态图如下所示: 一旦服务器处理请求,使用合适的 Modbus服务器事务建立 Modbus响应,根据处理结果,可以建立两种类型响应: 一个正确Modbus响应:响应功能码 = 请求功能码 ; 一个 Modbus异常响应:用来为客户机提供处理过程中与被发现的差错相关的信息,提供一个异常码来指示差错原因。 响应功能码 = 请求功能码 + 0x80。 将上述图示分解理解,例如,客户机与服务器执行Modbus通信协议,当服务器对客户机响应时,它使用功能码来指示正常(无差错)响应或者出现某种差错(称为异常响应)。 对于一个正常响应来说,服务器仅对原始功能码响应,Modbus事务处理(无差错)如下图所示: 对于异常响应,服务器返回一个与原始功能码等同的码,设置该原始功能码的最高有效位为逻辑 1,Modbus事务处理(异常响应)如下图所示:Modbus使用一个Big-Endian 表示地址和数据项。 这意味着当发射多个字节时,首先发送最高有效位。 例如:寄存器数据 0x4001 0x1234 发送的第一字节为 0x12,第一字节为0x34。 Modbus以一系列具有不同特征表格上的数据模型为基础,四个基本表格如下表所示: 对于基本表格中任何一项,协议都允许单个地选择 个数据项,而且设计那些项的读写操作可以越过多个连续数据项直到数据大小规格限制,这个数据大小规格限制与事务处理功能码有关。 数据模型这个概念有限抽象,让我们通过以下两个示例加深理解。 示例1:有 4 个独立块的设备 示例描述:一个设备中的数据结构,含有数字量和模拟量、输入量和输出量。 由于不同块中的数据不相关,每个块是相互独立。 使用Modbus数据模型,按不同 Modbus功能码访问每个块,实现原理如下所示:示例2:仅有 1 个块的设备 示例描述:一个设备仅有 1 个数据块,使用Modbus数据模型,通过几个Modbus功能码可能得到一个相同数据,或者通过 16 比特访问或 1 个访问比特,实现原理如下所示:

如何在PLC通讯中添加MODBUS协议从站?

你的分有多高?我十分钟之类把你的通讯问题及程序都可以解决掉。

首先 ES系列是台达的PLC那选就选择 (PLC与MODUBS设备)选项

2.选中台达的PLC,找到你的型号,可以选DVP的,因为他们的协议是一样的

3.增加MODUBS从站,如果你采用的从站列表中有,就直接选择型号就可以了,没有自己看自定义一下。 填上PLC的输出及输入存储地址就可以了。 配制完成。 。 就这样如果多个站你号站号的位置改变一下就好了。

另外说明一下如果是PLC与PLC通讯你就选择PLC-PLC通讯就好了。 。

如果有问题在线可以问我。 我反正要拿到你的高分。

如何通过Modbus协议实现S7-1200与S7-200通讯

西门子S7-1200 紧凑型PLC在当前的市场中有着广泛的应用,由于其性价比高,所以常被用作小型自动化控制设备的控制器,这也使得它经常与Modbus仪表(扫描枪、打印机等设备进行通讯。 因为没有第三方Modbus仪表,这里就以S7-200作为第三方的仪表为例介绍Modbus通讯。 1.控制系统原理图1:通讯系统原理2.硬件需求S7-1200 PLC目前有3种类型的CPU:1)S7-1211C CPU。 2)S7-1212C CPU。 3)S7-1214C CPU。 这三种类型的CPU最多都可以连接三个串口通信模版。 本例中使用的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.软件需求1) 编程软件 Step7 Basic V10.5 ( 6ES7 822-0AA0-0YA0)2)编程软件 STEP 7 MicroWIN; Modbus库软件选项包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”图标,打开如下图:图2: 新建S7 -1200项目首先需要选择“Create new project”选项,然后在“Project name:”里输入Modbus_Master;在“Path:”修改项目的存储路径为“C:\”;点击“Create”,这样就创建了一个文件Modbus的新项目。 创建后的窗口如下图所示:图3: 新建项目后点击门户视图左下角的“Project View”切换到项目视图下,如下图:图4: 切换到项目视图打开后,在“Devices”标签下,点击“Add new device”,在弹出的菜单中输入设备名“PLC_1”并在设备列表里选择CPU的类型。 选择后如下图:图5: PLC硬件组态插入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设置参数如下图:图6: 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”的选项勾。 如下图所示:图7: 添加启动OB块点击“OK”后会打开此OB块,然后在启动OB块里用MB_COMM_LOAD(注:MB_COMM_LOAD和MB_MASTER功能块是在“Project Library”下的“Library”选项卡里,如下图所示:)图8: Library调用后如下图所示:图9: 调用MB_COMM_LOAD块在调用MB_COMM_LOAD功能块时 ,都会自动弹出创建相应背景数据块的界面,如下图:图10:创建背景数据块按上面的步骤在OB1中插入MB_MASTER功能块如下图:图11:调用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预先定义数据区的大小,如下图所示:图12:数据区的定义完成数据区的定义后,接下来就可以对MB_COMM_LOAD功能块和MB_Master功能块进行参数赋值,赋值的参数见图9和图11。 在上面的编程块里需要注意的是,在MB_MASTER功能块中的参数MB_ADDR参数是从站的Modbus的站地址。 这里要读取的从站的站地址为2;关于MODE、DATA_ADDR、DATA_LEN可在下表中查看,DATA_PTR存放发送或接收到的数据。 表1:MB_MASTER Modbus功能表上面就完成了程序的编写,对项目进行编译;右击PLC_1项目在弹出的菜单里选择“Complies ALL”选项,这样就对硬件与软件进行编译,如下图:图13:编译项目编译且没有错误后就可以下载程序到PLC中,同样右击PLC_1项目,在弹出的菜单选择“Download to Device”。 S7-200作为Modbus从站的配置步骤如下:点击桌面上的“V4.0 STEP 7 MicroWIN SP6”图标(因为STEP 7 MicroWIN安装时并没有安装Modbus的库程序,所以Modbus的库程序是需要单独安装的,安装后才可以在库程序中调用Modbus的通讯功能块,关于库程序可以咨询西门子热线或访问西门子的官方网站),打开后并编写Modbus从站程序如下图:图14:S7-200 Modbus从站编程在上面调用的是端口0的程序,所以在连接通讯线时,需要连接到端口0上,编译并下载项目到S7-200的PLC中。 下载后运行PLC。 用DP电缆连接S7-1200与S7-200。 在线监控S7-200中的程序,并监控变量表,修改VB1000到VB1011的值为1到12(VB1000到VB1011对应的Modbus的地址为-)。 监控到的值如下图所示:图15:S7-200监控变量值在线监控 S7-1200变量表如下图:图16:S7-1200监控变量值4.2 S7-200作Modbus主站,S7-1200作Modbus从站S7-1200作为Modbus从站的配置步骤如下:点击桌面上的“Totally Integrated Automation Portal V10”图标,打开如下图:图17:S7-1200监控变量值首先需要选择“Create new project”选项,然后在“Project name:”里输入Modbus_Slave在“Path:”修改项目的存储路径为“C:\Backup file”;点击“Create”,这样就创建了一个文件Modbus_Slave的新项目。 创建后的窗口如下图所示:图18: 新建项目后点击门户视图左下角的“Project View”切换到项目视图下,如下图:图19:切换到项目视图打开后,在“Devices”标签下,点击“Add new device”,在弹出的菜单中输入设备名“PLC_1”并在设备列表里选择CPU的类型。 选择后如下图:图20: PLC硬件组态插入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设置参数如下图:图21: 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”的选项勾。 如下图所示:图22: 添加启动OB块点击“OK”后会打开此OB块,然后在启动OB块里用MB_COMM_LOAD(注:MB_COMM_LOAD和MB_Slave功能块是在“Project Library”下的“Library”选项卡里,如下图所示:)图23: Library调用后如下图所示:图24: 调用MB_COMM_LOAD块在调用MB_COMM_LOAD功能块时 ,都会自动弹出创建相应背景数据块的界面,如下图:图25:创建背景数据块按上面的步骤在OB1中插入MB_Slave功能块如下图:图26:调用MB_Slave块在插入功能块的过程,相应的生成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预先定义数据区的大小,如下图所示:图27:数据区的定义完成数据区的定义后,接下来就可以对MB_COMM_LOAD功能块和MB_SLAVE功能块进行参数赋值,赋值的参数见图24和图26。 在上面的编程块里需要注意的是,在MB_SLAVE功能块中的参数MB_ADDR参数是此从站的Modbus站地址。 这里定义为此从站的站地址为2;MB_HOLD_REG是指向Modbus保持寄存器DB的指针。 保持寄存器DB必须为典型的全局DB。 MB_SLAVE所提供给主站的功能见下表:表3:MB_SLAVE Modbus功能表A表4:MB_SLAVE Modbus功能表B上面就完成了程序的编写,对项目进行编译;右击PLC_1项目在弹出的菜单里选择“Complies ALL”选项,这样就对硬件与软件进行编译,如下图:图28:编译项目编译且没有错误后就可以下载程序到PLC中,同样右击PLC_1项目,在弹出的菜单选择“Download to Device”。 S7-200作为Modbus主站的配置步骤如下:点击桌面上的“V4.0 STEP 7 MicroWIN SP6”图标(因为STEP 7 MicroWIN安装时并没有安装Modbus的库程序,所以Modbus的库程序是需要单独安装的,安装后才可以在库程序中调用Modbus的通讯功能块,关于库程序可以咨询西门子热线或访问西门子的官方网站),打开后并编写Modbus主站程序如下图:图29:S7-200 Modbus主站编程在上面调用的是端口0的程序,所以在连接通讯线时,需要连接到端口0上,编译并下载项目到S7-200的PLC中。 下载后运行PLC。 用DP电缆连接S7-1200与S7-200。 在线监控S7-1200中的程序,并监控变量表,修改0到20的值为1到21(0到19对应的Modbus的地址为-)。 监控到的值如下图所示:图30:S7-1200监控变量值在线监控 S7-200变量表如下图:图31:S7-1200监控变量值从上面的变量监控表里可以看到VB420中没有数据,因为在主站的S7-200里的程序里只读取10个变量(即-)对应着的VB400-VB419,所以VB420的数据没有接收。

本文原创来源:电气TV网,欢迎收藏本网址,收藏不迷路哦!

相关阅读

添加新评论