193 lines
		
	
	
		
			8.2 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			193 lines
		
	
	
		
			8.2 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| /**
 | |
|  * @file	   processBoard.c
 | |
|  *
 | |
|  * @copyright  Nehemis SARL reserves all rights even in the event of industrial
 | |
|  *             property rights. We reserve all rights of disposal such as
 | |
|  *             copying and passing on to third parties.
 | |
|  *
 | |
|  * @brief	   This file provides the firmware for running the Production unit board.
 | |
|  *
 | |
|  */
 | |
| 
 | |
| /******************************************************************************
 | |
|  * Include Header Files
 | |
|  ******************************************************************************/
 | |
| #include "processBoard.h"
 | |
| #include "flowmeter.h"
 | |
| #include "pressureSensor.h"
 | |
| #include "od_entries.h"
 | |
| #include "co_odaccess.h"
 | |
| /******************************************************************************
 | |
|  * Type  declarations
 | |
|  ******************************************************************************/
 | |
| 
 | |
| /******************************************************************************
 | |
|  * Macro Constant Declarations
 | |
|  ******************************************************************************/
 | |
| #define  PROCESS_BOARD_VALVE_POS_INDEX				0x6002
 | |
| #define  PROCESS_BOARD_VALVE_FLOW_INDEX				0x6006
 | |
| #define  PROCESS_BOARD_VALVE_PRESSURE_INDEX			0x6001
 | |
| 
 | |
| #define  PROCESS_BOARD_VALVE_SUB_INDEX				0x0
 | |
| 
 | |
| #define  PROCESS_BOARD_FLOWMETER_ADC_MODULE			&hadc1
 | |
| #define  PROCESS_BOARD_PRESSURE_SENSOR_ADC_MODULE	&hadc1
 | |
| /******************************************************************************
 | |
|  * Global variables
 | |
|  ******************************************************************************/
 | |
| static volatile uint8 motorCmd_gu8;
 | |
| static volatile float32 flow_gf32 		= 0.0f;
 | |
| static volatile float32 pressure_gf32 	= 0.0f;
 | |
| 
 | |
| FlowmeterMain_st flowmeterFM1_gst;
 | |
| FlowmeterMain_st flowmeterFM2_gst;
 | |
| FlowmeterMain_st flowmeterFM3_gst;
 | |
| FlowmeterMain_st flowmeterFM4_gst;
 | |
| 
 | |
| PressureSensorMain_st pressureSensorPS1_gst;
 | |
| PressureSensorMain_st pressureSensorPS2_gst;
 | |
| PressureSensorMain_st pressureSensorPS3_gst;
 | |
| PressureSensorMain_st pressureSensorPS4_gst;
 | |
| 
 | |
| ProcessBoardCondDataSt condBoard1_gst;
 | |
| ProcessBoardCondDataSt condBoard2_gst;
 | |
| ProcessBoardCondDataSt condBoard3_gst;
 | |
| 
 | |
| ProcessBoardMvDataSt mvBoard1_gst;
 | |
| ProcessBoardMvDataSt mvBoard2_gst;
 | |
| ProcessBoardMvDataSt mvBoard3_gst;
 | |
| ProcessBoardMvDataSt mvBoard4_gst;
 | |
| ProcessBoardMvDataSt mvBoard5_gst;
 | |
| ProcessBoardMvDataSt mvBoard6_gst;
 | |
| ProcessBoardMvDataSt mvBoard7_gst;
 | |
| ProcessBoardMvDataSt mvBoard8_gst;
 | |
| 
 | |
| /******************************************************************************
 | |
|  * Private Function Declarations
 | |
|  ******************************************************************************/
 | |
| static void ProcessBoardTriggerMvPosCtrl(uint8 motorId_u8, uint8 posData_u8);
 | |
| static void ProcessBoardTriggerMvCartCtrl(uint8 motorId_u8, uint8 flowRate_u8, uint8 pressure_u8);
 | |
