Browse Source

RecipeContext在调用OP之前设置timeout为step time,并修改各个OP的实现,保留这个值

shishenghui 3 days ago
parent
commit
e4d8cda607

+ 12 - 3
TIN001-PLC/Jet_Furance_PMC/Jet_Furance_PMC/Jet_Furance_PMC/FurancePMC/BoatModule.cpp

@@ -50,9 +50,8 @@ BoatModule::BoatModule(const char* className, const char* name, const char* modu
 void BoatModule::initialize()
 {
 
-	boatElevator = (IoFurnaceMotor *)DEVICE->getDevice(MODULE_NAME, "BoatElevatorServo");
-	boatRotation = (IoFurnaceMotor*)DEVICE->getDevice(MODULE_NAME, "BoatRotationServo");
-	shutter = (IoShutter*)DEVICE->getDevice(MODULE_NAME, "Shutter");
+	boatElevator = IoFurnaceMotor::poBoatElevatorServo;
+	boatRotation = IoFurnaceMotor::poBoatRotationServo;
 	subscribe();
 	this->status = BoatStatusEnum::Idle;
 }
@@ -81,6 +80,8 @@ void BoatModule::subscribe()
 	
 	subOp->addExec([]()->OperatorStatusEnum {
 		OP->current->setTimes( 0, 0, 0, 0);
+		boatModule->boatElevator->initialize();//重新取一下参数
+		boatModule->boatRotation->initialize();//重新取一下参数
 		//检查一下状态
 		if (boatModule->status!=BoatStatusEnum::Idle && boatModule->status!=BoatStatusEnum::Rotating) {
 			char* err = EV->parseErrCode(ALARM_BOAT_STATUS, "status=%s;",   describeBoatStatus(boatModule->status));
@@ -208,6 +209,8 @@ void BoatModule::subscribe()
 	
 	subOp->addExec([]()->OperatorStatusEnum {
 		OP->current->setTimes( 0, 0, 0, 0);
+		boatModule->boatElevator->initialize();//重新取一下参数
+		boatModule->boatRotation->initialize();//重新取一下参数
 		//检查一下状态
 		if (boatModule->status != BoatStatusEnum::Idle && boatModule->status != BoatStatusEnum::Rotating) {
 			char* err = EV->parseErrCode(ALARM_BOAT_STATUS, "status=%s;", describeBoatStatus(boatModule->status));
@@ -361,6 +364,8 @@ void BoatModule::subscribe()
 	//SetBoatRAxisMove
 	subOp = opNode->addChild("SetBoatRAxisMove");
 	subOp->addExec([]()->OperatorStatusEnum {
+		boatModule->boatElevator->initialize();//重新取一下参数
+		boatModule->boatRotation->initialize();//重新取一下参数
 		OP->current->setTimes( 0, 0, 0, boatModule->boatRotation->scMotionTimeout);
 		boatModule->setBoatRAxisMove(BoatRotateDirection::CCW);
 		return OperatorStatusEnum::RUNNING;
@@ -405,6 +410,8 @@ void BoatModule::subscribe()
 	//SetBoatRAxisMove
 	subOp = opNode->addChild("SetBoatRAxisMoveStop");
 	subOp->addExec([]()->OperatorStatusEnum {
+		boatModule->boatElevator->initialize();//重新取一下参数
+		boatModule->boatRotation->initialize();//重新取一下参数
 		OP->current->setTimes( 0, 0, 0, boatModule->boatRotation->scMotionTimeout);
 		boatModule->stopRotating();
 		return OperatorStatusEnum::RUNNING;
@@ -441,6 +448,8 @@ void BoatModule::subscribe()
 	//SetBoatRAxisMoveStop
 	subOp = opNode->addChild("SetBoatRAxisMoveStop");
 	subOp->addExec([]()->OperatorStatusEnum {
+		boatModule->boatElevator->initialize();//重新取一下参数
+		boatModule->boatRotation->initialize();//重新取一下参数
 		OP->current->setTimes( 0, 0, 0, boatModule->boatRotation->scMotionTimeout);
 		boatModule->stopRotating();
 		return OperatorStatusEnum::RUNNING;

+ 2 - 2
TIN001-PLC/Jet_Furance_PMC/Jet_Furance_PMC/Jet_Furance_PMC/FurancePMC/IoHeater.cpp

@@ -150,10 +150,10 @@ void IoHeater::initialize()
 		//´Óalarm condition ÖÐÈ¡delay timeºÍtrigger time£¨check time£©
 		device->setAlarmConditionTable(alarmConditionModule->alarmConditionKey, device->id);
 		if (device->alarmCondition == NULL) {
-			op->setTimes(TIME_DELAY_DEFAULT, TIME_STABLE_DEFAULT, TIME_ALARM_DEFAULT, 0);
+			op->setTimes(TIME_DELAY_DEFAULT, TIME_STABLE_DEFAULT, TIME_ALARM_DEFAULT, TIME_USE_LAST);
 		}
 		else {
-			op->setTimes(device->alarmCondition->alarmDelayDetectTimeS * 1000, TIME_STABLE_DEFAULT, device->alarmCondition->alarmCheckTime, 0);
+			op->setTimes(device->alarmCondition->alarmDelayDetectTimeS * 1000, TIME_STABLE_DEFAULT, device->alarmCondition->alarmCheckTime, TIME_USE_LAST);
 		}
 		return OperatorStatusEnum::RUNNING;
 	});

+ 2 - 2
TIN001-PLC/Jet_Furance_PMC/Jet_Furance_PMC/Jet_Furance_PMC/FurancePMC/IoMFC.cpp

@@ -88,10 +88,10 @@ void IoMFC::initialize()
 		//´Óalarm condition ÖÐÈ¡delay timeºÍtrigger time£¨check time£©
 		device->setAlarmConditionTable(alarmConditionModule->alarmConditionKey, device->id);
 		if (device->alarmCondition == NULL) {
-			op->setTimes(TIME_DELAY_DEFAULT, TIME_STABLE_DEFAULT, TIME_ALARM_DEFAULT, 0);
+			op->setTimes(TIME_DELAY_DEFAULT, TIME_STABLE_DEFAULT, TIME_ALARM_DEFAULT, TIME_USE_LAST);
 		}
 		else {
-			op->setTimes(device->alarmCondition->alarmDelayDetectTimeS*1000 , TIME_STABLE_DEFAULT, device->alarmCondition->alarmCheckTime, 0);
+			op->setTimes(device->alarmCondition->alarmDelayDetectTimeS*1000 , TIME_STABLE_DEFAULT, device->alarmCondition->alarmCheckTime, TIME_USE_LAST);
 		}
 		return OperatorStatusEnum::RUNNING;
 		

+ 21 - 20
TIN001-PLC/Jet_Furance_PMC/Jet_Furance_PMC/Jet_Furance_PMC/FurancePMC/RecipeContext.cpp

@@ -1301,7 +1301,25 @@ void RecipeContext::executeNextStep()
 		{
 			retcommand = abortStepListMap.get(CovertIntToChar(currentOtherRecipeKey))->get(currentOtherStepNo)->commandMaps;
 		}
-
+		if (currentRecipeType == currentRecipeTypeValue::NormalRecipe)
+		{
+			steptimes = mainStepList.get(currentStepNo)->time;
+		}
+		if (currentRecipeType == currentRecipeTypeValue::SubRecipe)
+		{
+			char* cork = CovertIntToChar(currentOtherRecipeKey);
+			steptimes = (subStepListMap.get(cork))->get(currentOtherStepNo)->time;
+		}
+		if (currentRecipeType == currentRecipeTypeValue::AlarmRecipe)
+		{
+			char* cork = CovertIntToChar(currentOtherRecipeKey);
+			steptimes = (alarmStepListMap.get(cork))->get(currentOtherStepNo)->time;
+		}
+		if (currentRecipeType == currentRecipeTypeValue::AbortRecipe)
+		{
+			char* cork = CovertIntToChar(currentOtherRecipeKey);
+			steptimes = (abortStepListMap.get(cork))->get(currentOtherStepNo)->time;
+		}
 		for (int i = 0; i < 200; i++)
 		{
 			if (retcommand == NULL) break;  // 先判断数组指针有效性
@@ -1320,6 +1338,7 @@ void RecipeContext::executeNextStep()
 			}
 			auto retnode = OP->select(opName);
 			retnode->setParams(rc->Param);
+			retnode->setTimes(TIME_USE_LAST, TIME_USE_LAST, TIME_USE_LAST, steptimes);
 			retnode->Do();
 
 		}
@@ -1327,25 +1346,7 @@ void RecipeContext::executeNextStep()
 		//	6.如果step.time == 0,设置recipeExecuteStatus == StepCompleted,返回到1步骤进行循环
 
 
-		if (currentRecipeType == currentRecipeTypeValue::NormalRecipe)
-		{
-			steptimes = mainStepList.get(currentStepNo)->time;
-		}
-		if (currentRecipeType == currentRecipeTypeValue::SubRecipe)
-		{
-			char* cork = CovertIntToChar(currentOtherRecipeKey);
-			steptimes = (subStepListMap.get(cork))->get(currentOtherStepNo)->time;
-		}
-		if (currentRecipeType == currentRecipeTypeValue::AlarmRecipe)
-		{
-			char* cork = CovertIntToChar(currentOtherRecipeKey);
-			steptimes = (alarmStepListMap.get(cork))->get(currentOtherStepNo)->time;
-		}
-		if (currentRecipeType == currentRecipeTypeValue::AbortRecipe)
-		{
-			char* cork = CovertIntToChar(currentOtherRecipeKey);
-			steptimes = (abortStepListMap.get(cork))->get(currentOtherStepNo)->time;
-		}
+		
 
 		if (steptimes == 0)
 		{