modbus编程
Modbus 通讯协议编程

Modbus 通讯协议编程协议名称:Modbus 通讯协议编程1. 引言Modbus 通讯协议是一种常用的工业通信协议,用于在不同设备之间进行数据传输和通信。
本协议旨在详细描述 Modbus 通讯协议的编程实现方法和规范,以确保设备之间的数据传输和通信的稳定性和可靠性。
2. 范围本协议适用于 Modbus 通讯协议的编程实现,包括但不限于 Modbus RTU、Modbus ASCII 和 Modbus TCP/IP 等通信方式。
3. 定义在本协议中,以下术语的定义如下:- Modbus 主站:指发起通信请求的设备。
- Modbus 从站:指响应通信请求的设备。
- 寄存器:指存储和传输数据的内存单元。
- 线圈:指用于控制设备的开关量。
4. Modbus RTU4.1 帧格式Modbus RTU 使用二进制编码,每个数据帧由以下部分组成:- 从站地址:1 字节,用于标识 Modbus 从站。
- 功能码:1 字节,用于指示操作类型。
- 数据:n 字节,根据功能码的不同而变化。
- CRC 校验:2 字节,用于校验数据的完整性。
4.2 功能码Modbus RTU 支持以下功能码:- 读取线圈状态(功能码 01):用于读取线圈的状态。
- 读取输入状态(功能码 02):用于读取输入状态。
- 读取保持寄存器(功能码 03):用于读取保持寄存器的值。
- 读取输入寄存器(功能码 04):用于读取输入寄存器的值。
- 强制单线圈(功能码 05):用于设置线圈的状态。
- 写单个保持寄存器(功能码 06):用于设置保持寄存器的值。
- 写多个线圈(功能码 15):用于设置多个线圈的状态。
- 写多个保持寄存器(功能码 16):用于设置多个保持寄存器的值。
5. Modbus ASCII5.1 帧格式Modbus ASCII 使用 ASCII 编码,每个数据帧由以下部分组成:- 起始符号(冒号):1 字节。
- 从站地址:2 字节,用于标识 Modbus 从站。
MODBUS通讯协议及编程

MODBUS通讯协议及编程协议名称:MODBUS通讯协议及编程一、引言MODBUS通讯协议是一种常用的串行通信协议,用于在自动化控制系统中实现设备之间的数据交换。
本协议旨在详细描述MODBUS通讯协议的各种功能和编程实现方法,以便开发人员能够准确地理解和应用该协议。
二、协议概述MODBUS通讯协议是一种基于主从结构的协议,主要用于在工业自动化系统中实现设备之间的数据传输。
该协议定义了一组功能码,用于读取和写入设备的寄存器和线圈。
MODBUS通讯协议支持多种物理层传输介质,如串行通信和以太网通信。
三、协议功能1. 读取线圈状态(功能码01)该功能码用于读取设备中的线圈状态,返回线圈的当前状态。
开发人员可以通过该功能码实现对设备的远程监控和控制。
2. 读取离散输入状态(功能码02)该功能码用于读取设备中的离散输入状态,返回输入信号的当前状态。
开发人员可以通过该功能码实现对设备输入信号的实时监测。
3. 读取保持寄存器(功能码03)该功能码用于读取设备中的保持寄存器的值,返回寄存器的当前值。
开发人员可以通过该功能码实现对设备状态的实时获取。
4. 读取输入寄存器(功能码04)该功能码用于读取设备中的输入寄存器的值,返回寄存器的当前值。
开发人员可以通过该功能码实现对设备输入信号的实时获取。
5. 写单个线圈(功能码05)该功能码用于写入设备中的单个线圈,将线圈的状态设置为开或闭。
开发人员可以通过该功能码实现对设备的远程控制。
6. 写单个保持寄存器(功能码06)该功能码用于写入设备中的单个保持寄存器,设置寄存器的值。
开发人员可以通过该功能码实现对设备状态的远程控制。
7. 写多个线圈(功能码15)该功能码用于写入设备中的多个线圈,同时设置多个线圈的状态。
开发人员可以通过该功能码实现对设备的批量控制。
8. 写多个保持寄存器(功能码16)该功能码用于写入设备中的多个保持寄存器,同时设置多个寄存器的值。
开发人员可以通过该功能码实现对设备状态的批量控制。
Modbus 通讯协议编程