| static void ProcessBoardReadCondDataIN(void);
 | |
| static void ProcessBoardWriteCondDataOUT(void);
 | |
| static void ProcessBoardReadMvDataIN(void);
 | |
| static void ProcessBoardFlowmeterDataOUT(FlowmeterMain_st flowmeter_st);
 | |
| static void ProcessBoardPressureSensorDataOUT(PressureSensorMain_st pressureSensor_st);
 | |
| 
 | |
| /******************************************************************************
 | |
|  * Extern Function Declarations
 | |
|  ******************************************************************************/
 | |
| void ProcessBoardInit(void)
 | |
| {
 | |
| 	motorCmd_gu8 = 0u;
 | |
| 
 | |
| 	FlowmeterInit(&flowmeterFM1_gst, PROCESS_BOARD_FLOWMETER_ADC_MODULE, FLOWMETER_FM1_ADC_CHANNEL);
 | |
| 	PressureSensorInit(&pressureSensorPS1_gst, PROCESS_BOARD_PRESSURE_SENSOR_ADC_MODULE, PRESSURE_SENSOR_PS1_ADC_CHANNEL);
 | |
| 
 | |
| 	FlowmeterInit(&flowmeterFM2_gst, PROCESS_BOARD_FLOWMETER_ADC_MODULE, FLOWMETER_FM2_ADC_CHANNEL);
 | |
| 	PressureSensorInit(&pressureSensorPS2_gst, PROCESS_BOARD_PRESSURE_SENSOR_ADC_MODULE, PRESSURE_SENSOR_PS2_ADC_CHANNEL);
 | |
| 
 | |
| 	FlowmeterInit(&flowmeterFM3_gst, PROCESS_BOARD_FLOWMETER_ADC_MODULE, FLOWMETER_FM3_ADC_CHANNEL);
 | |
| 	PressureSensorInit(&pressureSensorPS3_gst, PROCESS_BOARD_PRESSURE_SENSOR_ADC_MODULE, PRESSURE_SENSOR_PS3_ADC_CHANNEL);
 | |
| 
 | |
| 	FlowmeterInit(&flowmeterFM4_gst, PROCESS_BOARD_FLOWMETER_ADC_MODULE, FLOWMETER_FM4_ADC_CHANNEL);
 | |
| 	PressureSensorInit(&pressureSensorPS4_gst, PROCESS_BOARD_PRESSURE_SENSOR_ADC_MODULE, PRESSURE_SENSOR_PS4_ADC_CHANNEL);
 | |
| 
 | |
| }
 | |
| 
 | |
| 
 | |
| void ProcessBoardRun(void)
 | |
| {
 | |
| 	uint8 id_u8;
 | |
| 	uint8 motorCmd_u8;
 | |
| 	uint8 posData_u8;
 | |
| 	uint8 flowRate_u8;
 | |
| 	uint8 pressure_u8;
 | |
| 
 | |
| 	coOdGetObj_u8(OD_ENTRY_PU_MOTOR_CTRL_INDEX, OD_ENTRY_PU_MOTOR_CTRL_ID_SUB_INDEX, &id_u8);
 | |
| 	coOdGetObj_u8(OD_ENTRY_PU_MOTOR_CTRL_INDEX, OD_ENTRY_PU_MOTOR_CTRL_CMD_SUB_INDEX, &motorCmd_u8);
 | |
| 	coOdGetObj_u8(OD_ENTRY_PU_MOTOR_CTRL_INDEX, OD_ENTRY_PU_MOTOR_CTRL_POS_SUB_INDEX, &posData_u8);
 | |
| 	coOdGetObj_u8(OD_ENTRY_PU_MOTOR_CTRL_INDEX, OD_ENTRY_PU_MOTOR_CTRL_PRESSURE_SUB_INDEX, &flowRate_u8);
 | |
| 	coOdGetObj_u8(OD_ENTRY_PU_MOTOR_CTRL_INDEX, OD_ENTRY_PU_MOTOR_CTRL_FLOW_SUB_INDEX, &pressure_u8);
 | |
| 
 | |
| 	if(motorCmd_u8 == 1u)
 | |
| 	{
 | |
| 		ProcessBoardTriggerMvPosCtrl(11, posData_u8);
 | |
| 	}
 | |
| 	else
 | |
| 	{
 | |
| 		ProcessBoardTriggerMvCartCtrl(id_u8, flowRate_u8, pressure_u8);
 | |
| 	}
 | |
| 
 | |
| 	FlowmeterGetFlow(&flowmeterFM4_gst);
 | |
| 	PressureSensorGetVal(&pressureSensorPS1_gst);
 | |
| 	ProcessBoardFlowmeterDataOUT(flowmeterFM4_gst);
 | |
| 	ProcessBoardPressureSensorDataOUT(pressureSensorPS1_gst);
 | |
| 	ProcessBoardReadCondDataIN();
 | |
| 	ProcessBoardWriteCondDataOUT();
 | |
| }
 | |
