Generate a set of blinking signals which can be used for indicator lights.
The blink signal patterns are defined by 40 segments of each 50ms
.
- Refer to
MceBlinkSignalsIO
for the available patterns.
Version history
0.2.0
 
deGroot
Changes
Changed:
- FB names according style guide
show full history
0.1.0
 
deGroot
Changes
Added:
- initial version
Overview
kind | name | type | default | comment |
---|---|---|---|---|
in_out | io | MceBlinkSignalsIO | IO data |
Details
Check the data type for more info.
Source code
Declarations
(*Generate a set of blink signals*)
FUNCTION_BLOCK MceBlinkSignals
(*
* -----------------------------------------------------------------------------
* Name : MceBlinkSignals
* Version : 0.2.0
* Date : 2022-02-23
* Author : deGroot
* Family : YaskawaMce
* Organisation : github.com/YaskawaEurope/mlx-examples
*
* -----------------------------------------------------------------------------
* Generate a set of blink signals
* -----------------------------------------------------------------------------
*)
VAR_IN_OUT
io : MceBlinkSignalsIO; (*IO data*)
END_VAR
VAR
fbSegment : TON; (*segment timer*)
nSegment : USINT; (*segment for blink signal sequence*)
END_VAR
Logic
// -----------------------------------------------------------------------------
// 40 segments of 50ms
// -----------------------------------------------------------------------------
fbSegment.PT := T#50ms;
fbSegment.IN := NOT fbSegment.Q;
fbSegment();
IF fbSegment.Q THEN
nSegment := nSegment + 1;
END_IF;
IF (nSegment < 1) OR (nSegment > 40) THEN
nSegment := 1;
END_IF;
// -----------------------------------------------------------------------------
// DoubleFlash: 1...1..... .......... .......... ..........
// -----------------------------------------------------------------------------
CASE nSegment OF
1, 5:
io.bDoubleFlash := TRUE;
ELSE
io.bDoubleFlash := FALSE;
END_CASE;
// -----------------------------------------------------------------------------
// Slow: 1111111111 .......... 1111111111 ..........
// -----------------------------------------------------------------------------
CASE nSegment OF
1..10, 21..30:
io.bSlow := TRUE;
ELSE
io.bSlow := FALSE;
END_CASE;
// -----------------------------------------------------------------------------
// Fast: 11111..... 11111..... 11111..... 11111.....
// -----------------------------------------------------------------------------
CASE nSegment OF
1..5, 11..15, 21..25, 31..35:
io.bFast := TRUE;
ELSE
io.bFast := FALSE;
END_CASE;
Implementation
Snippet of the function call:
fbBlinkSignals : ARRAY[0..0] OF MceBlinkSignals;
fbBlinkSignals[0]( io := dummy );