Modbus通讯错误代码
Modbus通讯指令使用说明

数据类型
功能描述
值
Q
BOOL
主站是否发送完成标志
0:主站未接收到从站返回信息
1:主站成功接收到返回信息。
Error
BYTE
错误信息
0:数据接收正确
1:CRC校验错
2:接收超时
表1-1 Address参数详细说明
Address参数说明
最高位
低四位
0:开出
Modbus原始地址
1:开入
3:模入
4:模出
3、Modbus主站指令能自动进行超时判断和CRC校验检测。
2,端口通信参数设置梯形图(LD)
参数说明
输入参数
数据类型
功能描述
参数值说明
EN
BOOL
使能
0:无效
1:使能
Address
BYTE
本站地址
范围1-247
Port_Type
BYTE
串口类型
1为232,2为485
Baudrate
1、Modbus主通讯指令
功能块示例
POU语言
程序
梯形图(LD)
参数说明
输入参数
数据类型
功能描述
参数值说明
EN
BOOL
使能
0:无效
1:上升沿使能
Slave
BYTE
从站地址
Modbus从站地址,1~247
RW
BOOL
读/写选择
0-读取数据1-写入数据
Address
DWORD
从站存放数据的地址
详见表1-1
诸如:00001,表示Modbus地址为0001的开出点
43050,表示Modbus地址为3050的模出点
MODBUS标准通讯协议

MODBUS 标准通讯协议(简版)(基于Modbus 应用协议RTU 通讯模式)1. 前言本协议适用于符合MODBUS 标准通讯协议的规定以及在Modbus 网络上以RTU 模式通信运行的设备和应用软件。
本协议按照Modbus 应用协议标准制定。
2. 波特率可选范围代码678910 11 12 13 14 波特率 2400 4800 9600 14400192002880038400576001152003. RTU 通讯数据传输模式3.1 RTU 模式每个字节( 11 位 )的格式为 :通讯传输为异步方式,并以字节(数据帧)为单位。
在主站和从站之间传递的每一个数据帧都是11位的串行数据流。
编码系统: 8–位二进制,报文中每个8 位字节含有两个4 位十六进制字符(0–9, A –F) 数 据 位: 1个 起始位8个 数据位, 首先发送最低有效位1个 奇偶校验(注:偶校验是要求的,其它模式( 奇校验,无校验 )也可以使用) 1个 停止位 (注 :使用无校验时要求2个停止位)帧校验域:循环冗余校验(CRC) 3.2 字符的串行传送方式:每个字符或字节按如下顺序发送(从左到右):最低有效位 (LSB) . . . 最高有效位 (MSB)通过配置,设备可以接受奇校验、偶校验或无校验。
如果无奇偶校验,那么传送一个附加的停止位来填充数据帧使其成为完整的11位异步字符:3.3 数据编码:Modbus 处理的所有数据按照存储数据的类型可以分为位寄存器(容量为1位)和16位寄存器(容量为16位)两种,它们的宽度都是16位(Data is packed as two bytes per register),协议允许单个选择65536个数据项,而且其读写操作可以越过多个连续数据项直到数据大小规格限制,这个数据大小规格限制与事务处理功能码有关。
在Modbus PDU 中从0~65535寻址每个数据。
Modbus 使用一个‘big-Endian ’表示地址和数据项,即最高有效字节在低地址存储,最低有效字节在高字节存储。
qmodbus crc计算代码

qmodbus crc计算代码QModbus是一个Qt库,用于Modbus协议通讯。
在Modbus通讯中,CRC校验是非常重要的一个步骤,它用于检测通讯过程中的错误。
因此,在使用QModbus进行通讯时,我们必须要了解如何计算CRC码。
CRC的全称是循环冗余校验码(Cyclic Redundancy Check),它是一种数据校验方法,常用于串行通讯中,可以检测数据在传输过程中是否发生错误。
CRC码的计算过程是通过将要发送的数据按照一定的算法进行计算,得出一个特定的值,称为CRC码。
接收端同样按照同样的算法计算接收到的数据的CRC码,然后比较两个CRC码是否相同,以判断数据是否正确传输。
QModbus提供了一个函数QModbusDataUnit::calculateCRC(),用于计算CRC码。
该函数的参数是一个字节数组(QByteArray),表示要进行CRC计算的数据。
下面是QModbus的CRC计算代码示例:```cpp#include <QModbusDataUnit>QByteArray data; // 待计算CRC的数据quint16 crc = QModbusDataUnit::calculateCRC(data); // 计算CRC码```需要注意的是,在进行数据通讯时,CRC码的计算方式是与Modbus设备的寄存器(寄存器表示Modbus设备中的数据存储单元)长度有关的。
例如,对于16位寄存器,CRC码的计算方式如下:```cppquint16 crc16(const QByteArray &data){const quint16 poly = 0xA001; // 多项式值quint16 crc = 0xFFFF; // 初始值for (int i = 0; i < data.size(); i++) {crc ^= quint16(data[i]);for (int j = 0; j < 8; j++) {if (crc & 0x0001) {crc = (crc >> 1) ^ poly;} else {crc >>= 1;}}}return crc;}```此外,还需要注意在计算CRC码时,要将Modbus帧中的CRC码字段排除在计算范围之外。
ModBus规约

