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;
}