Modbus 通讯协议编程协议名称:Modbus 通讯协议编程一、引言Modbus 通讯协议是一种用于工业自动化领域的通信协议,常用于连接不同设备之间的数据交换。
本协议旨在规范Modbus通讯协议的编程实现,确保各种设备之间的数据传输准确、可靠和高效。
二、协议版本本协议基于Modbus通讯协议的最新版本进行编程实现,目前版本为Modbus协议v2.0。
三、通讯方式1. Modbus RTUModbus RTU是一种串行通讯方式,使用二进制编码进行数据传输。
通讯速率可根据实际需求进行配置,常见的包括9600bps、19200bps、38400bps等。
2. Modbus ASCIIModbus ASCII是一种基于ASCII码的串行通讯方式,使用可见字符进行数据传输。
通讯速率可根据实际需求进行配置,常见的包括9600bps、19200bps、38400bps等。
3. Modbus TCP/IPModbus TCP/IP是一种基于以太网的通讯方式,使用TCP/IP协议进行数据传输。
通讯速率可根据实际需求进行配置,常见的包括10Mbps、100Mbps、1000Mbps等。
四、数据格式1. Modbus RTU 数据格式Modbus RTU 数据帧由起始符、地址、功能码、数据、CRC校验码组成。
具体格式如下:起始符:1个字节,固定为0xFF。
地址:1个字节,表示设备地址。
功能码:1个字节,表示读取或者写入数据的功能。
数据:根据功能码的不同,数据长度可变。
CRC校验码:2个字节,用于检验数据帧的完整性。
2. Modbus ASCII 数据格式Modbus ASCII 数据帧由起始符、地址、功能码、数据、LRC校验码组成。
具体格式如下:起始符:1个字符,固定为冒号(:)。
地址:2个字符,表示设备地址。
功能码:2个字符,表示读取或者写入数据的功能。
数据:根据功能码的不同,数据长度可变。
LRC校验码:2个字符,用于检验数据帧的完整性。
MODBUS通讯协议及编程(VC)

MODBUS通讯协议及编程ModBus通讯协议分为RTU协议和ASCII协议。
下面就ModBus RTU协议简要介绍如下:一、通讯协议(一)、通讯传送方式:通讯传送分为独立的信息头,和发送的编码数据。
以下的通讯传送方式定义也与MODBUS RTU 通讯规约相兼容:编码8位二进制起始位1位数据位8位奇偶校验位1位(偶校验位)停止位1位错误校检CRC(冗余循环码)初始结构= ≥4字节的时间地址码= 1 字节功能码= 1 字节数据区= N 字节错误校检= 16位CRC码结束结构= ≥4字节的时间地址码:地址码为通讯传送的第一个字节。
这个字节表明由用户设定地址码的从机将接收由主机发送来的信息。
并且每个从机都有具有唯一的地址码,并且响应回送均以各自的地址码开始。
主机发送的地址码表明将发送到的从机地址,而从机发送的地址码表明回送的从机地址。
功能码:通讯传送的第二个字节。
ModBus通讯规约定义功能号为1到127。
本仪表只利用其中的一部分功能码。
作为主机请求发送,通过功能码告诉从机执行什么动作。
作为从机响应,从机发送的功能码与从主机发送来的功能码一样,并表明从机已响应主机进行操作。
如果从机发送的功能码的最高位为1(比如功能码大与此同时127),则表明从机没有响应操作或发送出错。
数据区:数据区是根据不同的功能码而不同。
数据区可以是实际数值、设置点、主机发送给从机或从机发送给主机的地址。
CRC码:二字节的错误检测码。
(二)、通讯规约:当通讯命令发送至仪器时,符合相应地址码的设备接通讯命令,并除去地址码,读取信息,如果没有出错,则执行相应的任务;然后把执行结果返送给发送者。
返送的信息中包括地址码、执行动作的功能码、执行动作后结果的数据以及错误校验码。
如果出错就不发送任何信息。
1.信息帧结构地址码功能码数据区错误校验码8位8位N × 8位16位地址码:地址码是信息帧的第一字节(8位),从0到255。
这个字节表明由用户设置地址的从机将接收由主机发送来的信息。
modbus通讯协议编程