通讯采用ModBus规约N81格式(8个数据位、一个停止位、没有校验位)。
数据帧格式为:地址码(一字节)、功能码(一字节)、数据区、CRC校验(两字节)。
CRC校验码采用CRC-16校验方法。
二字节的错误校验码,低字节在前,高字节在后。
读取数据是高字节在前,低字节在后。
读取功能码为03。
(下位机回送所有数据均为两字节)读取测量数据发送:地址、03、00、00、00、03、CRC(两字节)数据地址读取个数(三相需一次读取)下位机回送:地址、03、06(回送字节数)、测量数据(六字节A相B相C相,高字节在前、低字节在后)、CRC。
例:地址为1,测量数据为500.0(数据全部为16进制)发送:01030000000305CB接收:0103061388138813884A31其他数据寄存器地址:0000(测量数据)0006(小数点位置)0016(开入、开出状态,高位字节开出[0位-1路,1位-2路],低位字节开入[0位-1路,1位-2路]),0308(波特率,0-1200,1-2400,2-4800,3-9600,4-19200),0302(上限阀值,不带小数点),0300(地址,只用于修改地址),0312(变比)写入功能码为06。
(下位机回送于发送的完全相同)数据格式:地址、06、XX、XX、XX、XX、CRC(两字节)数据地址写入数据例:地址为1,修改上限阀值为5000发送:0106030213882518接收:0106030213882518(1388对应的十进制5000写入上限阀值寄存器)注意:0000寄存器地址对应的测量数据寄存器无法写入,只能读出。
0300寄存器地址对应的本机地址只能写入修改值,无法读出。
附录:------通讯规约1.ModBus 基本规则:1.1所有RS485通讯回路都应遵照主/从方式。
依照这种方式,数据可以在一个主站(如:PC )和32个子站(如:YD2000)之间传递。
S7-1200 与 S7-1200 Modbus TCP 通信例程

S7-1200 与S7-1200 Modbus TCP 通信例程一. 使用环境:(1)S7-1215C V4.2与S7-1217C V4.2(2)TIA 博途V14SP1组态二. 实现功能:S7-1215C作为客户端,S7-1217C作为服务器,S7-1215C读取S7-1217C的40001~40008的数据并存储到MW100 ~ MW114,将MW116 ~ MW130 的数据写入到S7-1217C的40009~40016三.S7-1215C作为客户端S7-1200与S7-1200的Modbus TCP 通讯的例程免责声明:本例程仅供参考,程序中的CPU 版本、类型可能与用户实际使用不同,用户可能需要先对例子程序做修改和调整,才能将其用于测试。
使用环境:(1)S7-1215C V4.2与S7-1217C V4.2(2)TIA 博途V14SP1组态实现功能:S7-1215C作为客户端,S7-1217C作为服务器,S7-1215C读取S7-1217C的40001~40008的数据并存储到MW100 ~ MW114,将MW116 ~ MW130 的数据写入到S7-1217C的40009~400161. 检查Modbus TCP 连接状态,连接建立后复位MB_CLIENT 指令控制位和状态位1>、MB_CLIENT 背景数据块中静态变量"Connected" 用于指示TCP 连接是否建立2>、TCP 连接成功建立后,复位MB_CLIENT 指令控制位和状态位3>、触发第一个MB_CLIENT 指令的REQ .2. 读取Modbus TCP 服务器数据读取Modbus TCP 服务器侧Modbus 地址40001~40008的数据存储到本地CPU 的M 存储区MW100 ~ MW1143. 第一个MB_CLIENT 指令完成位或错误位复位本指令的REQ 触发位1>、第一个MB_CLIENT 指令的DONE 或ERROR 复位本指令的REQ2>、同时触发第二个MB_CLIENT 指令的REQ4.写入Modbus TCP 服务器数据.将本地CPU 的M 存储区MW116 ~ MW130 写入Modbus TCP 服务器侧Modbus 地址40009~400165. 第二个MB_CLIENT 指令完成位或错误位复位本指令的REQ 触发位1>、第二个MB_CLIENT 指令的DONE 或ERROR 复位本指令的REQ2>、同时触发第一个MB_CLIENT 指令的REQ四.S7-1217C作为服务器免责声明:本例程仅供参考,程序中的CPU 版本、类型可能与用户实际使用不同,用户可能需要先对例子程序做修改和调整,才能将其用于测试。
TCU(Modbus通讯协议)

