MceBlinkSignals

0.2.0

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.

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

kindnametypedefaultcomment
in_outioMceBlinkSignalsIOIO 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 );

Pages built with Hugo - 23 Apr 2024 11:54 CEST