Modbus协议寄存器操作

Modbus简介以及NModbus学习分享 Modbus简介,以及用C#实现数据操作,包括读写(通过NModebus) 阅读详情

 

 

Modbus Registers

Modbus的寄存器

Detailed Description

详细描述

 #include "mb.h" 

The protocol stack does not internally allocate any memory for the registers. This makes the protocol stack very small and also usable on low end targets. In addition the values don't have to be in the memory and could for example be stored in a flash.
Whenever the protocol stack requires a value it calls one of the callback function with the register address and the number of registers to read as an argument. The application should then read the actual register values (for example the ADC voltage) and should store the result in the supplied buffer.
If the protocol stack wants to update a register value because a write register function was received a buffer with the new register values is passed to the callback function. The function should then use these values to update the application register values.

协议栈不在内部为寄存器分配空间。这就使得协议栈非常小并且适用于低端目标应用。并且Modbus寄存器的值不一定存储在内存中,而是可以存储在如flash之类的存储器中。当协议栈需要获取数值是,它通过调用回调函数来实现,该回调函数以寄存器地址和数量作为参数。应用程序将读实际的寄存器数值(如ADC电压),并且存储在特定的缓冲区中。

    如果协议栈收到了一个写寄存器命令,将会执行寄存器更新操作,一个包含新寄存器数值的缓冲区会传给回调函数。这个回调函数将用这些值来更新应用寄存器数值。

 

 

Functions功能函数

eMBErrorCode 

eMBRegInputCB (UCHAR *pucRegBuffer, USHORT usAddress, USHORT usNRegs)

输入寄存器回调函数

eMBErrorCode 

eMBRegHoldingCB (UCHAR *pucRegBuffer, USHORT usAddress, USHORT usNRegs, eMBRegisterMode eMode)

保持寄存器回调函数

eMBErrorCode 

eMBRegCoilsCB (UCHAR *pucRegBuffer, USHORT usAddress, USHORT usNCoils, eMBRegisterMode eMode)

线圈状态寄存器回调函数

eMBErrorCode 

eMBRegDiscreteCB (UCHAR *pucRegBuffer, USHORT usAddress, USHORT usNDiscrete)

离散寄存器回调函数


Function Documentation功能函数文档

eMBErrorCode

eMBRegCoilsCB

( 

UCHAR * 

pucRegBuffer,

 

 

USHORT 

usAddress,

 

 

USHORT 

usNCoils,

 

 

eMBRegisterMode 

eMode

 

) 

 

 

 

 

Callback function used if a Coil Register value is read or written by the protocol stack. If you are going to use this function you might use the functions xMBUtilSetBits( ) and xMBUtilGetBits( ) for working with bitfields.

如果协议栈需要对线圈状态寄存器进行读写,则需要调用回调函数。如果用户用到这个功能,用户可能用到xMBUtilSetBits( ) 和 xMBUtilGetBits( ) 来处理位域。

Parameters: 参数

 

pucRegBuffer 

The bits are packed in bytes where the first coil starting at address usAddress is stored in the LSB of the first byte in the buffer pucRegBuffer. If the buffer should be written by the callback function unused coil values (I.e. if not a multiple of eight coils is used) should be set to zero.

位组成一个字节,起始寄存器对应的位处于该字节pucRegBuffer的最低位LSB。如果回调函数要写这个缓冲区,没有用到的线圈(例如不是8个一组的线圈状态)对应的位的数值必须设置位0。

 

usAddress 

The first coil number.

第一个线圈地址

 

usNCoils 

Number of coil values requested.

请求的线圈个数

 

eMode 

If eMBRegisterMode::MB_REG_WRITE the application values should be updated from the values supplied in the buffer pucRegBuffer. If eMBRegisterMode::MB_REG_READ the application should store the current values in the buffer pucRegBuffer.

