Базово всё запущено. Датчики считываются записываются в модбас регистры, и по запросу выдаются.
Есть запас на 27-30 датчиков
This commit is contained in:
@@ -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 */
|
||||
{
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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
|
||||
* @}
|
||||
|
||||
Reference in New Issue
Block a user