西门子Modbus通讯地址问题分析
简述西门子PLC的S7-1200的MODBUSTCP通信的客户端及服务器设置

简述西门子PLC的S7-1200的MODBUS/TCP通信的客户端及服务器设置作者:郭爱华来源:《价值工程》2019年第30期摘要:MODBUS/TCP是MODBUS 通讯中的一种以太网通讯方式,MODBUS/TCP通讯对使用硬件要求低,应用广泛。
西门子PLC的S7-200可以设置为MODBUS/TCP通信方法,其中使用了两个MODBUS/TCP命令“MB_CLIENT”指令和“MB_SERVER”指令,它们分别将PLC设置MODBUS客户端和MODBUS服务器,本文重点介绍这两个命令的设置方法。
Abstract: MODBUS/TCP is an Ethernet communication method in MODBUS communication. MODBUS/TCP communication has low hardware requirements and a wide range of uses. The Siemens PLC S7-1200 can be set to the MODBUS/TCP communication method, in which two MODBUS/TCP commands "MB_CLIENT" and "MB_SERVER" are used, which respectively set the PLC as a MODBUS client for industrial robots and MODBUS server for MES manufacturing process execution and management system. This paper focuses on the setting methods of these two commands.关键词:MODBUS/TCP;S7-1200;客户端;服务器Key words: MODBUS/TCP;S7-1200;client;server中图分类号:TP368.5 ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ;文献标识码:A ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ;文章编号:1006-4311(2019)30-0204-030 ;引言自动化系统包括多种通讯协定,它们是可以应用于工业控制器上的通用语言。
西门子S7-200-SMART之Modbus-RTU-通信常见问题及错误代码含义

常见问题1.S7-200 SMART 是否支持Modbus ASCII 通信模式?STEP 7-Micro/WIN SMART 软件未提供Modbus ASCII 通信模式指令库。
S7-200 SMART CPU若用于Modbus ASCII 通信时,则需要用户使用自由口通信模式进行编程。
2. S7-200 SMART CPU 集成的RS485 端口(端口0 )以及SB CM01 信号板(端口1 )两个通信端口能否同时作为Modbus RTU 主站或者同时作为Modbus RTU从站?S7-200 SMART V2.2版本支持两个通信端口同时做MODBUS RTU主站,不支持同时做MODBUS RTU从站。
3. S7-200 SMART CPU作为Modbus RTU 主站如何访问Modbus 地址范围大于49999 的保持寄存器?通常Modbus 协议的保持寄存器范围在40001 到49999 之间,这个范围对于多数应用来说已经足够了,但有些Modbus 从站保持寄存器区的地址会超出该范围。
Modbus RTU 主站协议库支持保持寄存器地址范围为(40001 到49999)或者(400001 到465536)。
如果Modbus 从站地址范围为400001 –465536,只需在调用MBUS_MSG 子程序时给Addr 参数赋相应的值即可,如416768。
4.S7-200 SMART CPU作为Modbus RTU 主站,多次调用MBUS_MSG 指令时,为什么该指令会出现6# 错误代码?同一时间只能有一条MBUS_MSG 指令处于激活状态,如果激活多条MBUS_MSG 指令,将执行第一条MBUS_MSG 指令,所有后续MBUS_MSG 指令将中止执行并出现6# 错误代码。
多条MBUS_MSG 指令的执行需要采用轮询方式。
5.S7-200 SMART CPU作为Modbus RTU 主站,从站故障或者通信线路断开时,主站会尝试发送多次请求报文,从而导致通信时间过长。
西门子S7200与变频器MODBUS通讯实例详解

西门子S7200与变频器MODBUS通讯实例详解Modbus通讯协议简介Modbus是由Modicon(现为施耐德电气公司的一个品牌)在1979年发明的,是全球第一个真正用于工业现场的总线协议。
ModBus网络是一个工业通信系统,由带智能终端的可编程序控制器和计算机通过公用线路或局部专用线路连接而成。
其系统结构既包括硬件、亦包括软件。
它可应用于各种数据采集和过程监控。
ModBus网络只有一个主机,所有通信都由他发出。
网络可支持247个之多的远程从属控制器,但实际所支持的从机数要由所用通信设备决定。
采用这个系统,各PC可以和中心主机交换信息而不影响各PC执行本身的控制任务。
1 MODBUS RTU协议在S7-200中的应用原理1.1 MODBUSRTU协议与S7-200相互关系简介S7-200 CPU上的通讯口Port0可以支持MODBUS RTU协议,成为MODBUS RTU从站。
此功能是通过S7-200的自由口通讯模式实现,因此可以通过无线数据电台等慢速通讯设备传输。
想在S7-200 CPU与其他支持MODBUS RTU的设备使用MODBUS RTU协议通讯,需要由有S7-200 CPU做MODBUS主站。
S7-200 CPU做主站必须由用户自己用自由口模式,按相关协议编程。
2 从站指令的用法:S7-200控制系统应用中,MODBUS RTU从站指令库只支持CPU 上的通讯0口(Port0)。
要实现MODBUS RTU通讯,需要Step7-Micro/WIN32V3.2以上版本的编程软件,而且须安装Step7-Micro/WIN32V3.2 Instruction Library(指令库)。
MODBUS RTU功能是通过指令库中预先编好的程序功能块实现的。
MODBUSRTU协议在S7-200中应用的基本过程(1) 首先检查S7-200控制系统中所用Micro/WIN软件版本,应当是Step7-Micro/WIN V3.2以上版本。
“MODBUS”常见问题解答

