STM32 FREEMODBUS Master

0

Estoy utilizando la biblioteca FREEMODBUS para STM32 con HAL. Tengo una pregunta. Cómo enviar un marco a un dispositivo esclavo, por ejemplo, para leer el registro - > "ADR 03 00 05 00 CRCH CRCL?

Por ejemplo:

void ModbusInit() {

    eMBErrorCode eStatus = eMBInit(MB_RTU, 1, 3, 19200, MB_PAR_NONE);

    eStatus = eMBEnable();

}

while (1) {

        eMBPoll();  --> this provive to receive frames.
    }

Para enviar FRAME sin CRC uso

eMBRTUSend().

Pero estoy buscando una función en FREEMODBUS para enviar un cuadro como "ADR 03 00 05 00 CRCH CRCL". La función donde para el argumento solo pondré direcciones de esclavo, cuántos registros quiero leer y eso es todo.

Intenté usar:

    eMBFuncWriteHoldingRegister(tablica,&ucSlaveAddress );

pero no funciona ....

Ok, hice mi propio método:

eMBErrorCode SendFrame (uint8_t usAddress,
    uint16_t  regAdress, uint16_t regCount){
eMBErrorCode eStatus = MB_ENOERR;
    USHORT          usCRC16;
    uint8_t usSndBufferCount ;
    //  /* make up request frame */

        ucMBFrame[0] = 0x03;
        ucMBFrame[1] = regAdress>>8;
        ucMBFrame[2] = regAdress;
        ucMBFrame[3] = regCount>>8;
        ucMBFrame[4] = regCount;
        usSndBufferCount =4;

        /* Calculate CRC16 checksum for Modbus-Serial-Line-PDU. */
        usCRC16 = usMBCRC16( ( UCHAR * ) ucMBFrame, usSndBufferCount );
        ucMBFrame[5] = ( UCHAR )( usCRC16 & 0xFF );
        ucMBFrame[6] = ( UCHAR )( usCRC16 >> 8 );

        eMBRTUSend(usAddress,ucMBFrame,5);

    return eStatus;

}

    
pregunta r00ti

0 respuestas

Lea otras preguntas en las etiquetas