gpt4 book ai didi

c++ - freemodbus eMBRegCoilsCB 函数体示例

转载 作者:太空宇宙 更新时间:2023-11-04 08:09:54 25 4
gpt4 key购买 nike

谁能解释一下如何在 eMBRegCoilsCB()?我正在使用 freemodbus 作为 modbus rtu 从属驱动程序。

我无法添加我的代码,因为它太大了,但您可以在演示中看到示例(下面的链接)。在所有示例中 eMBRegCoilsCB() 未填充。

eMBErrorCode
eMBRegCoilsCB( UCHAR * pucRegBuffer, USHORT usAddress, USHORT usNCoils, eMBRegisterMode eMode )
{
return MB_ENOREG;
}

eMBErrorCode
eMBRegDiscreteCB( UCHAR * pucRegBuffer, USHORT usAddress, USHORT usNDiscrete )
{
return MB_ENOREG;
}

编辑

如果尝试写入 (0x15) 偏移量 > 0 的一些位,我的代码将无法正常工作

if ( ( usAddress >= REG_COILS_START )
&& ( usAddress + usNCoils <= REG_COILS_START + REG_COILS_NREGS ) )
{
iRegIndex = ( int ) ( usAddress - usRegCoilsStart );

switch ( eMode )
{
case MB_REG_READ:
{
while ( usNCoils > 0 )
{
UCHAR ucResult = xMBUtilGetBits( usRegCoilsBuf, iRegIndex, 1 );

xMBUtilSetBits( pucRegBuffer, iRegIndex, 1, ucResult );

iRegIndex++;
usNCoils--;
}

break;
}

case MB_REG_WRITE:
{
while ( usNCoils > 0 )
{
UCHAR ucResult = xMBUtilGetBits( pucRegBuffer, iRegIndex, 1 );

xMBUtilSetBits( usRegCoilsBuf, iRegIndex, 1, ucResult );

iRegIndex++;
usNCoils--;
}

break;
}
}
}
else
{
eStatus = MB_ENOREG;
}

链接

  1. freemodbus

最佳答案

试试这个。我做了 REG_COILS_START = 0,以简化地址魔术。但即使在阅读和写作时偏移>0,它也对我有用。

uint8_t modbus_CS[10];
#define TABLE_CS_SIZE ( sizeof(modbus_CS) * sizeof(modbus_CS[0]) )

eMBErrorCode eMBRegCoilsCB(UCHAR * pucRegBuffer, USHORT usAddress,
USHORT usNCoils, eMBRegisterMode eMode)
{
usAddress -= 1; /* to c-style address */

/* check if we away of table size */
if (usAddress + usNCoils > TABLE_CS_SIZE) {
return MB_ENOREG;
}

switch (eMode)
{
case MB_REG_WRITE:
for (int i = 0; i < usNCoils; i++) {
UCHAR wbit = xMBUtilGetBits(pucRegBuffer, i, 1 );
xMBUtilSetBits( modbus_CS, usAddress+i, 1, wbit );
}
break;
case MB_REG_READ:
for (int i = 0; i < usNCoils; i++) {
UCHAR rbit = xMBUtilGetBits( modbus_CS, usAddress+i, 1 );
xMBUtilSetBits( pucRegBuffer, i, 1, rbit );
}
break;
}

return MB_ENOERR;
}

关于c++ - freemodbus eMBRegCoilsCB 函数体示例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40239270/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com