“MODBUS”常见问题解答1. 我的设备支持modbus设备,能否直接与组态王软件连接?只要设备是标准的modbus 协议设备,即可使用组态王设备列表下的PLC-->莫迪康-->MODBUSRTU(或者ACSII 码)进行通信。
但具体的寄存器地址对照表必须从设备厂家索取。
2. 我的支持modbus 协议的串口设备,能否与多个上位软件(比如组态王软件和某品牌触摸屏)同时通讯?因为modbus 串口协议不支持多主站,所以不能多个软件同时与modbus 设备同时通信。
3. 在组态王工程中建立多个modbusTCPIPserver 设备定义,分别使用两台客户端对其访问,只有站点高的那个server 通讯ok,站点低的通讯失败,为什么?这是因为在组态王软件中只支持建立一个modbusTCPIPserver,当建立多个server 时,组态王客户端则会自动与站点高的server进行通讯,所以会导致站点低的通讯失败。
4. 如何实现组态王数据通过串口或者以太网驱动方式传送到其他组态软件或者应用程序中?如果其他组态软件或者应用程序支持modbus 协议,则可以通过组态王提供的modRTUserver 或者modbusTCPserver 驱动来实现。
5. 组态王与支持Modbus协议的设备进行通讯时,组态王画面上显示的数据不正确常有哪些原因?引起数据不正确的原因主要有如下几点:1)组态王中定义的寄存器地址跟实际设备不一致导致。
比如某些使用modbus 协议通讯的设备的数据地址是从0 开始的,而组态王modbus 协议驱动寄存器地址是从1 开始的,所以遇到此种情况时在组态王中定义变量时,寄存器地址要进行加1 处理;2)数据词典中最大原始值和最大值定义不不当;比如最大原始值和最大值不一样会导致画面看到的数据和实际设备不一致;3)组态王读取FLOAT 和LONG 类型的数据时,没有使用提供的SwapF 和SwapL 寄存器来调整FLOAT 型和LONG型数据的字节顺序;4)LONG 或FLOAT 型的双字的数据,没有按照间隔隔地址方式定义;因为modbus 协议所对应的参数地址一般按照字为基本单位进行分地址排序的。
modbus 通讯常见问题

Modbus 通讯常见问题这里不介绍过多Modbus的原理和理论,我也不熟悉。
废话少说,直接开始常见问题。
1、接线问题:现在大部分采用两线制(四线制较少用,这里不介绍)接线方式,采用屏蔽双绞线。
大部分厂家的接线端子标识为:A、B,但是由于各厂家之间的有可能采用的规范不太一样,有的A是正极,有的B是正极,再加上有第三方设备接线混乱,正负经常接反。
通讯之前干两件事:a)第三方设备,也就是从站线接好,用万用表量线间电压,通常会量到1~5V(个别的会到8V)的电压,没有电压,通讯肯定不通,检查线路和接线,以及第三方设备;b)量到电压,判断正负,接到主站设备对应端子上来。
2、信号源问题:确认线路正常,通讯配置及读取地址正确,通讯还是不通,有可能就是信号源的问题。
信号源的问题通常是信号衰减或者有干扰源。
Modbus通讯的理论距离是1200M,距离越长,信号衰减越厉害,加上有一些电缆质量较差,衰减更厉害。
干扰源就不用介绍了。
解决的方法如下:a)信号衰减:更换质量更好的电缆,或者在通讯电缆中间加中继器(优点可以延长Modbus通讯的理论距离,缺点是需要供电);b)干扰源:最理想的方法是排除干扰源(比较艰难)。
也可以尝试更换屏蔽效果更好的电缆,尽量减少和供电电缆放到一起。
另外,有些设备Modbus接线端子没有终端电阻,可以在电缆两端各并联一个终端电阻(电阻为120欧,哪端如果有,就不用加了,具体有没有查看设备样本,一般都会有说明)。
3、通讯配置:主从站配置(波特率、数据位数、停止位数、奇偶校验)一致就可以,不多说了。
4、通讯地址:这个是问题最多的,下面我把自己碰到问题列出来及解决方法列出来,供大家参考。
a)地址偏移:有时会发现第三方设备给你的地址表和你自己读取的不一致,甚至是读不出来,你可以尝试往前或往后读一位,比如说,地址是40001,你可以尝试读取40000或者40002;b)读取数量:有一些设备寄存器较小,读太多和通讯错误;还有一些设备,主站读取数量必须与从站一致,比如说,16位模拟量有三个,你就只能读取三个,数字量有7位,你只能读取7位。
西门子Modbus通讯地址问题分析

