西门子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开始的。
Modbus通讯协议使用常见问题分析
Modbus通讯协议使用常见问题分析Modbus协议最初由Modicon公司开发出来,是针对PLC设备设计的基于串行总线的主从模式的应用层总线设备协议。
ModbusTCP是封装在TCP包内的Modbus协议,虽然有一些变化,但是根本上还是主从模式。
随着嵌入式技术的发展,国内很多系统的控制和采集单元部分为公司自主研发,我一般建议这些公司的串行通讯协议采用Modbus协议,在和客户的沟通中,我发现很多常见的针对modbus协议理解错误,现在分析如下:1、modbus的保持和输入寄存器是以word(16bit)为单位的。
(Data is packed as two bytes per register.)比如4****(保持寄存器/输出寄存器)和3****(输入寄存器)是以字为单位的。
所以,如果读40001寄存器开始的一个16位的无符号数,那么返回2个Byte,并可以从40002开始读下一个16位的无符号数。
但是,如果读40001寄存器开始的一个32位浮点数,那么,返回4个Byte,而且,下一个32位浮点数必须从40003开始。
客户问题:1)、将40001定义为一个Byte的数据;2)、将40001定义为32位浮点数,40002为下一个32位浮点数。
我们可以参考一下国标GBT_19582-1 2008 (基于Modubs协议的工业自动化网络规范)的功能码表:2、寄存器最小地址为1,而报文起始地址为0。
(Register 1 is addressed as 0)在数据报文中,所有的modbus地址都是从0开始的。
也就是首次出现的数据项在报文中的地址为0。
比如:(All data addresses in Modbus messages are referenced to zero. The first occurrence of a data item is addressed as item number zero. For example:)在控制器中,“线圈1”在Modbus报文的地址域中的地址为00 00。
MODBUS 地址超出9999
MODBUS 地址超出9999
硬件是这样的:200PLC做MODBUS主站读取从站地址为1的保持寄存器。
在主站子程序里40001~4****为读保持寄存器。
但我现在的从站需要读取的地址定义有些特殊,他的地址在51***(MODBUS地址是16位的字为单位,所以最大支持地址单元为65535,51***仍在有效地址之内)。
这样的话问题就出来了,200直接读取地址只能支持0001~9999,我现在想读取超出这个范围的地址。
应该如何处理?
问题补充:
我曾实验过就是将MBUS_MSG子程序中地址直接设为451***,这时候会发现POTRO口将没有任何数据发送,而ERR也指示出4错误。
事实上,关于这个问题我咨询过西门子客服,客服告诉我的就是这么做。
但我实验证明是行不通的。
wb210xa提供了3种可行方式,不过因实际情况前两种方法可能实施不了,第三种方法又没有合适的网关选型。
实在不行,只有用最后一招——用自由口自己编
MDBUS主站程序了。
最佳答案
超出了S7200的处理范围,三种方法:
1.采用施耐德的PLC,如Twido或M218来实现,读取从站时没有地址范围限制,而且实现比较简单;
2.如果从站数据区地址可以更改的话,可以改从站的数据区地址到9999之内;
3.只能加别的网关产品来实现。
Modbus通讯错误代码
常见的错误代码有:3:基本上是从站无响应,从站地址错了102:从站不支持此种数据地址,地址40000,30000等不对,在从站中没有对应的地址103:从站不支持此种数据类型,类型不对,开头的4,3,1,0没有选择正确,应看清楚是读写型整型还是只读型整型还是读写型开关量。
读写型整型是4开头,只读型整型是3开头,读写型开关量是0开头,只读型开关量是1开头。
计算方法为:3个字符包含9-10个位(8个数据位+1或2个停止位),即27-30个位,在波特率为9600的情况下,传输速率约为3ms。
MODBUS最高能到多少波特率?38.4k应该没有问题;我公司是SIEMENS PLC 和MODBUS 通信,最大19200;这个跟从站有很大的关系,与所选的接口芯片有直接关系;西门子S7-200的居然可以达到115200最大的都是理论值,现实中用的很少;115200的话,就该用ASCii协议了,RTU估计是容易丢包了;根据需要设置,与串口通讯波特率一样,常用的有19200、38400;根据下位机的波特率来决定通讯的波特率。
RS485是硬件连接,modbus是软件协议,波特率是串口通信的比特流速率。
Modbus从属协议执行错误代码:错误代码说明0 无错误1 内存范围错误2 非法波特率或校验3 非法从属地址4 非法Modbus参数值5 保持寄存器与Modbus从属符号重叠6 收到校验错误7 收到CRC错误8 非法功能请求/功能不受支持9 请求中的非法内存地址10 从属功能未启用1、重新设置主站询问时间,波特率、奇偶检验,停止位。
2、主、从站地址不能相同。
范围1-2473、检查通信线连接是否正常。
4、可采用MODBUS 串口软件测试下从站是否正常。
错误是10是未使能。
1、编程时使用SM0.1调用子程序MBUS_INIT进行初始化,使用SM0.0调用MBUS_SLAVE。
2、检查相关参数是否正常:、模式选择:启动/停止Modbus,1=启动;0=停止。
modbus通讯地址计算
modbus通讯地址计算
西门子200PLC的M/V/I/Q地址与Modbus的地址如何对应?计算方法说明:
V位地址:
如果将通讯起始地址设为VB0的话则:
如V20.0则Modbus计算方法为20÷2+1+0.0+0.8+(40000-通讯起始地址÷2)=40011.8 ,如V20.1则Modbus计算方法为20÷2+1+0.1+0.8+(40000-通讯起始地址÷2)=40011.9 如V21.0则Modbus计算方法为20÷2+1+0.0+(40000-通讯起始地址÷2)=40011.0
如V21.1则Modbus计算方法为20÷2+1+0.1+(40000-通讯起始地址÷2)=40011.1
即如果地址整数位最后一位是偶数则需要在小数位加0.8,如果是奇数的话则只需要直接将小数位数加进地址整数位除以2加1的值上去即可
另外需要注意的是通讯起始地址如果设置的是奇数的字节(如VB1)则以上的算法刚好相反,即奇数需要在小数位加0.8,偶数则不需要。
V字地址
如果将通讯起始地址设为VB0
如VW20 则Modbus的计算方法为20÷2+1+40000=40011
需要注意的是如果起始通讯地址设的是奇数的话,则计算的地址也应为奇数。
如通讯地址设为VB1
VB21的Modbus计算方法为(21-1)÷2+40000=40011
I位地址
如I2.7 则Modbus计算方法为2×8+7+1+10000=10024
Q位地址与I位地址一样的计算方法,只不过其地址区是0
即如Q2.7的Modbus地址为00024。
西门子PLC通讯规则及BUS线故障查找
西门子PLC414的通讯规则1、Prifibus通讯示意图,仅供培训参考用。
2、西门子PLC通讯规则:(1)若数据继续往下面模板传送,该块模板与下面的模板之间还有通讯,则该块模板BUS的ON/OFF开关必须拨到OFF的位置,表示数据还要继续传送。
(2)只有在PLC通讯的首尾两块模板才需要把ON/OFF开关拨到ON位置,表示接上截至电阻,信号不再往下传送,通过截止电阻构成回路。
(3)ET200从站是CPU与外挂输入/输出模板之间的中间处理单元,ET200上有地址位可以设置该块模板的通讯地址。
(4)主CPU414与从站之间的寻址是通过从站ET200设定的地址位来寻址。
(5)西门子PLC通讯规则,哪一根BUS线通讯有问题,则该BUS 线(往后传送)后面的PLC模板会出现BUS报警,前面通讯正常的模板上不会BUS报警。
(6)当两个从站的地址相同时,地址相同的两块从站BUS线都会报警,但其它没有错误的从站BUS不报警。
(7)PLC一通电,就开始检查各个模板的地址是否正确,如地址不对,则产生PLC通讯错误,BUS灯闪烁。
如地址正确,这时再把地址故意设置错误,PLC也不会报警,BUS灯不闪烁,当重新启动PLC的CPU后,才会产生BUS线通讯报警。
当PLC模板地址错误时,设定完成新的地址后,必须关闭电源,重新开电,重新启动PLC。
否则,CPU将无法识别新的通讯地址,仍然会有BUS线通讯报警。
(在广州燕塘故障排除课程中已经验证)(8)注意:各个ET200从站的地址是从ET200发给PLC的 CPU的,当重新设定ET200地址后,关闭CPU414的电源再启动后,ET200从站的地址仍然无法正确识别,BUS线仍然报警。
但是在设置完正确的ET200从站的地址,关闭ET200从站的电源再启动后,CPU414能够正确识别ET200从站的地址,BUS线不再报警。
(在济南佳宝712机器上已经验证)2、CPU414有两个通讯端口,MPI通讯端口与CPU412和PC计算机之间通讯。
实用西门子PLC(Modbus RTU)通讯
PLC主站1、Modbus RTU 主站初始化(MBUS-CTRL 指令)ENEN :使能端,要一直接通;Mode:1=Modbus RTU通信0=PPI通信;Baud :波特率4800 9600 19200 38400 ;Parity:0=无校验、1=奇校验、2=偶校验;Port :通讯端口选择0=本身集成端口、1=扩展信号板端口;Timeout:通讯最大等待回复时间,单位ms ;Done :完成标志位;Error :错误代码。
2、读写指令MBUS-MSGEN:使能端,一直接通;First:读写触发,需配合沿指令使用;Slave:从站地址;RW:0=读、1=写;Addr :读写从站的Modbus首地址;Count:读写数量;DataPtr:数据指针(用于存储将要读取或写入的数据);其他同上。
PLC从站1、Modbus RTU 从站初始化(MBUS-INIT)EN:使能端,使用SM0.1激活;Mode:1=Modbus、0=PPI ;Addr:从站站地址;Baud:波特率;Parity:奇偶校验0=无、1=奇校验、2=偶校验;Port:通讯端口选择0=集成端口、1=扩展端口;Delay:一般填0;MaxIQ:允许主站读写的最大IO点数;MaxAI:允许主站读取的最大AI字数;MaxHold:允许主站读取的最大V区字数;HoldStart:允许主站读取的V区首地址(Modbus地址为40001);其他同上。
2、处理主站通讯请求指令(MBUS-SLAVE)变频器从站1、西门子变频器2、三菱变频器硬件接线。
西门子MODBUS通讯
西门子MODBUS通讯1.MODBUS通讯的概述:MODBUS通讯必须注意以下问题:Baud (波特率)Slave (从站地址)电览连接3-38-8与其它设备通讯注意的是:S7200-485通讯PLC口可以是0,也可以是1,(PLC外壳上有标注)取PLC的3,8口注意PLC做从站必须为0,否则无法通讯。
2.西门子MODBUS主站家初始化化:这里的COUNT可以是8,16,32,64,如果是8侧:V2000.0 V2000.1 V2000.2 V2000.3 V2000.4 V2000.5 V2000.6 V2000.7 (1001, 1002,1003,1004,1005,1006,1007, 1008)如果是16侧:V2000.0 V2000.1 V2000.2 V2000.3 V2000.4 V2000.5 V2000.6 V2000.7 V2001.0 V2001.1 V2001.2 V2001.3 V2001.4 V2001.5 V2001.6 V2001.7 (1001, 1002,1003,1004,1005,1006,1007, 1008, (1009, 1010,1011,1012,1013,1014,1015, 1016))3. 读取地址:00001 数字量输出Q0.0~Q15.710001 数字量输入I0.0~I15.730001 模拟量输入A WI040001 寄存器V主站发过去的数据V:从站接收到的数据V:常见的错误及其错误代码:1. 如果多个MBUS_MSG 指令同时使能会造成6号错误2. 从站delay 参数设的时间过长会造成3号错误3. 从站掉电或不运行,网络故障都会造成3号错误学习这个MODBUS最好是准备两块S7200-CPU 1.指令给定从站运用此时:V300.2对应另外一个CPU的输出点为Q0.2V3001.0对应另外一个CPU的输出点为Q1.02.接收从站指令运用:V2000.0是接收到从站过来的信号,也就是从站(I0.0)信号V2000.0是接收到从站过来的信号,也就是从站(I0.1)信号3.技术要点:看这里是那里过来的点呢?V2001.0是接收到从站过来的信号,也就是从站(I1.0)信号,此时不要混淆了本人QQ303074848有需要的朋友可以交流PLC技术。
西门子S7-200系列PLC的MODBUS通信功能(一)
西门子S7-200系列PLC的MODBUS通信功能(一)这段时间经常有学员问有关于S7-200系列PLC的MODBUS通信的问题,所以今天就写一遍文章,来跟大家聊聊S7-200系列PLC的MODBUS的通信功能如何使用。
MODBUS通信协议概述:MODBUS协议是一个通用的协议,在很多智能设备上都支持这个通信协议,如变频器,智能温控仪表等都支持MODBUS通信协议。
MODBUS通信协议有具有串行链路上的MODBUS ASCAII通信和MODBUS RTU通信,也有基于TCP/IP上的 MODBUS TCP通信。
这里我们主要介绍基于串行链路上的MODBUS RTU的通信。
MODBUS RTU的信息帧格式:Start:起始码,表示的是一个信息帧的开头,MODBUS RTU通信,使用时间来作为信息帧的开头,主要是检测传输线上的空闲的时间,长度为3.5个字符时长,一个字符的长度跟数据位,停止位、起始位、奇偶校验位,波特率有关。
Address:地址码(一个字节),表示的是从站的站号,从站站号有从站设备给定或是设置,如变频器,可以在变频器参数中设置变频器的站号。
Function:功能码(一个字节),描述对从站的读写操作,是对从站读取数据,还是写入数据到从站,常见功能码如下图所示:Data:数据区(N个字节),数据区主要有两部分构成,一部分称为数据区的地址,一部分称为数据区的内容,如需要控制变频器的运行,则变频器的运行代码称为数据区内容,运行代码需要写入的地方称为数据区地址。
CRC:校验码(2字节),对从站号到数据区的数据进行CRC校验,可以参考前面一篇对于CRC校验程序设计的内容介绍。
End:结束码,与起始码一样,也是通过时间进行判断。
接下来,我们以西门子S7-200SMART系列的PLC与深圳的海普蒙特的变频器为例,来说明使用MODBUS的通信方式来控制变频器的运行,频率的修改,及读取一些参数的程序首先,我们需要熟悉变频器说明书上所描述的通信的内容,从说明书上显示支持的功能码为03,06,和16这三种功能码(注意0X10表示的是16进制数10):提供的信息帧格式为:例如:运行命令控制,地址位十六进制数的3200,往地址3200中写入不同的代码表示不同的控制命令,如下图所示根据以上内容,我们可以写出控制变频器运行的信息帧的格式,假设变频器的站号设置为1,则可以得出如下图所示的信息帧的格式其他的命令的信息帧格式,参考变频器说明书,以相同的方式可以写出。
学习s7-200之间的Modbus通讯
学习s7-200之间的Modbus通讯参摘微信读书 书名:西门⼦PLC⼯业通信完全精通教程作者:向晓汉苏⾼峰关于S7-200两个PLC互相通信⼀、使⽤Modbus协议库⼆、Modbus的地址Modbus地址通常是包含数据类型和偏移量的5个字符值。
第⼀个字符确定数据类型,后⾯四个字符选择数据类型内的正确数值。
(1)主站寻址Modbus主站指令可将地址映射到正确功能,然后发送⾄从站设备。
Modbus主站指令⽀持下列Modbus地址:00001到09999是离散输出(线圈);10001到19999是离散输⼊(触点);30001到39999是输⼊寄存器(通常是模拟量输⼊);40001到49999是保持寄存器。
所有Modbus地址都是基于1,即从地址1开始第⼀个数据值。
有效地址范围取决于从站设备。
不同的从站设备将⽀持不同的数据类型和地址范围。
(2)从站寻址Modbus主站设备将地址映射到正确功能。
Modbus从站指令⽀持以下地址:00001⾄00128是实际输出,对应于Q0.0-Q15.7;10001⾄10128是实际输⼊,对应于I0.0-I15.7;30001⾄30032是模拟输⼊寄存器,对应于AIW0⾄AIW62;40001⾄04XXXX是保持寄存器,对应于V区。
所有Modbus地址都是从1开始编号的。
⽰例:三、相关指令介绍(⼀)做主站使⽤Modbus master库(1)初始化主设备指令MBUS_CTRL⽤于S7-200端⼝0(或⽤于端⼝1的MBUS_CTRL_P1指令)可初始化、监视或禁⽤Modbus通信。
EN:使能端,有信号则该指令执⾏Mode:输⼊的值⽤于选择通信协议。
输⼊值为 1 时,将 CPU 端⼝分配给 Modbus 协议并启⽤该协议。
输⼊值为 0 时,将 CPU 端⼝分配给PPI 系统协议并禁⽤ Modbus 协议。
Baud:波特率Parity:设置为与 Modbus 从站设备的奇偶校验相匹配。
西门子S7-1500MODBUS通讯总结
西门子S7-1500MODBUS通讯总结S7-1500 MODBUS的通讯总结:MODBUS MASTER:先组态硬件,如下所示:然后打开OB1,进行编程,如下所示:先调用初始化的块 MODBUS COMMON LOAD管脚说明:REQ: 指令起始于上升沿(0 到 1)。
PORT: 安装并组态完 CM 后,便可在设备组态的“硬件ID”(Hardware ID) 属性中找到 CM 端口值。
符号端口名称在 PLC 变量表的“系统常数”(System constants) 选项卡中指定。
就是前面提到的硬件标识符BAUD: 选择数据传输速率:1 = 300,2 = 600,3 = 1200,4 = 2400,5 = 4800,6 = 9600,7 = 19200,8 = 38400,9 = 57600, 10 = 76800, 11 = 115200 bit/s。
所有其它值无效。
PARITY: 选择奇偶校验:· 0 –无· 1 –奇校验· 2 –偶校验RESP_TO: 响应超时:5 ms 到 65535 ms - Modbus_Master 等待从站响应的时间(以毫秒为单位)。
如果从站在此时间段内未响应,Modbus_Master 将重复请求,或者在指定数量的重试请求后取消请求并提示错误(请参见下文,RETRIES 参数)。
MB_DB:用MODBUS MASTER的背景数据块里面的一部分,如下所示: 对 Modbus_Master 或Modbus_Slave 指令的背景数据块的引用。
必须以 Modbus_Master 或 Modbus_Slave 指令的 MB_DB 参数替换 MB_DB 参数(静态,因此在指令中不可见)。
然后调用MODBUS MASTER 的功能块,如下所示:管脚说明如下所示:REQ;是脉冲信号,给一次脉冲,收发一次MB_ADDR:是从站地址MODE:读写模式,0是读,1是写DATA_ADDR:对应功能码LEN:数据长度DATA_PRA:接收或发送的存储区域上述是模式和功能码的对应关系除上述做法,还需要设置一个地方:打开MODBUS COMMON LOAD的背景数据块,如下所示:将MODE 设置成4上述是主站的总结接下来说一下从站的设置:前面参数和主站是一样的,就是调用MODBUS SLAVE需要说明一下:MB_ADDR: MODBUS 的从站地址MB_HOLD_REG:这对应的是40001的功能码例如00001的功能码对应的是Q0.010001 ------I0.030001-------IW0其余和主站设置一样.。
关于如何解决西门子 PROFIBUS 通讯故障的一些见解
关于如何解决西门子 PROFIBUS 通讯故障的一些见解摘要:西门子工控系统300、400系列的CPU持续使用至今已经有近30年的时间,从应用上来讲西门子PLC300以及400系列整套的控制系统在中国市场上应用还是非常的广泛,虽然目前工业控制领域内设备层的通信最终将被以太网取代,但西门子300以及400系列的PLC仍然正在被广泛的使用。
关键词:西门子、通讯故障、解决处理一、西门子系列的PLC从最初200系列逐步发展到最被广泛使用的300、400系列CPU产品,与之相配套使用的西门子公司自主开发的PROFIBUS通讯协议也日渐成熟。
但在使用过程中,因为方方面面的原因,通讯故障成为西门子PLC运行过程中最为常见的难点之一。
下面开始介绍PROFIBUS通讯协议工作原理以及如何处理西门子400系列PLC运行过程中较为常见的通讯故障。
二、PROFIBUS通讯协议的工作原理:西门子PROFIBUS通讯协议通过系统自带的系统功能块SFC14、SFC15实现各装置之间的通讯。
依据系统的大小,一个西门子400系列的CPU可能会有几条总线,一条总线上最多可带32个分站。
分站可以是远程I/O通讯模块,也可以是变频器、直流调速器或者其他装置。
需要特别注意的是由线缆和DP接头组成的总线从头至尾是连通的,一条带有分站的总线从硬件组态上看,像是从头至尾串联的起来的,但实际上每一个分站都是并接在总线上的。
下图是西门子PROFIBUS通讯的应用的一个典型例子。
下面就说说如何解决PROFIBUS通讯中常见的故障。
1、一条总线中的某个分站掉站了。
遇到这种情况确认完不是分站装置本身的原因,一般直接检查DP耦合器和接线状况。
DP接头中A1和B1之间、A2和B2之间是连通,如果使用万用表测量不通,说明DP接头坏了。
另外还需要测量终端电阻,将拨码打到ON上,测量A1和B1之间的电阻,正常的情况下会有220欧姆的阻值。
2、一条总线从某个分站开始后面所有的分站全部掉站。
- 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。