如果该参数为eMBRegisterMode::MB_REG_WRITE,用户的应用数值将从pucRegBuffer中得到更新。如果该参数为eMBRegisterMode::MB_REG_READ,用户需要将当前的应用数据存储在pucRegBuffer中。

Returns: 返回

The function must return one of the following error codes:

这个函数将返回如下的错误码:

·   eMBErrorCode::MB_ENOERR If no error occurred. In this case a normal Modbus response is sent.

eMBErrorCode::MB_ENOERR如果没有错误发生。在这种情况下,发送一个正常的Modbus应答。

·   eMBErrorCode::MB_ENOREG If the application does not map an coils within the requested address range. In this case a ILLEGAL DATA ADDRESS is sent as a response.

eMBErrorCode::MB_ENOREG如果请求的地址范围中没有线圈状态寄存器,在这种情况下,发送一个ILLEGAL DATA ADDRESS应答。

·   eMBErrorCode::MB_ETIMEDOUT If the requested register block is currently not available and the application dependent response timeout would be violated. In this case a SLAVE DEVICE BUSY exception is sent as a response.

eMBErrorCode::MB_ETIMEDOUT如果请求的寄存器区当前无效,并且应用相关的应当超时。这种情况下,发送一个SLAVE DEVICE BUSY应答。

·   eMBErrorCode::MB_EIO If an unrecoverable error occurred. In this case a SLAVE DEVICE FAILURE exception is sent as a response.

eMBErrorCode::MB_EIO

如果一个其他错误发生。在这种情况下,发送一个SLAVE DEVICE FAILURE应答。

Examples: 例子

AT91SAM7X_ROWLEY/demo.c, AVR/demo.c, LINUX/demo.c, MCF5235/demo.c, MCF5235TCP/demo.c, MSP430/demo.c, STR71X/simple2.c, STR71XTCP/demo.c, WIN32/demo.cpp, and WIN32TCP/demo.cpp.

 

eMBErrorCode eMBRegDiscreteCB

( 

UCHAR * 

pucRegBuffer,

 

 

USHORT 

usAddress,

 

 

USHORT 

usNDiscrete

 

) 

 

 

 

 

Callback function used if a Input Discrete Register value is read by the protocol stack.

If you are going to use his function you might use the functions xMBUtilSetBits( ) and xMBUtilGetBits( ) for working with bitfields.

Parameters:

 

pucRegBuffer 

The buffer should be updated with the current coil values. The first discrete input starting at usAddress must be stored at the LSB of the first byte in the buffer. If the requested number is not a multiple of eight the remaining bits should be set to zero.

用当前的线圈数据更新这个寄存器,起始寄存器对应的位处于该字节pucRegBuffer的最低位LSB。如果回调函数要写这个缓冲区,没有用到的线圈(例如不是8个一组的线圈状态)对应的位的数值必须设置为0。

 

usAddress 

The starting address of the first discrete input.

离散输入的起始地址

 

usNDiscrete 

Number of discrete input values.

离散输入点数量

Returns:

The function must return one of the following error codes:

这个函数将返回如下的错误码:

·   eMBErrorCode::MB_ENOERR If no error occurred. In this case a normal Modbus response is sent.

eMBErrorCode::MB_ENOERR如果没有错误发生。在这种情况下,发送一个正常的Modbus应答。

·   eMBErrorCode::MB_ENOREG If no such discrete inputs exists. In this case a ILLEGAL DATA ADDRESS exception frame is sent as a response.

eMBErrorCode::MB_ENOREG如果请求的地址范围中没有这种离散输入寄存器,在这种情况下,发送一个ILLEGAL DATA ADDRESS应答。

·   eMBErrorCode::MB_ETIMEDOUT If the requested register block is currently not available and the application dependent response timeout would be violated. In this case a SLAVE DEVICE BUSY exception is sent as a response.

eMBErrorCode::MB_ETIMEDOUT如果请求的寄存器区当前无效,并且应用相关的应当超时。这种情况下,发送一个SLAVE DEVICE BUSY应答。