Modbus地址实际上分为两种情况即PLC作Modbus主站,Modbus 地址和PLC手册里的地址一与PLC作从站,PLC不用管什么Modbus 地址。
Modbus地址实际上分为两种情况。
下面以西门子S7-200/S7-200SMART/和S7-1200为例来说明:第一种情况:西门子PLC作Modbus主站,Modbus地址和PLC 手册里的地址一致,例如作主站的S7-200的MBUS_MSG指令用于向Modbus从站发送请求消息,和处理从站返回的响应消息。
要读取从站(另一台S7-200)的开始的地址区时,它的输入参数Addr(Modbus 地址)为10001。
S7-200从站保持寄存器的V区起始地址为VB200时,要读取从站VW200开始的V存储区时,保持寄存器的地址是40001。
第二种情况:PLC作从站,PLC不用管什么Modbus地址,等着主站来读写它的地址区就是了。
主站的计算机软件(例如DCS或组态软件)的编程人员需要编写实现Modbus通信的程序,首先需要确定ModbusRTU的报文结构。
他们一般不熟悉PLC,因此PLC的编程人员往往需要和上位机软件的编程人员一起来讨论Modbus的报文结构。
最容易出问题的就是报文里Modbus地址与PLC存储区地址的对应关系。
曾经有工作人员做过的一个系统的上位机是专用的组态软件,通过分析GEPLC手册给出的CRC的循环异或计算实例每一步的中间数据,编写出了CRC计算的C语言程序。
通过实验验证了Modbus 报文结构和CRC的计算的可行性。
S7PLC手册给出的Modbus地址与Modicon公司和GE公司PLC 使用的地址相同,是基于1的地址,即同类元件的首地址为1。
而西门子PLC采用的是基于0的地址,即同类元件的首地址为0。
Modbus 报文中西门子PLC的Modbus地址也采用基于0的地址。
PLC系统手册中的Modbus地址的最高位用来表示地址区的类型,例如的Modbus地址为10001。
s71200-modbus-通讯指令解析

s71200-modbus-通讯指令解析S7-1200 作为Modbus RTU 主站S7-1200 支持Modbus RTU通信模式的模块可作为Modbus RTU主站。
以下以CPU1215C DC/DC/DC和CM1241 RS485 模块为例,介绍S7-1200 Modbus RTU 主站通信组态及编程步骤。
硬件和软件需求及所完成的通信任务:硬件:①CPU1215C DC/DC/DC (订货号:6ES7 215-1AG31-0XB0)②CM1241 RS485 (订货号:6ES7 241-1CH30-0XB0)③PS 307电源(订货号:6ES7307-1KA02-0AA0)④PC(带以太网卡)⑤TP以太网电缆软件:①STEP 7 Professional V11 SP2 UPD4+HSP②ModSim(该软件是第三方软件,可以从Internet 网络下载)所完成的通信任务:将Modbus RTU从站ModSim中Modbus地址从40001开始的5个字中的数据,分别读取到Modbus RTU主站CPU1215C 中地址从DB1.DBW0开始的5 个字中。
1.组态Modbus RTU 通信模块在硬件目录里找到“通信模块”→“点到点”→“CM1241(RS485)”,双击或拖拽此模块至CPU左侧即可,如下图1所示:图1 组态通信模块接下来,在“设备视图”中用鼠标选中CM1241(RS485)模块,在“属性”→“端口组态”中配置此模块硬件接口参数。
如下图2所示:以下以传输率=9.6Kbps,奇偶校验=无奇偶校验,数据位=8位字符,停止位=1,其它保持默认设置为例。
图2 RS485 端口设置最后在“硬件标识符”里确认一下硬件标识符为271,如下图3所示:图3 硬件标识符2.添加启动OB在项目树下选择“CPU1215C DC/DC/DC”→“程序块”→“添加新块”,在弹出的窗口中选择“OB 组织块”→ “Startup”,添加启动OB 100,如下图4所示:图4 添加启动OB3.调用MB_COMM_LOAD指令为使端口一启动就被设置为Modbus RTU通信模式,可在OB 100中调用“MB_COMM_LOAD”指令。
西门子200SMART Modbus RTU通讯实例,附程序详解

