Добавлена обработка запросов GAS и Error
This commit is contained in:
@@ -318,6 +318,9 @@ void CanRequestToDiscreteReset(struct RXMsg _rxMsg);
|
|||||||
void CanRequestToDiscreteChangeMode(struct RXMsg _rxMsg);
|
void CanRequestToDiscreteChangeMode(struct RXMsg _rxMsg);
|
||||||
void CanRequestToDiscreteRequestListOfParameters(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);
|
CRR_Status REQUESTER_ModbusProcessing(struct RXMsg _rxMsg);
|
||||||
HAL_StatusTypeDef CanRequestToModbusCoil(struct RXMsg _rxMsg);
|
HAL_StatusTypeDef CanRequestToModbusCoil(struct RXMsg _rxMsg);
|
||||||
HAL_StatusTypeDef CanRequestToModbusDiscrete(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)
|
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 ||
|
else if(rxMsg[CurrentStep].eID.Fields.MsgType == DATA_TYPE_MODBUS_COIL ||
|
||||||
rxMsg[CurrentStep].eID.Fields.MsgType == DATA_TYPE_MODBUS_DISCRETE ||
|
rxMsg[CurrentStep].eID.Fields.MsgType == DATA_TYPE_MODBUS_DISCRETE ||
|
||||||
@@ -76,6 +76,10 @@ void REQUESTER_MainWhile(void)
|
|||||||
{
|
{
|
||||||
REQUESTER_ModbusProcessing(rxMsg[CurrentStep]);
|
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;
|
CurrentStep = (uint16_t)(CurrentStep + 1) % CAN_RX_BUFFER_SIZE;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -450,6 +454,34 @@ __weak void CanRequestToDiscreteRequestListOfParameters(struct RXMsg _rxMsg)
|
|||||||
return;
|
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 запросов.
|
* @brief Функция обработки Modbus запросов.
|
||||||
* @param struct RXMsg _rxMsg - структура для полученного сообщения.
|
* @param struct RXMsg _rxMsg - структура для полученного сообщения.
|
||||||
@@ -580,6 +612,26 @@ __weak HAL_StatusTypeDef CanRequestToModbusInput(struct RXMsg _rxMsg)
|
|||||||
return HAL_CAN_AddTxMessage(&_HCAN, &TxHeader, data, &TxMailBox);
|
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
|
* @brief
|
||||||
* @param extID tmp_eID
|
* @param extID tmp_eID
|
||||||
|
|||||||
Reference in New Issue
Block a user