·   eMBErrorCode::MB_EIO If an unrecoverable error occurred. In this case a SLAVE DEVICE FAILURE exception is sent as a response.

eMBErrorCode::MB_EIO如果一个其他错误发生。在这种情况下,发送一个SLAVE DEVICE FAILURE应答。

Examples:

AT91SAM7X_ROWLEY/demo.c, AVR/demo.c, LINUX/demo.c, MCF5235/demo.c, MCF5235TCP/demo.c, MSP430/demo.c, STR71X/simple2.c, STR71XTCP/demo.c, WIN32/demo.cpp, and WIN32TCP/demo.cpp.

 

eMBErrorCode eMBRegHoldingCB

( 

UCHAR * 

pucRegBuffer,

 

 

USHORT 

usAddress,

 

 

USHORT 

usNRegs,

 

 

eMBRegisterMode 

eMode

 

) 

 

 

 

 

Callback function used if a Holding Register value is read or written by the protocol stack. The starting register address is given by usAddress and the last register is given by usAddress + usNRegs - 1.

如果协议栈需要对保持寄存器数值进行读写,将用到这个回调函数。通过usAddress给出起始寄存器地址,最后一个寄存器地址通过usAddress + usNRegs – 1得到。

Parameters: 参数

 

pucRegBuffer 

If the application registers values should be updated the buffer points to the new registers values. If the protocol stack needs to now the current values the callback function should write them into this buffer.

如果需要更新用户寄存器数值,这个缓冲区必须指向新的寄存器数值。如果协议栈想知道当前的数值,回调函数必须将当前值写入这个缓冲区。

 

usAddress 

The starting address of the register.

寄存器起始地址

 

usNRegs 

Number of registers to read or write.

读写寄存器的数量

 

eMode 

If eMBRegisterMode::MB_REG_WRITE the application register values should be updated from the values in the buffer. For example this would be the case when the Modbus master has issued an WRITE SINGLE REGISTER command. If the value eMBRegisterMode::MB_REG_READ the application should copy the current values into the buffer pucRegBuffer.

如果该参数为eMBRegisterMode::MB_REG_WRITE,用户的应用数值将从pucRegBuffer中得到更新。如果该参数为eMBRegisterMode::MB_REG_READ,用户需要将当前的应用数据存储在pucRegBuffer中。

Returns:

The function must return one of the following error codes:

这个函数将返回如下的错误码:

·   eMBErrorCode::MB_ENOERR If no error occurred. In this case a normal Modbus response is sent.

eMBErrorCode::MB_ENOERR如果没有错误发生。在这种情况下,发送一个正常的Modbus应答。

·   eMBErrorCode::MB_ENOREG If the application can not supply values for registers within this range. In this case a ILLEGAL DATA ADDRESS exception frame is sent as a response.

eMBErrorCode::MB_ENOREG如果请求的地址范围中没有寄存器,在这种情况下,发送一个ILLEGAL DATA ADDRESS应答。

·   eMBErrorCode::MB_ETIMEDOUT If the requested register block is currently not available and the application dependent response timeout would be violated. In this case a SLAVE DEVICE BUSY exception is sent as a response.

eMBErrorCode::MB_ETIMEDOUT如果请求的寄存器区当前无效,并且应用相关的应当超时。这种情况下,发送一个SLAVE DEVICE BUSY应答。

·   eMBErrorCode::MB_EIO If an unrecoverable error occurred. In this case a SLAVE DEVICE FAILURE exception is sent as a response.

eMBErrorCode::MB_EIO如果一个其他错误发生。在这种情况下,发送一个SLAVE DEVICE FAILURE应答。

Examples:

AT91SAM7X_ROWLEY/demo.c, AVR/demo.c, LINUX/demo.c, MCF5235/demo.c, MCF5235TCP/demo.c, MSP430/demo.c, STR71X/simple2.c, STR71XTCP/demo.c, WIN32/demo.cpp, and WIN32TCP/demo.cpp.

 

