Добавлена обработка запросов GAS и Error
This commit is contained in:
@@ -318,6 +318,9 @@ void CanRequestToDiscreteReset(struct RXMsg _rxMsg);
|
||||
void CanRequestToDiscreteChangeMode(struct RXMsg _rxMsg);
|
||||
void CanRequestToDiscreteRequestListOfParameters(struct RXMsg _rxMsg);
|
||||
|
||||
void REQUESTER_GeneralAddressSpace_Answer(struct RXMsg _rxMsg);
|
||||
HAL_StatusTypeDef CanRequestError(struct RXMsg _rxMsg);
|
||||
|
||||
CRR_Status REQUESTER_ModbusProcessing(struct RXMsg _rxMsg);
|
||||
HAL_StatusTypeDef CanRequestToModbusCoil(struct RXMsg _rxMsg);
|
||||
HAL_StatusTypeDef CanRequestToModbusDiscrete(struct RXMsg _rxMsg);
|
||||
|
||||
@@ -67,7 +67,7 @@ void REQUESTER_MainWhile(void)
|
||||
}
|
||||
else if(rxMsg[CurrentStep].eID.Fields.MsgType == DATA_TYPE_GENERAL_ADDRESS_SPACE)
|
||||
{
|
||||
|
||||
REQUESTER_GeneralAddressSpace_Answer(rxMsg[CurrentStep]);
|
||||
}
|
||||
else if(rxMsg[CurrentStep].eID.Fields.MsgType == DATA_TYPE_MODBUS_COIL ||
|
||||
rxMsg[CurrentStep].eID.Fields.MsgType == DATA_TYPE_MODBUS_DISCRETE ||
|
||||
@@ -76,6 +76,10 @@ void REQUESTER_MainWhile(void)
|
||||
{
|
||||
REQUESTER_ModbusProcessing(rxMsg[CurrentStep]);
|
||||
}
|
||||
else if(rxMsg[CurrentStep].eID.Fields.MsgType == DATA_TYPE_ERROR)
|
||||
{
|
||||
CanRequestError(rxMsg[CurrentStep]);
|
||||
}
|
||||
CurrentStep = (uint16_t)(CurrentStep + 1) % CAN_RX_BUFFER_SIZE;
|
||||
}
|
||||
}
|
||||
@@ -450,6 +454,34 @@ __weak void CanRequestToDiscreteRequestListOfParameters(struct RXMsg _rxMsg)
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
void REQUESTER_GeneralAddressSpace_Answer(struct RXMsg _rxMsg)
|
||||
{
|
||||
CAN_TxHeaderTypeDef TxHeader;
|
||||
uint32_t TxMailBox = 0;
|
||||
uint8_t data[8];
|
||||
TxHeader.IDE = CAN_ID_EXT;
|
||||
TxHeader.TransmitGlobalTime = DISABLE;
|
||||
TxHeader.RTR = CAN_RTR_DATA;
|
||||
extID tmp_eID;
|
||||
tmp_eID.BitAll = _rxMsg.eID.BitAll;
|
||||
tmp_eID.Fields.Route = ROUTE_SLAVE;
|
||||
TxHeader.ExtId = tmp_eID.BitAll;
|
||||
TxHeader.DLC = 8;
|
||||
data[0] = 'G';
|
||||
data[1] = 'A';
|
||||
data[2] = 'S';
|
||||
data[3] = '-';
|
||||
for(int i = 0; i < 4; i++) {
|
||||
unsigned sym = (_rxMsg.eID.Fields.Msg.Body>>(12-(i*4)))&0xF;
|
||||
if(sym >= 10)
|
||||
data[4+i] = sym%10+'A';
|
||||
else
|
||||
data[4+i] = sym+'0';
|
||||
}
|
||||
HAL_CAN_AddTxMessage(&_HCAN, &TxHeader, data, &TxMailBox);
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Функция обработки Modbus запросов.
|
||||
* @param struct RXMsg _rxMsg - структура для полученного сообщения.
|
||||
@@ -580,6 +612,26 @@ __weak HAL_StatusTypeDef CanRequestToModbusInput(struct RXMsg _rxMsg)
|
||||
return HAL_CAN_AddTxMessage(&_HCAN, &TxHeader, data, &TxMailBox);
|
||||
}
|
||||
|
||||
__weak HAL_StatusTypeDef CanRequestError(struct RXMsg _rxMsg)
|
||||
{
|
||||
CAN_TxHeaderTypeDef TxHeader;
|
||||
uint32_t TxMailBox = 0;
|
||||
uint8_t data[8];
|
||||
TxHeader.IDE = CAN_ID_EXT;
|
||||
TxHeader.TransmitGlobalTime = DISABLE;
|
||||
TxHeader.RTR = CAN_RTR_DATA;
|
||||
extID tmp_eID;
|
||||
tmp_eID.BitAll = _rxMsg.eID.BitAll;
|
||||
tmp_eID.Fields.Route = ROUTE_SLAVE;
|
||||
tmp_eID.Fields.MsgType = DATA_TYPE_ERROR;
|
||||
tmp_eID.Fields.Msg.Error.ErrorCode = 0xFF;
|
||||
tmp_eID.Fields.Msg.Error.Info = 0;
|
||||
TxHeader.ExtId = tmp_eID.BitAll;
|
||||
TxHeader.DLC = 0;
|
||||
return HAL_CAN_AddTxMessage(&_HCAN, &TxHeader, data, &TxMailBox);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @brief
|
||||
* @param extID tmp_eID
|
||||
|
||||
Reference in New Issue
Block a user