modbus通讯协议编程Modbus通讯协议是一种常用的串行通信协议,用于在不同设备之间进行数据交换。
在进行Modbus通讯协议编程时,需要考虑以下几个方面:1. 选择合适的编程语言,根据你的需求和技术背景,选择适合的编程语言进行Modbus编程。
常见的选择包括C/C++、Python、Java等。
2. 确定通信方式,Modbus支持串行通信和以太网通信两种方式。
你需要确定使用哪种方式,并相应地选择合适的库或者API进行编程。
3. 选择合适的库或者API,根据你选择的编程语言和通信方式,选择适合的Modbus库或者API。
这些库通常提供了一些常用的函数和方法,用于建立连接、发送和接收数据等操作。
4. 建立连接,在编程中,首先需要建立与Modbus设备的连接。
这通常涉及到设定通信参数,如串口波特率、数据位、停止位等。
通过库或者API提供的函数或者方法,可以轻松地建立连接。
5. 发送和接收数据,一旦连接建立成功,就可以通过库或者API提供的函数或者方法发送和接收数据。
根据Modbus协议的规定,你需要构造合适的请求报文,并解析响应报文。
6. 错误处理,在Modbus通讯中,可能会出现一些错误,如通信超时、设备未响应等。
编程中需要考虑这些错误情况,并进行相应的处理,如重新发送请求或者提示错误信息。
7. 安全性考虑,在进行Modbus通讯协议编程时,需要考虑安全性问题。
可以采取一些安全措施,如使用加密算法对数据进行加密、限制访问权限等。
8. 测试和调试,在完成编程后,需要进行测试和调试,确保程序能够正常运行。
可以使用模拟器或者实际的Modbus设备进行测试,并检查数据的准确性和稳定性。
总结起来,Modbus通讯协议编程需要选择合适的编程语言和通信方式,选择适合的库或者API,建立连接,发送和接收数据,处理错误情况,考虑安全性问题,并进行测试和调试。
这些步骤都需要仔细考虑和实施,以确保编程的成功和稳定性。
Modbus 通讯协议编程

Modbus 通讯协议编程1. 概述本协议旨在定义Modbus通信协议的编程规范和标准格式,以确保在Modbus通信中的数据传输的一致性和可靠性。
该协议适用于Modbus通信协议的编程实现,包括Modbus主站和从站的开发。
2. 协议版本当前协议版本为1.0,协议版本号为V1.0。
3. 协议规范3.1 Modbus通信协议Modbus通信协议是一种串行通信协议,用于在Modbus从站和Modbus主站之间进行数据传输。
该协议定义了数据传输的格式和规则,包括数据帧的结构、寻址方式、功能码等。
3.2 数据帧结构Modbus通信协议使用帧结构进行数据传输。
数据帧由起始符、地址码、功能码、数据字段、校验码和结束符组成。
具体的数据帧结构如下:起始符 | 地址码 | 功能码 | 数据字段 | 校验码 | 结束符-------|--------|--------|---------|-------|-------1字节 | 1字节 | 1字节 | N字节 | 2字节 | 1字节3.3 寻址方式Modbus通信协议支持两种寻址方式:基于物理地址的寻址和基于逻辑地址的寻址。
基于物理地址的寻址使用从站的物理地址进行寻址,基于逻辑地址的寻址使用从站的逻辑地址进行寻址。
3.4 功能码Modbus通信协议定义了一系列功能码,用于标识数据传输的类型和操作。
常用的功能码包括读取线圈状态、读取输入状态、读取保持寄存器、读取输入寄存器、写单个线圈、写单个保持寄存器等。
4. 编程实现4.1 Modbus主站编程Modbus主站负责与从站进行通信,并发送请求命令和接收响应数据。
Modbus主站编程需要按照以下步骤进行:4.1.1 建立通信连接首先,建立与Modbus从站的通信连接。
通信连接可以通过串口、以太网等方式进行。
4.1.2 发送请求命令使用Modbus通信协议定义的功能码和数据格式,构建请求命令,并发送给从站。
请求命令中包括功能码、起始地址、数据长度等信息。
MODBUS通讯协议及编程