| 
 | |
| 
 | |
| /******************************************************************************
 | |
|  * Private function definitions
 | |
|  ******************************************************************************/
 | |
| static void ProcessBoardTriggerMvPosCtrl(uint8 motorId_u8, uint8 posData_u8)
 | |
| {
 | |
| 
 | |
| }
 | |
| 
 | |
| 
 | |
| static void ProcessBoardTriggerMvCartCtrl(uint8 motorId_u8, uint8 flowRate_u8, uint8 pressure_u8)
 | |
| {
 | |
| 
 | |
| }
 | |
| 
 | |
| 
 | |
| static void ProcessBoardReadCondDataIN(void)
 | |
| {
 | |
| 	coOdGetObj_u32(OD_ENTRY_PU_COND_DATA_IN_INDEX, OD_ENTRY_PU_COND1_DATA_IN_SUB_INDEX, &condBoard1_gst.conductivityData_u32);
 | |
| 	coOdGetObj_u32(OD_ENTRY_PU_COND_DATA_IN_INDEX, OD_ENTRY_PU_TEMP1_DATA_IN_SUB_INDEX, &condBoard1_gst.temperature_u32);
 | |
| 
 | |
| 	coOdGetObj_u32(OD_ENTRY_PU_COND_DATA_IN_INDEX, OD_ENTRY_PU_COND1_DATA_IN_SUB_INDEX, &condBoard2_gst.conductivityData_u32);
 | |
| 	coOdGetObj_u32(OD_ENTRY_PU_COND_DATA_IN_INDEX, OD_ENTRY_PU_TEMP2_DATA_IN_SUB_INDEX, &condBoard2_gst.temperature_u32);
 | |
| 
 | |
| 	coOdGetObj_u32(OD_ENTRY_PU_COND_DATA_IN_INDEX, OD_ENTRY_PU_COND1_DATA_IN_SUB_INDEX, &condBoard3_gst.conductivityData_u32);
 | |
| 	coOdGetObj_u32(OD_ENTRY_PU_COND_DATA_IN_INDEX, OD_ENTRY_PU_TEMP3_DATA_IN_SUB_INDEX, &condBoard3_gst.temperature_u32);
 | |
| }
 | |
| 
 | |
| 
 | |
| static void ProcessBoardWriteCondDataOUT(void)
 | |
