主要内容

生成的代码结构Stateflow图表

这一主题中的示例显示生成的代码的CODESYS PLC IDE 2.3版本。为其他IDE平台所生成的代码看起来不同。

Stateflow图表与基于事件的转变

Stateflow生成代码®图表ControlModule在模型中plcdemo_stateflow_controller。这是图表:

你可以将图表中的状态和转换映射到生成的代码。例如,从国家的过渡流产流产出现在生成的代码为:

ControlModule_IN_Aborting: rtb_out: = sABORTING;(*在“流产”:“< S1 >: 11 *)(*图形函数“is_active”:“< S1 >: 73 *)(*过渡:' < S1 >: 75 *)如果不是drive_state。活动然后(*过渡:‘< S1 >: 31 *) is_c2_ControlModule: = ControlModule_IN_Aborted;(*条目“流产”:“< S1 >: 12”*) rtb_out: = sABORTED;(*图形函数“stop_drive”:“< S1 >: 88 *)(*过渡:' < S1 >: 90 *) driveOut。开始:= FALSE;driveOut。停止:= TRUE;driveOut。重置:= FALSE;END_IF;

等的内联函数的更多信息start_drive,stop_drive,reset_drive在生成的代码中,看到的控制代码的MATLAB功能分区Stateflow图表

Stateflow与绝对时间时序逻辑图

Stateflow图表生成代码时间在模型中plcdemo_sf_abs_time。这是图表:

你可以将图表中的状态和转换映射到生成的代码。例如,过渡状态BC表现为:

Temporal_IN_B:(*在“B”:《< S1 >: 2》*) temporalCounter_i1 (timerAction: = 2, maxTime: = 4000);如果temporalCounter_i1。然后完成(*过渡:' < S1 >: 8 *) is_c2_Temporal: = Temporal_IN_C;temporalCounter_i1 (timerAction: = 1, maxTime: = 0);其他(*外港:< Root > /脉冲的*)脉冲:= 2.0;END_IF;

的变量temporalCounter_i1是一个功能块实例PLC_CODER_TIMER定义为:

FUNCTION_BLOCK PLC_CODER_TIMER VAR_INPUT timerAction: INT;maxTime:力;END_VAR VAR_OUTPUT完成:BOOL;END_VAR VAR plcTimer:吨;plcTimerExpired: BOOL;END_VAR案例timerAction 1:(* *)重置plcTimer (: = FALSE, PT: = T # 0 ms);plcTimerExpired: = FALSE;完成:= FALSE;2:后(* *)如果(不是(plcTimerExpired))那么plcTimer (: = TRUE, PT: = DINT_TO_TIME (maxTime));END_IF; plcTimerExpired := plcTimer.Q; done := plcTimerExpired; 3: (* BEFORE *) IF (NOT(plcTimerExpired)) THEN plcTimer(IN:=TRUE, PT:=DINT_TO_TIME(maxTime)); END_IF; plcTimerExpired := plcTimer.Q; done := NOT(plcTimerExpired); END_CASE; END_FUNCTION_BLOCK