MODBUS通讯协议及编程MODBUS通讯协议是由Modicon(现在的施耐德电气公司)公司在1979年开发的,目的是为了实现其PLC(Programmable Logic Controller,可编程逻辑控制器)产品与外部设备之间的通信。
随着时间的推移,MODBUS已经成为了工业自动化领域中最常用的通信协议之一MODBUS通讯协议基于Master/Slave(主/从)架构,主要有三种传输方式:串行传输、串行ASCII以及串行RTU。
其中,串行传输方式使用RS-232或RS-485接口进行通信,而串行ASCII和串行RTU则使用标准的ASCII和二进制格式进行数据传输。
在实际的应用中,串行RTU是最常用的一种传输方式,因为它在数据传输速度和可靠性方面都具有良好的表现。
MODBUS通讯协议的编程接口有两种:MODBUSRTU/ASCII和MODBUSTCP/IP。
MODBUSRTU/ASCII是通过串行接口传输数据的方式,它使用的函数包括读写单个寄存器、读写多个寄存器等。
MODBUSTCP/IP是通过以太网传输数据的方式,它使用的函数与MODBUSRTU/ASCII相同,但是需要使用不同的协议栈来实现。
在MODBUS通讯协议的编程中,需要用到一些重要的概念,例如Slave ID、Function Code和Register Address等。
Slave ID是指设备的地址,用于识别通信的目标设备。
Function Code是指功能码,用于指定需要执行的操作,例如读取寄存器、写入寄存器等。
Register Address是指寄存器地址,用于指定需要读写的寄存器的位置。
在具体的编程实现中,可以使用各种编程语言来编写MODBUS通讯协议的程序。
例如C语言、Python等。
通过调用相应的MODBUS库函数,可以实现与MODBUS设备的通信。
在编程过程中,需要注意设置正确的串口参数、IP地址以及端口号等。
MODBUS通讯协议在工业自动化中有着广泛的应用。
Modbus 通讯协议编程