| {
 | |
| 	coOdPutObj_u32(OD_ENTRY_PU_COND_DATA_OUT_INDEX, OD_ENTRY_PU_COND1_DATA_IN_SUB_INDEX, condBoard1_gst.conductivityData_u32);
 | |
| 	coOdPutObj_u32(OD_ENTRY_PU_COND_DATA_OUT_INDEX, OD_ENTRY_PU_TEMP1_DATA_IN_SUB_INDEX, condBoard1_gst.temperature_u32);
 | |
| 
 | |
| 	coOdPutObj_u32(OD_ENTRY_PU_COND_DATA_OUT_INDEX, OD_ENTRY_PU_COND2_DATA_IN_SUB_INDEX, condBoard2_gst.conductivityData_u32);
 | |
| 	coOdPutObj_u32(OD_ENTRY_PU_COND_DATA_OUT_INDEX, OD_ENTRY_PU_TEMP2_DATA_IN_SUB_INDEX, condBoard2_gst.temperature_u32);
 | |
| 
 | |
| 	coOdPutObj_u32(OD_ENTRY_PU_COND_DATA_OUT_INDEX, OD_ENTRY_PU_COND3_DATA_IN_SUB_INDEX, condBoard3_gst.conductivityData_u32);
 | |
| 	coOdPutObj_u32(OD_ENTRY_PU_COND_DATA_OUT_INDEX, OD_ENTRY_PU_TEMP3_DATA_IN_SUB_INDEX, condBoard3_gst.temperature_u32);
 | |
| }
 | |
| 
 | |
| 
 | |
| static void ProcessBoardFlowmeterDataOUT(FlowmeterMain_st flowmeter_st)
 | |
| {
 | |
| 	coOdPutObj_r32(OD_ENTRY_PU_FLOWMETER_DATA_OUT_INDEX, OD_ENTRY_PU_FLOWMETER1_DATA_OUT_SUB_INDEX, flowmeterFM1_gst.rawQ_f32);
 | |
| 	coOdPutObj_r32(OD_ENTRY_PU_FLOWMETER_DATA_OUT_INDEX, OD_ENTRY_PU_FLOWMETER1_DATA_OUT_SUB_INDEX, flowmeterFM2_gst.rawQ_f32);
 | |
| 	coOdPutObj_r32(OD_ENTRY_PU_FLOWMETER_DATA_OUT_INDEX, OD_ENTRY_PU_FLOWMETER1_DATA_OUT_SUB_INDEX, flowmeterFM3_gst.rawQ_f32);
 | |
| 	coOdPutObj_r32(OD_ENTRY_PU_FLOWMETER_DATA_OUT_INDEX, OD_ENTRY_PU_FLOWMETER1_DATA_OUT_SUB_INDEX, flowmeterFM4_gst.rawQ_f32);
 | |
| }
 | |
| 
 | |
| 
 | |
| static void ProcessBoardPressureSensorDataOUT(PressureSensorMain_st pressureSensor_st)
 | |
| {
 | |
| 	coOdPutObj_r32(OD_ENTRY_PU_PRESSURE_DATA_OUT_INDEX, OD_ENTRY_PU_PRESSURE1_DATA_OUT_SUB_INDEX, pressureSensorPS1_gst.rawT_f32);
 | |
| 	coOdPutObj_r32(OD_ENTRY_PU_PRESSURE_DATA_OUT_INDEX, OD_ENTRY_PU_PRESSURE1_DATA_OUT_SUB_INDEX, pressureSensorPS2_gst.rawT_f32);
 | |
| 	coOdPutObj_r32(OD_ENTRY_PU_PRESSURE_DATA_OUT_INDEX, OD_ENTRY_PU_PRESSURE1_DATA_OUT_SUB_INDEX, pressureSensorPS3_gst.rawT_f32);
 | |
| 	coOdPutObj_r32(OD_ENTRY_PU_PRESSURE_DATA_OUT_INDEX, OD_ENTRY_PU_PRESSURE1_DATA_OUT_SUB_INDEX, pressureSensorPS4_gst.rawT_f32);
 | |
| }
 | |
| 
 | |
| 
 | |
| static void ProcessBoardReadMvDataIN(void)
 | |
| {
 | |
| 	/* To be implemented */
 | |
| }
 |