Modbus是一种通信协议,最初是为工业自动化系统设计的,用于在不同设备之间进行数据交换和通信。Modbus通信协议广泛应用于工业控制领域,而功能码是Modbus协议中用来定义数据交换操作的。
线圈寄存器:可以类比为开关量,每个bit都对应一个信号的开关状态。所以一个字节可以同时控制8路的信号。比如控制外部8路io的高低。 线圈寄存器支持读也支持写,比如控制或者读取电磁阀的开关志状态。对应的功能码有:0x01 0x05 0x0f
离散输入寄存器:离散输入寄存器相当于线圈寄存器的只读模式,每个bit表示一个开关量,而他的开关量只能读取,不能够写入。只能通过外部设定改变输入状态,比如我可以读取外部按键的按下还是松开,但是控制不了按键。对应的功能码有:0x02
保持寄存器:寄存器的单位不再是bit而是两个byte,也就是可以存放具体的数据量的,并且是可读写的。比如我不到那可以读取传感器报警上限下限,也可以设置它的大小。对应的功能码有:0x03 0x06 0x10
输入寄存器:输入寄存器相当于保持寄存器的只读模式,也是只支持读而不能写。一个寄存器也是占据两个字节的空间。比如通过读取输入寄存器获取现在的模拟量采样值。对应的功能码有 0x04
读取功能码(0x04)
读取功能码(0x04)是Modbus02功能码中最常用的功能码之一,它用于从设备中读取数据。使用读取功能码(0x04)时,您需要指定要读取的寄存器地址和要读取的字节数,然后设备会返回指定地址的数据。
写入功能码(0x06)
写入功能码(0x06)用于向设备中写入数据。使用写入功能码(0x06)时,您需要指定要写入的寄存器地址和要写入的字节数,然后设备会将指定地址的数据写入设备中。
状态查询功能码(0x08)
状态查询功能码(0x08)用于查询设备的当前状态。使用状态查询功能码(0x08)时,您需要指定要查询的状态码,然后设备会返回指定状态码的当前值。
报文查询功能码(0x0A)
报文查询功能码(0x0A)用于查询设备的报文信息。使用报文查询功能码(0x0A)时,您需要指定要查询的报文码,然后设备会返回指定报文码的当前值。
状态控制功能码(0x0C)
状态控制功能码(0x0C)用于控制设备的状态。使用状态控制功能码(0x0C)时,您需要指定要控制的状态码,然后设备会将指定状态码的值更改为您指定的值。
报文控制功能码(0x0E)
报文控制功能码(0x0E)用于控制设备的报文信息。使用报文控制功能码(0x0E)时,您需要指定要控制的报文码,然后设备会将指定报文码的值更改为您指定的值。
Modbus协议在工业控制领域中的灵活性和实用性,为设备间的数据交换和控制操作提供了高效的解决方案。