Modbus 通讯协议编程协议名称:Modbus通讯协议编程一、引言Modbus通讯协议是一种常用的工业自动化领域的通信协议,用于在不同设备之间进行数据传输和通信。
本文旨在详细介绍Modbus通讯协议的编程实现方法,包括协议的结构、数据格式、通信方式等内容。
二、协议结构Modbus通讯协议采用主从结构,其中主机负责发起通信请求,从机负责响应请求并提供数据。
通信过程中,主机发送请求帧给从机,从机收到请求后进行处理并返回响应帧给主机。
三、数据格式1. 请求帧格式请求帧由以下几个部分组成:- 从机地址:一个字节,用于指定从机的地址。
- 功能码:一个字节,用于指定请求的功能。
- 数据域:根据功能码的不同而变化,用于传输数据。
- CRC校验:两个字节,用于对前面部分进行校验。
2. 响应帧格式响应帧由以下几个部分组成:- 从机地址:一个字节,用于指定从机的地址。
- 功能码:一个字节,用于指定响应的功能。
- 数据域:根据功能码的不同而变化,用于传输数据。
- CRC校验:两个字节,用于对前面部分进行校验。
四、通信方式Modbus通讯协议支持两种通信方式:串行通信和以太网通信。
1. 串行通信串行通信使用RS-232或RS-485等物理接口进行数据传输。
通信过程中,主机通过串口将请求帧发送给从机,从机接收到请求后进行处理并返回响应帧给主机。
2. 以太网通信以太网通信使用TCP/IP协议栈进行数据传输。
通信过程中,主机通过以太网将请求帧发送给从机,从机接收到请求后进行处理并返回响应帧给主机。
五、编程实现在进行Modbus通讯协议编程时,可以使用现有的编程语言和库来实现。
以下是一个简单的示例,使用Python语言和pymodbus库来实现Modbus TCP通信。
```python# 导入所需库from pymodbus.client.sync import ModbusTcpClient# 创建Modbus TCP客户端client = ModbusTcpClient('127.0.0.1', port=502)# 连接到从机client.connect()# 发送读取保持寄存器的请求result = client.read_holding_registers(address=0, count=10, unit=1)# 处理响应数据if result.isError():print("读取失败")else:print("读取成功")print(result.registers)# 断开连接client.close()```六、总结本文详细介绍了Modbus通讯协议的编程实现方法,包括协议的结构、数据格式、通信方式等内容。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
MODBUS通讯协议及编程ModBus通讯协议分为RTU协议和ASCII协议,我公司的多种仪表都采用ModBus RTU通讯协议,如:CH2000智能电力监测仪、CH2000M电力参数采集模块、巡检表、数显表、光柱数显表等。
下面就ModBus RTU协议简要介绍如下:一、通讯协议(一)、通讯传送方式:通讯传送分为独立的信息头,和发送的编码数据。
以下的通讯传送方式定义也与MODBUS RTU通讯规约相兼容:编码8位二进制起始位1位数据位8位奇偶校验位1位(偶校验位)停止位1位错误校检CRC(冗余循环码)初始结构= ≥4字节的时间地址码= 1 字节功能码= 1 字节数据区= N 字节错误校检= 16位CRC码结束结构= ≥4字节的时间地址码:地址码为通讯传送的第一个字节。
这个字节表明由用户设定地址码的从机将接收由主机发送来的信息。
并且每个从机都有具有唯一的地址码,并且响应回送均以各自的地址码开始。
主机发送的地址码表明将发送到的从机地址,而从机发送的地址码表明回送的从机地址。
功能码:通讯传送的第二个字节。
ModBus通讯规约定义功能号为1到127。
本仪表只利用其中的一部分功能码。
作为主机请求发送,通过功能码告诉从机执行什么动作。
作为从机响应,从机发送的功能码与从主机发送来的功能码一样,并表明从机已响应主机进行操作。
如果从机发送的功能码的最高位为1(比如功能码大与此同时127),则表明从机没有响应操作或发送出错。
数据区:数据区是根据不同的功能码而不同。
数据区可以是实际数值、设置点、主机发送给从机或从机发送给主机的地址。
CRC码:二字节的错误检测码。
(二)、通讯规约:当通讯命令发送至仪器时,符合相应地址码的设备接通讯命令,并除去地址码,读取信息,如果没有出错,则执行相应的任务;然后把执行结果返送给发送者。
返送的信息中包括地址码、执行动作的功能码、执行动作后结果的数据以及错误校验码。
如果出错就不发送任何信息。
1.信息帧结构地址码功能码数据区错误校验码8位8位N ×8位16位地址码:地址码是信息帧的第一字节(8位),从0到255。
这个字节表明由用户设置地址的从机将接收由主机发送来的信息。
每个从机都必须有唯一的地址码,并且只有符合地址码的从机才能响应回送。
当从机回送信息时,相当的地址码表明该信息来自于何处。
功能码:主机发送的功能码告诉从机执行什么任务。
表1-1列出的功能码都有具体的含义及操作。
代码含义操作03 读取数据读取当前寄存器内一个或多个二进制值06 重置单一寄存器把设置的二进制值写入单一寄存器数据区:数据区包含需要从机执行什么动作或由从机采集的返送信息。
这些信息可以是数值、参考地址等等。
例如,功能码告诉从机读取寄存器的值,则数据区必需包含要读取寄存器的起始地址及读取长度。
对于不同的从机,地址和数据信息都不相同。
错误校验码:主机或从机可用校验码进行判别接收信息是否出错。
有时,由于电子噪声或其它一些干扰,信息在传输过程中会发生细微的变化,错误校验码保证了主机或从机对在传送过程中出错的信息不起作用。
这样增加了系统的安全和效率。
错误校验采用CRC-16校验方法。
注:信息帧的格式都基本相同:地址码、功能码、数据区和错误校验码。
2.错误校验冗余循环码(CRC)包含2个字节,即16位二进制。
CRC码由发送设备计算,放置于发送信息的尾部。
接收信息的设备再重新计算接收到信息的CRC码,比较计算得到的CRC码是否与接收到的相符,如果两者不相符,则表明出错。
CRC码的计算方法是,先预置16位寄存器全为1。
再逐步把每8位数据信息进行处理。
在进行CRC码计算时只用8位数据位,起始位及停止位,如有奇偶校验位的话也包括奇偶校验位,都不参与CRC码计算。
在计算CRC码时,8位数据与寄存器的数据相异或,得到的结果向低位移一字节,用0填补最高位。
再检查最低位,如果最低位为1,把寄存器的内容与预置数相异或,如果最低位为0,不进行异或运算。
这个过程一直重复8次。
第8次移位后,下一个8位再与现在寄存器的内容相相异或,这个过程与以上一样重复8次。
当所有的数据信息处理完后,最后寄存器的内容即为CRC码值。
CRC码中的数据发送、接收时低字节在前。
计算CRC码的步骤为:预置16位寄存器为十六进制FFFF(即全为1)。
称此寄存器为CRC寄存器;把第一个8位数据与16位CRC寄存器的低位相异或,把结果放于CRC寄存器;把寄存器的内容右移一位(朝低位),用0填补最高位,检查最低位;如果最低位为0:重复第3步(再次移位); 如果最低位为1:CRC寄存器与多项式A001(1010 0000 0000 0001)进行异或;重复步骤3和4,直到右移8次,这样整个8位数据全部进行了处理;重复步骤2到步骤5,进行下一个8位数据的处理;最后得到的CRC寄存器即为CRC码。
3.功能码03,读取点和返回值:仪表采用Modbus RTU通讯规约,利用通讯命令,可以进行读取点(“保持寄存器”) 或返回值(“输入寄存器” )的操作。
保持和输入寄存器都是16位(2字节)值,并且高位在前。
这样用于仪表的读取点和返回值都是2字节。
一次最多可读取寄存器数是60。
由于一些可编程控制器不用功能码03,所以功能码03被用作读取点和返回值。
从机响应的命令格式是从机地址、功能码、数据区及CRC码。
数据区中的寄存器数据都是每两个字节高字节在前。
4.功能码06,单点保存主机利用这条命令把单点数据保存到仪表的存储器。
从机也用这个功能码向主机返送信息。
二、编程举例下面是一个用VC编写的ModBus RTU通讯的例子(一)、通讯口设置DCB dcb;hCom=CreateFile( "COM1 ",GENERIC_READ|GENERIC_WRITE,0,NULL,OPEN_EXISTING,0,NULL);if(hCom==INV ALID_HANDLE_V ALUE) {MessageBox( "createfile error,error "); }BOOL error=SetupComm(hCom,1024,1024); if(!error)MessageBox( "setupcomm error "); error=GetCommState(hCom,&dcb);if(!error)MessageBox( "getcommstate,error "); dcb.BaudRate=2400;dcb.ByteSize=8;dcb.Parity=EVENPARITY;//NOPARITY; dcb.StopBits=ONESTOPBIT;error=SetCommState(hCom,&dcb);(二)、CRC校验码计算UINT crcvoid calccrc(BYTE crcbuf){BYTE i;crc=crc ^ crcbuf;for(i=0;i <8;i++){BYTE TT;TT=crc&1;crc=crc> > 1;crc=crc&0x7fff;if (TT==1)crc=crc^0xa001;crc=crc&0xffff;}}(三)、数据发送zxaddr=11;//读取地址为11的巡检表数据zxnum=10;//读取十个通道的数据writebuf2[0]=zxaddr;writebuf2[1]=3;writebuf2[2]=0;writebuf2[3]=0;writebuf2[4]=0;writebuf2[5]=zxnum;crc=0xffff;calccrc(writebuf2[0]);calccrc(writebuf2[1]);calccrc(writebuf2[2]);calccrc(writebuf2[3]);calccrc(writebuf2[4]);calccrc(writebuf2[5]);writebuf2[6]=crc & 0xff;writebuf2[7]=crc/0x100;WriteFile(hCom,writebuf2,8,&comnum,NULL);(四)、数据读取ReadFile(hCom,writebuf,5+zxnum*2,&comnum,NULL);//读取zxnum个通道数据可增加错误处理程序,如地址码错误、CRC码错误判断、通讯故障处理等。
另一篇相关的文章:一、Modbus 协议简介Modbus 协议是应用于电子控制器上的一种通用语言。
通过此协议,控制器相互之间、控制器经由网络(例如以太网)和其它设备之间可以通信。
它已经成为一通用工业标准。
有了它,不同厂商生产的控制设备可以连成工业网络,进行集中监控。
此协议定义了一个控制器能认识使用的消息结构,而不管它们是经过何种网络进行通信的。
它描述了一控制器请求访问其它设备的过程,如果回应来自其它设备的请求,以及怎样侦测错误并记录。
它制定了消息域格局和内容的公共格式。
当在一Modbus网络上通信时,此协议决定了每个控制器须要知道它们的设备地址,识别按地址发来的消息,决定要产生何种行动。
如果需要回应,控制器将生成反馈信息并用Modbus协议发出。
在其它网络上,包含了Modbus协议的消息转换为在此网络上使用的帧或包结构。
这种转换也扩展了根据具体的网络解决节地址、路由路径及错误检测的方法。
1、在Modbus网络上转输标准的Modbus口是使用一RS-232C兼容串行接口,它定义了连接口的针脚、电缆、信号位、传输波特率、奇偶校验。
控制器能直接或经由Modem组网。
控制器通信使用主—从技术,即仅一设备(主设备)能初始化传输(查询)。
其它设备(从设备)根据主设备查询提供的数据作出相应反应。
典型的主设备:主机和可编程仪表。
典型的从设备:可编程控制器。
主设备可单独和从设备通信,也能以广播方式和所有从设备通信。
如果单独通信,从设备返回一消息作为回应,如果是以广播方式查询的,则不作任何回应。
Modbus协议建立了主设备查询的格式:设备(或广播)地址、功能代码、所有要发送的数据、一错误检测域。
从设备回应消息也由Modbus协议构成,包括确认要行动的域、任何要返回的数据、和一错误检测域。
如果在消息接收过程中发生一错误,或从设备不能执行其命令,从设备将建立一错误消息并把它作为回应发送出去。
2、在其它类型网络上转输在其它网络上,控制器使用对等技术通信,故任何控制都能初始和其它控制器的通信。
这样在单独的通信过程中,控制器既可作为主设备也可作为从设备。
提供的多个内部通道可允许同时发生的传输进程。
在消息位,Modbus协议仍提供了主—从原则,尽管网络通信方法是“对等”。