eMBErrorCode eMBRegInputCB

( 

UCHAR * 

pucRegBuffer,

 

 

USHORT 

usAddress,

 

 

USHORT 

usNRegs

 

) 

 

 

 

 

Callback function used if the value of a Input Register is required by the protocol stack. The starting register address is given by usAddress and the last register is given by usAddress + usNRegs - 1.

如果协议栈需要对输入寄存器进行操作,需要用到这个回调函数。起始寄存器的地址由usAddress给出,最后一个寄存器的地址是usAddress + usNRegs – 1。

Parameters: 参数

 

pucRegBuffer 

A buffer where the callback function should write the current value of the modbus registers to.

回调函数将Modbus寄存器的当前值写入的缓冲区

 

usAddress 

The starting address of the register. Input registers are in the range 1 - 65535.

寄存器的起始地址,输入寄存器的地址范围是1!65535。

 

usNRegs 

Number of registers the callback function must supply.

寄存器数量

Returns: 返回

The function must return one of the following error codes:

这个函数将返回如下的错误码:

·   eMBErrorCode::MB_ENOERR If no error occurred. In this case a normal Modbus response is sent.

eMBErrorCode::MB_ENOERR如果没有错误发生。在这种情况下,发送一个正常的Modbus应答。

·   eMBErrorCode::MB_ENOREG If the application can not supply values for registers within this range. In this case a ILLEGAL DATA ADDRESS exception frame is sent as a response.

eMBErrorCode::MB_ENOREG如果请求的地址范围中没有寄存器,在这种情况下,发送一个ILLEGAL DATA ADDRESS应答。

·   eMBErrorCode::MB_ETIMEDOUT If the requested register block is currently not available and the application dependent response timeout would be violated. In this case a SLAVE DEVICE BUSY exception is sent as a response.

eMBErrorCode::MB_ETIMEDOUT如果请求的寄存器区当前无效,并且应用相关的应当超时。这种情况下,发送一个SLAVE DEVICE BUSY应答。

·   eMBErrorCode::MB_EIO If an unrecoverable error occurred. In this case a SLAVE DEVICE FAILURE exception is sent as a response.

eMBErrorCode::MB_EIO如果一个其他错误发生。在这种情况下,发送一个SLAVE DEVICE FAILURE应答。

Examples: 例子

AT91SAM7X_ROWLEY/demo.c, AVR/demo.c, LINUX/demo.c, MCF5235/demo.c, MCF5235TCP/demo.c, MSP430/demo.c, STR71X/simple2.c, STR71XTCP/demo.c, WIN32/demo.cpp, and WIN32TCP/demo.cpp.

