展开查看
以下是引用老学童在2015-01-19 14:38:46的发言 >5楼:背影大侠点石成金,这么模糊的一段程序居然一眼洞穿乾坤,哈哈,佩服!
前段时间‘无敌’坛友发给我一段SCL写的程序,向我求解,我觉得这段程序写的相当好,功能与楼主的程序类似,贴出来供对SCL编程有兴趣的坛友分享一下:
FUNCTION SYS_SYSTEM : VOID (* FC1 *)
BEGIN
IF SYS.Reset
THEN
SYS.Prev_Clock100ms := FALSE;
SYS.Prev_Clock200ms := FALSE;
SYS.Prev_Clock500ms := FALSE;
SYS.Prev_Clock1sec := FALSE;
SYS.Prev_Clock1min := FALSE;
SYS.Prev_Clock10min := FALSE;
SYS.Prev_Clock1hour := FALSE;
SYS.PrevReset := FALSE;
SYS.TickCounter := 0;
END_IF;
SYS.FT_Reset := NOT SYS.Reset AND SYS.PrevReset;
SYS.PrevReset := SYS.Reset;
(* Clock signals are constructed using a timertick counter maintained by OB35.
* Clock signals are defined by 2x their period time and have a 50% duty cycle,
* e.g. the 100ms clock is 100ms high, and then goes low for another 100ms.
*)
SYS.Clock100ms := (DINT_TO_DWORD(SYS.TickCounter DIV 1) AND 16#0001) <> 0;
SYS.Clock200ms := (DINT_TO_DWORD(SYS.TickCounter DIV 2) AND 16#0001) <> 0;
SYS.Clock500ms := (DINT_TO_DWORD(SYS.TickCounter DIV 5) AND 16#0001) <> 0;
SYS.Clock1sec := (DINT_TO_DWORD(SYS.TickCounter DIV 10) AND 16#0001) <> 0;
SYS.Clock1min := (DINT_TO_DWORD(SYS.TickCounter DIV 600) AND 16#0001) <> 0;
SYS.Clock10min := (DINT_TO_DWORD(SYS.TickCounter DIV 6000) AND 16#0001) <> 0;
SYS.Clock1hour := (DINT_TO_DWORD(SYS.TickCounter DIV 36000) AND 16#0001) <> 0;
SYS.Blinking := SYS.Clock1sec;
(* Create Oneshots *)
SYS.ClockPulse100ms := SYS.Clock100ms <> SYS.Prev_Clock100ms;
SYS.ClockPulse200ms := SYS.Clock200ms <> SYS.Prev_Clock200ms;
SYS.ClockPulse500ms := SYS.Clock500ms <> SYS.Prev_Clock500ms;
SYS.ClockPulse1sec := SYS.Clock1sec <> SYS.Prev_Clock1sec;
SYS.ClockPulse1min := SYS.Clock1min <> SYS.Prev_Clock1min;
SYS.ClockPulse10min := SYS.Clock10min <> SYS.Prev_Clock10min;
SYS.ClockPulse1hour := SYS.Clock1hour <> SYS.Prev_Clock1hour;
SYS.Prev_Clock100ms := SYS.Clock100ms;
SYS.Prev_Clock200ms := SYS.Clock200ms;
SYS.Prev_Clock500ms := SYS.Clock500ms;
SYS.Prev_Clock1sec := SYS.Clock1sec;
SYS.Prev_Clock1min := SYS.Clock1min;
SYS.Prev_Clock10min := SYS.Clock10min;
SYS.Prev_Clock1hour := SYS.Clock1hour;
END_FUNCTION
这程序有问题吧??