马上注册,享受更多特权
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
本帖最后由 jiaxf 于 2022-6-15 16:39 编辑
1,准备工作
依次创建结构体ST_TimeBit 和全局变量表 GVL_TBit
1.1 ST_TimeBit
TYPE ST_TimeBit :
STRUCT
_10ms : BOOL;
_100ms : BOOL;
_1s : BOOL;
_1min :BOOL;
END_STRUCT
END_TYPE
1.2 GVL_TBit
VAR_GLOBAL
st_timeBit:ST_TimeBit;
END_VAR
2, 创建程序Cycle_ms_s_Bit
2.1 变量声明
PROGRAM Cycle_ms_s_Bit
VAR
standard_ton : TON;
t :TIME := T#10MS;
i_10ms :INT := 0;
i_100ms :INT := 0;
i_1s :INT := 0;
i_min :INT := 0;
tmp_p: ARRAY[1..4] OF R_TRIG;
tmp_B: ARRAY[1..4] OF BOOL := [FALSE];
END_VAR
2.2 程序部分
(***************************************************************************************
*功能: 用于生成标准的10ms,100ms,1s,1min的上升沿脉冲信号
*****************************************************************************************)
standard_ton(IN:= NOT st_timeBit._10ms, PT:= t , Q=> st_timeBit._10ms, ET=> );
tmp_p[1](CLK:=st_timeBit._10ms, Q=> tmp_B[1]);
st_timeBit._10ms := tmp_B[1];
IF tmp_B[1] THEN
i_10ms := i_10ms + 1;
END_IF
tmp_p[2](CLK:=( i_10ms MOD 10 = 0) AND (i_10ms <> 0) , Q=> tmp_B[2]);
st_timeBit._100ms := tmp_B[2];
IF tmp_B[2] THEN
i_100ms := i_100ms + 1;
END_IF
tmp_p[3](CLK:=( i_100ms MOD 10 = 0) AND (i_100ms <> 0), Q=> tmp_B[3]);
st_timeBit._1s := tmp_B[3];
IF tmp_B[3] THEN
i_1s := i_1s + 1;
END_IF
tmp_p[4](CLK:=( i_1s MOD 60 = 0) AND (i_1s <> 0), Q=> tmp_B[4]);
st_timeBit._1min := tmp_B[4];
IF i_1s = 60 THEN
i_10ms := 0;
i_100ms := 0;
i_min := 0;
i_1s := 0;
END_IF
3, 将程序添加至 task任务中
注意任务配置类型为循环 ,间隔周期 ≤T#10ms
|