Базово всё запущено. Датчики считываются записываются в модбас регистры, и по запросу выдаются.

Есть запас на 27-30 датчиков
This commit is contained in:
2025-03-03 16:49:25 +03:00
parent b96e00b166
commit 324c26e559
15 changed files with 191 additions and 176 deletions

View File

@@ -8,10 +8,6 @@ uint32_t CRC_ref;
//uint16_t CRC_ref;
// left this global for debug
uint8_t uchCRCHi = 0xFF;
uint8_t uchCRCLo = 0xFF;
unsigned uIndex;
/*Table of CRC values for high order byte*/
const unsigned char auchCRCHi[]=
@@ -55,8 +51,9 @@ const char auchCRCLo[] =
};
uint16_t crc16(uint8_t *data, uint32_t data_size)
{
uchCRCHi = 0xFF;
uchCRCLo = 0xFF;
uint8_t uchCRCHi = 0xFF;
uint8_t uchCRCLo = 0xFF;
unsigned uIndex;
/* CRC Generation Function */
while( data_size--) /* pass through message buffer */
{

View File

@@ -130,6 +130,7 @@ void MODBUS_FirstInit(void)
hmodbus1.ID = MODBUS_DEVICE_ID;
hmodbus1.sRS_Mode = SLAVE_ALWAYS_WAIT;
hmodbus1.sRS_RX_Size_Mode = RS_RX_Size_NotConst;
hmodbus1.sRS_Timeout = 1;
// INIT
#ifdef INCLUDE_GENERAL_PERIPH_LIBS
@@ -263,8 +264,8 @@ MB_ExceptionTypeDef MB_DefineRegistersAddress(uint16_t **pRegs, uint16_t Addr, u
if(RegisterType == RegisterType_Holding)
{
// Устаки для тестера
if(MB_Check_Address_For_Arr(Addr, Qnt, R_SETTINGS_ADDR, R_SETTINGS_QNT) == NO_ERRORS)
// Параметры для инициализации датчика
if(MB_Check_Address_For_Arr(Addr, Qnt, R_SENS_INIT_ADDR, R_SENS_INIT_QNT) == NO_ERRORS)
{
*pRegs = MB_Set_Register_Ptr(&MB_DATA.HoldRegs, Addr); // начало регистров хранения/входных
}
@@ -276,8 +277,13 @@ MB_ExceptionTypeDef MB_DefineRegistersAddress(uint16_t **pRegs, uint16_t Addr, u
}
else if(RegisterType == RegisterType_Input)
{
// Измеренные параметры диода
if(MB_Check_Address_For_Arr(Addr, Qnt, R_MEASURED_ADDR, R_MEASURED_QNT) == NO_ERRORS)
// Измеренные температуры
if(MB_Check_Address_For_Arr(Addr, Qnt, R_TEMPERATURE_ADDR, R_TEMPERATURE_QNT) == NO_ERRORS)
{
*pRegs = MB_Set_Register_Ptr(&MB_DATA.InRegs, Addr); // начало регистров хранения/входных
}
// Параметры датчика
else if(MB_Check_Address_For_Arr(Addr, Qnt, R_SENS_PARAMS_ADDR, R_SENS_PARAMS_QNT) == NO_ERRORS)
{
*pRegs = MB_Set_Register_Ptr(&MB_DATA.InRegs, Addr); // начало регистров хранения/входных
}
@@ -314,11 +320,12 @@ MB_ExceptionTypeDef MB_DefineCoilsAddress(uint16_t **pCoils, uint16_t Addr, uint
return ILLEGAL_DATA_VALUE; // return exception code
}
// tester settings coils
if(MB_Check_Address_For_Arr(Addr, Qnt, C_SETTINGS_ADDR, C_SETTINGS_QNT) == NO_ERRORS)
// Флаги всей шины датчиков
if(MB_Check_Address_For_Arr(Addr, Qnt, C_FLAGS_ADDR, C_FLAGS_QNT) == NO_ERRORS)
{
*pCoils = MB_Set_Coil_Reg_Ptr(&MB_DATA.Coils, Addr);
}// tester control coils
}
// Управление датчиками
else if(MB_Check_Address_For_Arr(Addr, Qnt, C_CONTROL_ADDR, C_CONTROL_QNT) == NO_ERRORS)
{
*pCoils = MB_Set_Coil_Reg_Ptr(&MB_DATA.Coils, Addr);

View File

@@ -31,15 +31,29 @@
@endverbatim
* @{
*/
//typedef struct
//{
// uint16_t ROM[4];
// uint16_t Location;
// uint16_t Resolution;
// uint16_t Losted;
//}MB_SensorResponseTypeDef;
typedef struct
{
uint16_t Location;
uint16_t ROM[4];
uint16_t Resolution;
uint16_t Enable;
}MB_SensorParamsTypeDef;
/**
* @brief Регистры хранения
*/
typedef struct //MB_DataInRegsTypeDef
{
uint16_t SensTemperature[DS18B20_DEVICE_AMOUNT];
uint16_t Resolution;
uint16_t SensTemperature[DS18B20_DEVICE_AMOUNT];
MB_SensorParamsTypeDef Response;
}MB_DataInRegsTypeDef;
@@ -48,27 +62,19 @@ typedef struct //MB_DataInRegsTypeDef
*/
typedef struct //MB_DataInRegsTypeDef
{
uint16_t TimeForForward;
uint16_t TimeForReverse;
uint16_t TimeBeforeTest;
uint16_t TimeDeadtime;
uint16_t TimeBeforePeak;
uint16_t Adc_PulseWidth;
uint16_t Adc_PulseSign;
uint16_t Adc_CalibrValue;
uint16_t Adc_ZeroValue;
uint16_t Adc_U_Calibr;
MB_SensorParamsTypeDef InitStruct;
}MB_DataHoldRegsTypeDef;
// DEFINES FOR INPUT REGISTERS ARRAYS
#define R_MEASURED_ADDR 0
#define R_MEASURED_QNT 2
#define R_TEMPERATURE_ADDR (0)
#define R_TEMPERATURE_QNT (DS18B20_DEVICE_AMOUNT)
#define R_SENS_PARAMS_ADDR (DS18B20_DEVICE_AMOUNT+1)
#define R_SENS_PARAMS_QNT (sizeof(MB_SensorParamsTypeDef)/sizeof(uint16_t))
// DEFINES FOR HOLDING REGISTERS ARRAYS
#define R_SETTINGS_ADDR 0
#define R_SETTINGS_QNT 10
#define R_SENS_INIT_ADDR (0)
#define R_SENS_INIT_QNT (sizeof(MB_SensorParamsTypeDef)/sizeof(uint16_t))
// DEFINES FOR REGISTERS LOCAL ADDRESSES
@@ -102,31 +108,23 @@ typedef struct //MB_DataInRegsTypeDef
typedef struct //MB_DataCoilsTypeDef
{
/* reg 1 - control */
unsigned ForwardTest:1;
unsigned ReverseTest:1;
unsigned StartTest:1;
unsigned KeyForwardHiTest:1;
unsigned KeyForwardLoTest:1;
unsigned KeyReverseHiTest:1;
unsigned KeyReverseLoTest:1;
unsigned RunConvertions:1;
unsigned InitSensor:1;
unsigned DenitSensor:1;
unsigned reserved:9;
unsigned reserved:13;
/* reg 2 - settings */
unsigned msTimeForForward_enable:1;
unsigned msTimeForReverse_enable:1;
unsigned msTimeBeforeTest_enable:1;
unsigned msTimeDeadtime_enable:1;
unsigned msTimeBeforePeak_enable:1;
unsigned reserved2:11;
unsigned ConvertionDone:1;
unsigned LostedSensors:1;
}MB_DataCoilsTypeDef;
// DEFINES FOR COIL ARRAYS
#define C_CONTROL_ADDR 0
#define C_CONTROL_QNT 7
#define C_CONTROL_QNT 3
#define C_SETTINGS_ADDR 16
#define C_SETTINGS_QNT 5
#define C_FLAGS_ADDR 16
#define C_FLAGS_QNT 5
/** MODBUS_DATA_COILS_DEFINES
* @}