股票st程序(st众泰股票)

jijinwang

设备控制模式程序解析


机器人应用场景

分析机器模式转换的需求,通用的一些设备功能。

控制面板上面需要的操作按钮,一般有如下几种:

1/自动模式按钮

2/手动模式按钮

3/回原点模式按钮

4/复位模式按钮

5/单步运行模式按钮

6/运行按钮

7/停止按钮

通过这些按钮,定义变量,写按钮的逻辑

这些模式按钮按了之后,需要加一些逻辑条件

(比如,按自动按钮,想要输出自动按钮已经被按下去这个信号,需要没有急停信号,安全状态都符合才可以)

得出程序内逻辑输出结果。但是整个程序块的输出结果也需要,程序块的输出结果就是给其它程序块调用,其它地方需要用到手动,自动模式,就调用这个程序快既可以。

思路就是,程序内输出结果,再加上限制条件,即可得出程序快输出结果。

具体步奏如下:

Step1:ST编程方法,先定义一个控制面板控制模式(手动模式,自动模式,原点模式,单步模式,复位模式)按钮信号的结构

TYPE Machine_Mode_Control :

STRUCT bNOMODE_SELECTED:BOOL; bAUTO_SELECTED:BOOL; bMANUAL_SELECTED:BOOL; bHOME_SELECTED:BOOL; bSIGNAL_SELECTED:BOOL; bRESET_SELECTED:BOOL;

END_STRUCT

END_TYPE

这个结构对应的是控制面板按钮的信号,程序里就使用这些信号作逻辑处理。

Step2:定义一个枚举结构,对应控制面板控制模式按钮的程序内逻辑输出结果(如按手动按钮,则手动按钮选择这个信号被激活)。结构如下:

TYPE e_Machine_Mode_Select :( MODE_NOMODE_SELECTED, MODE_AUTO_SELECTED, MODE_MANUAL_SELECTED, MODE_HOME_SELECTED, MODE_SIGNAL_SELECTED, MODE_RESET_SELECTED):=MODE_NOMODE_SELECTED;

END_TYPE

这个结构和按钮信号逻辑对应,程序里需要加一些控制条件,得出这个结果。

Step3:定义一个枚举结构,程序内输出直接作为条件得到模块输出结果.

TYPE e_Machine_Mode :( MODE_NOMODE,

MODE_AUTO,

MODE_MANUAL,

MODE_HOME,

MODE_SIGNAL,

MODE_RESET):=MODE_NOMODE;

END_TYPE

这些变量直接给程序块外部调用,外部不需要写控制模式相关的逻辑程序了,用到即调用.

Step4:定义运行按钮和停止按钮结构。

TYPE Run_Control :

STRUCT

bSTART:BOOL;

bSTOP:BOOL;

END_STRUCT

END_TYPE

这个负责设备启动和停止,给个信号就行,不参与逻辑,所以不加到模式控制结构里。

到此为止程序需要的变量定义完成,开始编程,程序框架如下。

分为4段

第一段

(mode control)就是按钮信号,得出程序内逻辑结果.

第二段

(start select mode)这个结果为程序块输出结果,给外部调用。

第三段

(stop immediately request)停止按钮逻辑,按下立即停止

第四段

(cycle stop request)停止按钮逻辑,按下循环停止,即当前产品做完停止。

(*第一段######Mode control ######*)

IF

strModeControl.bNOMODE_SELECTED

##按钮无输入信号

THEN

eModeSelect:=MODE_NOMODE_SELECTED;

##则得出无模式的逻辑结果

ELSIF (strModeControl.bHOME_SELECTED) AND eMachineMode<>Mode_Home

##原点按钮

THEN

eModeSelect:=MODE_MANUAL_SELECTED;

##加上逻辑判断得出回原点模式ELSIF strModeControl.bMANUAL_SELECTED

THEN

eModeSelect:=MODE_AUTO_SELECTED;

ELSIF strModeControl.bAUTO_SELECTED

THEN

eModeSelect:=MODE_HOME_SELECTED;

ELSIF strModeControl.bRESET_SELECTED

THEN

eModeSelect:=MODE_SIGNAL_SELECTED;

ELSIF strModeControl.bSIGNAL_SELECTED

THEN

eModeSelect:=MODE_RESET_SELECTED;

END_IF


(*第二段######Start the select mode######*)

CASE eModeSelect OF MODE_NOMODE_SELECTED:


eMachineMode:=MODE_NOMOD;

(*注释为无效的选择模式*) MODE_AUTO_SELECTED: eMachineMode:=MODE_AUTO; MODE_MANUAL_SELECTED: eMachineMode:=MODE_MANUAL; MODE_HOME_SELECTED: eMachineMode:=MODE_HOME; MODE_SIGNAL_SELECTED: eMachineMode:=MODE_SIGNAL; MODE_RESET_SELECTED: eMachineMode:=MODE_RESET;

END_CASE


(*第三段#立即停止#*)

IF strRunControl.bSTOP

THEN

bStopImmediately:=TRUE;

END_IF


(*第四段#循环停止#*)

(*按停止按钮超过一秒钟时间*)

tDelayStop(IN:=strRunControl.bSTOP , PT:=t#1s , Q=> , ET=> );

IF tDelayStop.Q=TRUE

THEN

bAutoStopping:=TRUE;

END_IF



程序框架举例

大体思路完成,其它程序怎么调用看流程需求,后面给大家多分享模块化编程的思路,喜欢记得关注下,发文不易[呲牙]