第一章总论1.1 概述Modbus总线用于将TCU系列控制器连接到具备Modbus总线通道的远程监控系统或其它终端设备上。
这时,TCU列控制器总是作为从机。
Modbus总线还用于将其它具备Modbus总线通道的终端设备连接到TCU系列控制器中,此时,TCU系列总是作为主机。
TCU系列提供了2个独立的通讯接口,COM1和COM2口,但是只提供了一个RS-232接口,其它的作为RS485接口。
★ RS485二线网络接口。
★ RS232 三线网络接口。
(RXD、TXD、GND)具体连接方式参见第三章物理连接。
1.2 有效数据访问⑴上行数据遥测信息遥信信息⑵下行数据遥控信息设定参数1.3 访问模式RS232接口允许双向操作。
如果采用RS485接口仅支持单向操作。
采用该协议时建议用户使用RS232接口,否则会出现数据接收错误。
循环时间:下行循环指令最短时间必须大于10S。
1第二章 Modbus总线协议功能概述2.1 协议操作Modbus总线用于在一个主机与一个或多个从机之间进行数据交换,执行请求,应答对话,请求总是由主机发起的。
从机由地址编码进行识别。
Modbus以RTU模式存在。
数据以16Bit字或1Bit格式进行交换。
每个信息都有一个16位地址(字或位)。
2.2 协议功能TCU系列控制器使用的是RTU Modbus总线协议。
以下TCU系列的可执行功能:2.2.1 基本功能表一:基本功能注:功能码0x55和0x66不支持基本型的TCU产品,它仅仅是预留的扩展功能。
2.2.2 异常功能从机在接收到命令且校验正确时,会返回表二的错误功能。
2.2.3 以下情况从机不响应发生通讯故障时,从机无法接收到命令,从机不响应,由主机以超时来判断错误。
从机收到命令,但检测到错误(奇偶校验错误、CRC校验错误)时,从设备不响应,也由主机以超时来判断错误。
表二:错误代码22.2.4 TCU系列不支持多主机操作。
2.2.5 安全功能功能码:66H不支持基本型的TCU产品,它仅仅是预留的扩展功能。
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”指令。
ModbusRTU主站通讯

这个 标准 通常称作 “RS-232” 或 “RS-232C” 因为更早的修订版命名为“RS-232-C”。 RS-232 端口使用非平衡回路传送和接收数据并且控制信号 。 所以, 所有数据和控 制回路需要一根 信号地 (Signal Ground)电线以构成 回路 。
时间限制
串行通讯上运行 Modbus 规范及实现指南 V1.01包含若干重要的时间限制要求。
串行连接
™ Series 90 和 VersaMax 都是 GE Fanuc Automation公司的商标. 1 最新的Modbus RTU 规范在文档 Modbus Application应用协议规范 V1.1 与串行线路上的 Modbus 规范及实现指南 V1.0 中提供,后者两个规范可以在 /找到. 按照Modbus 标
注意:
1. 连接电缆的连接器使用 终端电阻 (RT) 针连接. 其他连接器不能连接 RT
2. 在 SD 信号线两端要用终端电阻 在连接器外壳内接有一个 120 欧姆, ¼ 瓦 的电阻.
3. 在两个端点设备之间的连接器。如图所示 其他的连接器最多
可以使用 31 个.
4. 所有连接器都接到 GE Fanuc CPU 模块的 15-针 RS-485 端口上 . Modbus RTU 主站设备必须 接到左侧的连接器. 其他设备都是从站
有些 RS-422 端口 支持多支路 (多点) 操作。 然而,标准并不保证实现这一能力标 准。 试图在多支路网络中使用 an RS-422 设备时需要注意。
EIA/TIA-485-A: 平衡数字多点系统中所用的发送器和接收器的电气特性 (ANSI/TIA/EIA-485-A-98)
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
常见的错误代码有:
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-247
3、检查通信线连接是否正常。
4、可采用MODBUS 串口软件测试下从站是否正常。
错误是10是未使能。
1、编程时使用SM0.1调用子程序MBUS_INIT进行初始化,使用SM0.0调用
MBUS_SLAVE。
2、检查相关参数是否正常:
、模式选择:启动/停止Modbus,1=启动;0=停止 。
、延时:附加字符间延时,缺省值为0 。
、初始化完成标志:成功初始化后置1 。
10 从属功能未启用.
你应该要查三个方面:
1,硬件连接是否成功,你可以用串口调试软件来检测硬件是否连接成功。
2,MODBUS地址设置是否有重叠现象,通信率是否一致。
3,程序里是否启动了MODBUS库指令。
00001 Q0.0
00002 Q0.1
00127 Q15.6
00128 Q15.7
10001 I0.0
10002 I0.1
10127 I15.6
10128 I15.7
30001 AIW0
30002 AIW2
30032 AIW62
40001 HoldStart
40002 HoldStart+2字节
40003 HoldStart+4字节
4xxxx HoldStart+2×(xxxx-1)字节