FreeModbus源码详解 本篇按照FreeModbus协议栈的工作流程,对源代码进行总结解析;FreeModbus协议栈作为从机,等待主机传送的数据,当从机接收到一帧完整的报文后,对报文进行解析,然后响应主机,发送报文给主机,实现主机和从机之间的通信; 1:demo.c中三个函数,完成协议栈的准备工作; eMBInit()函数:(mb.c) /*函数功能: *1:实现RTU模式和ASCALL模式的协议栈初始化; *2 阅读详情

相关推荐

Modbus协议实战:如何正确解析和操作寄存器中的位与字节数据

本文深入探讨Modbus协议中寄存器数据的位与字节操作技巧,涵盖位操作、字节序处理、浮点数解析及高级位掩码应用。通过Python和C#代码示例,帮助开发者高效解析和操作Modbus寄存器数据,解决工业自动化中的常见数据处理问题。

onion的博客 510

一文彻底搞懂 Modbus 与自定义串口协议:寄存器、功能码、CRC、大端小端全面解析(超详细版)

摘要:本文系统讲解了Modbus协议与自定义协议的区别。Modbus作为工业标准协议,采用寄存器模型(16位)和固定帧结构(地址+功能码+数据区+CRC),核心功能码包括03/06/10。其特点是寄存器数据大端、CRC小端。相比之下,自定义协议由厂家随意定义,格式不统一。文章对比了两者的差异,分析了厂家坚持使用自定义协议的原因,并提供了判断协议类型的标准方法。Modbus具有标准化优势,而自定义协议则存在灵活性和历史兼容性等特点。

Mark Wu 的博客 1691

Modbus-RTU通讯协议

Modbus是工业常用的通讯协议,plc中应用较多,基本情况见下表。

m0_51984346的博客 2126

Modbus TCP/IP之异常响应

对于服务器(从站)来说,询问中收到的数据地址是不可允许的地址,即指定的数据地址在从站设备中不存在。比如:对带有100个寄存器的slave来说,带有起始地址96和读取数量4的请求会成功,但带有起始地址96和读取数量5的请求将产生异常码02。:poll和slave的配置如2.2中的操作,但把poll的quantity改回10,把poll第一个寄存器(编号0)显示设为有符整型,Signed;:poll和slave的配置如2.1中的操作,但把poll的功能码改为0x04,把quantity改为15。

yiyantangad的博客 1万+

java用modbus4j的RTU去操作那些寄存器(线圈,保持,输入,离散输入寄存器)

Modbus是一种通信协议,用于在工业控制系统之间传输数据。本篇博客将介绍如何使用Java中的modbus4j库来操作Modbus RTU协议下的不同类型的寄存器。读线圈寄存器是Modbus协议中的一种常用数据类型,用于表示开关量。如果您有任何问题或建议,请随时在评论区留言。写线圈寄存器与读线圈寄存器类似,用于控制开关量。保持寄存器用于存储数据,通常用于存储模拟量数据。写保持寄存器与读保持寄存器类似,用于存储数据。离散输入寄存器用于表示开关量输入。输入寄存器用于存储模拟量输入数据。

私聊前往站内信:https://i.youkuaiyun.com/#/msg/chat/weixin_44976692 2万+

掌握Modbus协议:C#实现与应用

Modbus是一种应用广泛的通信协议,在工业自动化领域被广泛采纳。最初由Modicon公司(现为施耐德电气的一个部门)在1979年开发,用以连接PLC(可编程逻辑控制器)和其他工业设备。随着时间的发展,Modbus成为了工业通信标准之一,并且经历了多个版本的改进。Modbus RTU(Remote Terminal Unit)模式是一种在串行通信中广泛使用的二进制协议。它采用主从架构,适用于多种物理层协议,比如RS-232、RS-485等。

weixin_29323977的博客 1624

Modbus协议缺陷(Modbus缺陷)(一次性可读取的寄存器数量有限、不支持寄存器位级写入操作)

总结:上述两个缺陷主要涉及到Modbus协议在处理大量数据和位级操作时的局限性。它们导致了通信效率低下、资源浪费和实现复杂度增加等问题。这些缺陷在一定程度上限制了Modbus协议在现代工业应用中的性能和灵活性。

Dontla的博客 2750

深入解析Modbus4J:Java中的Modbus协议库

Modbus协议库是实现Modbus通信协议的一种软件实现方式,它为Java程序员提供了一套简洁的API,使他们能够轻松地在项目中集成Modbus协议通信功能。这一章节我们从总体上概述了Java实现的Modbus协议库,并对它在工业自动化领域的应用进行了初步探讨。Modbus协议的功能码是用于指示通信双方执行具体操作的代码。功能码的使用是Modbus通信的核心,它允许主站请求从站执行各种任务,比如读取或写入数据到从站设备的寄存器中。

weixin_42613017的博客 1428

Modbus协议实战解析:从寄存器操作到工业应用

本文深入解析Modbus协议在工业自动化领域的实战应用,详细介绍了四种核心寄存器(线圈状态、离散输入、保持寄存器和输入寄存器)的操作方法及功能码使用技巧。通过实际数据包分析和典型故障排查案例,帮助工程师掌握Modbus通信协议的精髓,提升工业设备集成与通信可靠性。

k8s6orchestrator的博客 574

modbus TCP/IP 调试工具 Modbus Poll 和java 开发工具jar包

modbus TCP/IP 调试工具 Modbus Poll

OpenHarmony v4.1 Release设置应用随系统自动启动

OpenHarmony 4.1 版本中的 Ability Manager Service (AMS) 提供了应用自启动管理功能,允许系统控制哪些应用可以在系统启动时自动运行。这需要以下两个主要步骤:启用系统的自启动管理支持开发一个系统应用来管理自启动配置。

afufufufu的博客 1898

MODBUS RTU标准协议读写器寄存器操作说明

淘宝:https://item.taobao.com/item.htm?spm=a1z10.5-c.w4002-17663462238.17.73bce728T44duc&id=41901622939 IC-10MRW型MODBUS读写器适用S50、S70射频卡。 IC-10MRW型MODBUS读写器能通过MODBUS-RTU方式与PLC通信,MODBUS读写器为从站(出厂一般默认站号为2)、PLC为主站,通讯参数:波特率,N,8,1(出厂默认19200,波特率有4800,9600,1...

8797

b站up“麦辣翅翅”《YOLOv8修改损失函数》问题解决RuntimeError: The size of tensor a (4) must match the size of tensor

b站up“麦辣翅翅”《YOLOv8修改损失函数》问题解决RuntimeError: The size of tensor a (4) must match the size of tensor ;TypeError: bbox_iou() got an unexpected keyword argument 'xywh‘

weixin_68331871的博客 3020

modbus协议中的寄存器理解

modbus协议中的寄存器理解 对modbus中常用功能码寄存器的理解 最近有用到modbus协议,就把之前原来收集的资料全都拿出来又复习了一遍。发现以前了解的也忘了差不多了。所以这次理解了赶紧做个总结,省的下次再忘记了。 modbus完整支持很多功能码,但是实际在应用的时候常用的也就那么几个。具体如下: 0x01: 读线圈寄存器 0x02: 读离散输入寄存器 0x03: 读保持寄存器 ...

abc 2万+

抖音视频数据抓取

最近经常有人问我抓取抖音视频的数据,问我一些很小白的问题,算法给他也不会用。 还是先抓包,获取需要的接口和参数,相关的算法在其它文章里面有描述。 搜索个视频看看 查看抓的包信息: 可以看到,这里是post请求...

2501_91048859的博客 3097

别再为环保数采仪通讯发愁!手把手教你用MCGS触摸屏+4G模块发送HJ212报文

本文详细介绍了如何使用MCGS触摸屏配合4G模块高效发送HJ212标准报文,解决工业环保监测中的数据采集与传输难题。从硬件连接到软件配置,再到报文组装与发送策略,提供全流程实用指南,特别针对4G网络环境下的特殊设置给出优化建议,帮助工程师提升数据传输稳定性与效率。

weixin_30847865的博客 388

【Modbus】modbus中的线圈与寄存器的区别与联系

Modbus 协议中,线圈(Coils)和寄存器(Registers)是两种不同的数据类型,它们在功能和使用上有一些显著的区别和联系。

Fanjufei的博客 2982

1、Ovirt 开源虚拟化平台安装

Ovirt虚拟化Node和Engine安装

大鱼 6266

java modbus通讯协议_一、MODBUS通讯协议完整介绍(全文10000字以上)

1、引言1.1 范围MODBUS 是 OSI 模型第 7 层上的应用层报文传输协议,它在连接至不同类型总线或网络的设备之间提供客户机/服务器通信。自从 1979 年出现工业串行链路的事实标准以来,MODBUS 使成千上万的自动化设备能够通信。目前,继续增加对简单而雅观的 MODBUS 结构支持。互联网组织能够使 TCP/IP 栈上的保留系统端口502 访问 MODBUS。MODBUS 是一个请求/...

weixin_39541121的博客 1676

安装matlab_Matlab+yalmip+cplex安装教程及算例

数学建模/科研学习推荐学习软件:Matlab+yalmip+cplex安装教程及算例其实绝大多数本科生都是在用Matlab和LINGO求解优化问题,Matlab可以求解一般优化问题,但是当优化问题规模比较大或者在应对一些非线性问题时候,Matlab会出现求解时间长,求解效率低,甚至难以求解等问题。Matlab+yalmip+cplex是Matlab通过调用商业软件cplex求解,求解时间短,这里简...

weixin_28939637的博客 5005

【专栏导引贴】100+智能优化算法:从背景原理到代码实战(持续更新)

本专栏系统整理100+种现代优化算法,涵盖粒子群优化(PSO)、遗传算法(GA)、鲸鱼优化(WOA)等经典方法,以及白鲸优化(BWO)、非洲秃鹫优化(AVOA)等新兴算法。每篇详解包含生物启发原理、数学模型、代码实现及工程应用,采用统一编程风格,提供可直接运行的实例代码。专栏持续更新,旨在为研究者提供系统化的智能优化算法参考资料,实现从理论到实践的完整知识链。目前已收录23种算法,包括蚁群系统(ACS)、蝙蝠算法(BA)、天牛须搜索(BAS)等自然启发式优化方法。

qq_42212808的博客 3646

MODBUS协议整理——功能码简述

  【MODBUS协议整理——汇总】   1.MODBUS功能码简述     下表列出MODBUS支持的部分功能代码:以十进制表示。 表1.1 MODBUS部分功能码 代码 中文名称 寄存器PLC地址 位操作/字操作 操作数量 01 读线圈状态 ...

物联网 IoT 经验分享 5万+

Python爬虫实战:高效爬取中国版权登记数据

本文将详细介绍如何使用Python最新技术栈构建一个高效、稳定的中国版权登记数据爬虫系统。我们将使用Playwright+Asyncio实现无头浏览器自动化,结合Redis分布式任务队列和MongoDB数据存储,打造一个能够应对反爬机制的企业级数据采集方案。文章包含完整代码实现、性能优化技巧以及法律合规建议,帮助开发者快速掌握大规模数据采集的核心技术。本文详细介绍了2024年使用Python最新技术栈构建中国版权登记数据爬虫的完整方案。基于Playwright的无头浏览器自动化。

2201_76125261的博客 1898

modbus功能码_modbus功能码

1、功能码说明功能码可以分为位操作和字操作两类。位操作的最小单位为BIT,字操作的最小单位为两个字节。位操作包指令包括,读线圈状态01H,读(离散)输入状态02H,写单个线圈06H和写多个线圈0FH。字操作指令包括:读保持寄存器03H,写单个寄存器06H,写多个保持寄存器10H。2、寄存器地址分配3、 MODBUS寄存器种类说明线圈寄存器:实际上就可以类比为开关量,每个bit都对应一个信...

weixin_39714015的博客 731

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

MODBUS RTU/TCP协议及常用功能码详解

一、简介 ModBus是Modicon公司为其PLC通讯而开发的一种通讯协议。如今Modicon公司已经被施耐德收购成为了施耐德旗下品牌。从1979年问世至今,已经成为工业通讯领域的业界标准。 ModBus具有两种串行传输模式,ASCII 和 RTU。它们定义了数据如何打包、解码的不同方式。支持 Modbus 协议的设备一般都支持 RTU 格式。通信双方必须同时支持上述模式中的一种。 MODBUS寄存器分类 寄存器种类 读写状态 数据类型 功能码 PLC地址 线圈寄存器 读/写 位(bit)

qq_43254236的博客 4万+

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

上一篇: 模块-modbus模块
下一篇: Modbus 协议配置
control_tech
博客等级 码龄17年 53粉丝 32原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值