通讯材料:1)、PLC2台,分别是200SMART 的CR60和SR20;2)、2个DP插头(6ES7972-0BX12-0XA0)3)、连接导线若干(plc电源及通讯)验证内容:令:CR60PLC为主站,发送PLC系统时钟(8个字节的信息)给SR20从站;SR20从站发送一个双字的循环移位数据给主站,并由通讯数据VD100接收输出到QD0。
主站程序:在验证过程中曾经出现一个错误,使MSG指令始终显示为6,表示从站无响应。
我验证时,由于连接2台plc之间的3+、8-没有确认,造成接线错误,使MSG的error错误信息为6,检查后找到原因,重新接线后仍然报警6。
最后检查为控制程序不完整,主要原因是没有给MB0一个初始化操作,造成错误值没有得到有效的刷新。
于是,在程序段1中加入初始化操作得到解决。
主站MSG指令主要理解Addr地址的应用,下面有描述。
从站程序:从站通讯地址设置为1#从站自VB31开始为读取主站VB11开始的8个字节主站系统时钟数据,指定VB31的起始地址是由Addr地址40011定义的,从站循环指令VD11运行结果,将由Mbus_init的Holdstart 定义的起始地址发送和接收。
编写小结:自简而深进行编写Modbus RTU通讯程序,相对从站通讯程序比较简单,仅仅只是指定通讯种类由Mbus_init管脚指定maxIQ/maxAI/maxHOLD/Holdstart定义,其它管脚根据主站定义匹配进行,相对主站需要根据从站地址偏移量来确定。
通讯数据:Modbus通讯程序相对的难点是通讯映射的地址关系。
主站读取从站的数据,起始地址是根据从站Holdstart管脚定义的起始地址开始算,而不是指从站的V区物理地址。
在验证程序中,从站的Mbus_init起始地址为VB11,那么,主站MSG指令的Addr 40001,应该是指从站的VB11地址。
同理,从站读取主站系统时钟,主站的MSG指令的Addr 40011,对应到从站的地址相当于偏移了10个字(偏移量10word + 11byte = 31byte),即为VB31开始的8个字节中存放,Modbus通讯地址计算是40001开始的。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
西门子Modbus通讯地址问题分析
Modbus地址实际上分为两种情况即PLC作Modbus主站,Modbus 地址和PLC手册里的地址一与PLC作从站,PLC不用管什么Modbus 地址。
Modbus地址实际上分为两种情况。
下面以西门子S7-200/S7-200SMART/和S7-1200为例来说明:
第一种情况:西门子PLC作Modbus主站,Modbus地址和PLC 手册里的地址一致,例如作主站的S7-200的MBUS_MSG指令用于向Modbus从站发送请求消息,和处理从站返回的响应消息。
要读取从站(另一台S7-200)的I0.0开始的地址区时,它的输入参数Addr (Modbus地址)为10001。
S7-200从站保持寄存器的V区起始地址为VB200时,要读取从站VW200开始的V存储区时,保持寄存器的地址是40001。
第二种情况:PLC作从站,PLC不用管什么Modbus地址,等着主站来读写它的地址区就是了。
主站的计算机软件(例如DCS或组态软件)的编程人员需要编写实现Modbus通信的程序,首先需要确定ModbusRTU的报文结构。
他们一般不熟悉PLC,因此PLC的编程人员往往需要和上位机软件的
编程人员一起来讨论Modbus的报文结构。
最容易出问题的就是报文里Modbus地址与PLC存储区地址的对应关系。
曾经有工作人员做过的一个系统的上位机是专用的组态软件,通过分析GEPLC手册给出的CRC的循环异或计算实例每一步的中间数据,编写出了CRC计算的C语言程序。
通过实验验证了Modbus 报文结构和CRC的计算的可行性。
S7PLC手册给出的Modbus地址与Modicon公司和GE公司PLC 使用的地址相同,是基于1的地址,即同类元件的首地址为1。
而西门子PLC采用的是基于0的地址,即同类元件的首地址为0。
Modbus 报文中西门子PLC的Modbus地址也采用基于0的地址。
PLC系统手册中的Modbus地址的最高位用来表示地址区的类型,例如I0.0的Modbus地址为10001。
因为地址区类型的信息已经包含在报文的功能码中了,报文中S7-200的I0.0的Modbus地址不是10001,而是0。
报文中其他地址区的Modbus地址也应按相同的原则处理。
例如当S7-200从站保持寄存器的V区起始地址为VB200时,VW200对应的保持寄存器在报文中的Modbus地址为0,而不是40001。