Παράδειγμα GAT: Δεξαμενή νερού: Πρόγραμμα αυτοματισμού, τηλεχειρισμός και ειδοποίηση με SMS


Σε αυτό το παράδειγμα θα ασχοληθούμε με μια δεξαμενή νερού,
η οποία είναι χαρακτηριστική περίπτωση απομακρυσμένης εγκατάστασης με ανάγκες τηλεχειρισμού
και άμεσης ενημέρωσης των υπευθύνων αν κάτι πάει στραβά.

Για την υλοποίηση της απαιτούμενης λειτουργικότητας θα χρησιμοποιήσουμε τόσο τις έτοιμες λειτουργίες
όσο και τη " Γλώσσα Αυτοματισμού GAT " που παρέχεται από τη συσκευή GAT.


 

  GAT-1 example #3 preview

Το σενάριο αυτής της εφαρμογής είναι το εξής:

Η δεξαμενή είναι εξοπλισμένη με αισθητήρα στάθμης
με τάση εξόδου στην περιοχή από 0,0 έως 10,0 V για στάθμη νερού στην περιοχή από 0,0 έως 2,5 m.
Η έξοδος του αισθητήρα συνδέεται στην είσοδο #1 της συσκευής GAT.

Υπάρχει επίσης μια αντλία νερού που χρησιμοποιείται για την πλήρωση της δεξαμενής
και μια βαλβίδα αποστράγγισης, που χρησιμοποιείται για το πότισμα.
Αυτά τα δύο ελέγχονται από τις εξόδους ρελέ της συσκευής GAT.

Η λειτουργικότητα που παρέχεται είναι η εξής:

  • Η συσκευή GAT χρησιμοποιείται για τη μέτρηση της στάθμης του νερού στη δεξαμενή
    και τον έλεγχο της βαλβίδας αποστράγγισης και της αντλίας πλήρωσης,
    σύμφωνα με ορισμένες προεπιλογές στάθμης νερού
    που μπορεί να ορίσει ο διαχειριστής.

    Υπάρχουν 3 προεπιλογές στάθμης νερού:
    GAT-1 example #3 Tank Levels

    * Η στάθμη "Upper" είναι το μέγιστο επίπεδο
    στο οποίο η αντλία πλήρωσης σταματά να λειτουργεί.

    * Το επίπεδο "Fill" είναι χαμηλότερο από το επίπεδο "Upper",
    και είναι το σημείο όπου αρχίζει να λειτουργεί η αντλία πλήρωσης.

    * Το επίπεδο "Lower" είναι η ελάχιστη επιτρεπόμενη στάθμη νερού
    στην οποία η συσκευή GAT θα κλείσει τη βαλβίδα αποστράγγισης εάν είναι ανοιχτή
    και θα στείλει στον διαχειριστή ένα προειδοποιητικό μήνυμα, όπως παρακάτω:
    2022/09/16,18:13:26
    WATER-TANK #1 LEVEL:0.12m
    WATER LEVEL LOW !

  • Ο διαχειριστής μπορεί να ρυθμίσει / ρωτήσει τα παραπάνω επίπεδα νερού μέσω μηνυμάτων.
    Ο διαχειριστής μπορεί να στείλει ένα μήνυμα για τη ρύθμιση και των τριών επιπέδων νερού, όπως παρακάτω:
    LEVEL
    UPPER 240
    FILL 160
    LOWER 15

    Το παραπάνω μήνυμα ορίζει το "Upper", "Fill" & "Lower" επίπεδα
    προς 2.40, 1.60 & 0.15 μέτρα αντίστοιχα.

    Ο διαχειριστής μπορεί να ρωτήσει τις παραμέτρους της στάθμης του νερού,
    στέλνοντας το ακόλουθο μήνυμα:
    LEVEL

    Ο διαχειριστής μπορεί να αλλάξει μόνο ορισμένες από τις παραμέτρους της στάθμης του νερού, όπως:
    LEVEL FILL 160

    Σε όλες τις περιπτώσεις, όταν το μήνυμα ξεκινά από τη λέξη "LEVEL",
    η συσκευή απαντά με ένα μήνυμα όπως παρακάτω:
    2022/09/06,18:14:21
    WATER-TANK #1 LEVEL:1.25m
    LEVEL SETUP:
    UPPER=2.40m
    FILL=1.60m
    LOWER=0.15m

  • Ο διαχειριστής μπορεί να ελέγξει ή να ρωτήσει την κατάσταση αυτοματισμού της αντλίας με μηνύματα.
    Μπορεί να ενεργοποιήσει τον αυτοματισμό της αντλίας στέλνοντας το μήνυμα:
    PUMP AUTO ON

    Μπορεί να σταματήσει τον αυτοματισμό της αντλίας στέλνοντας το μήνυμα:
    PUMP AUTO OFF

    Μπορεί να ρωτήσει την κατάσταση αυτοματισμού της αντλίας στέλνοντας το μήνυμα:
    PUMP AUTO

    Σε όλες τις περιπτώσεις, όταν το μήνυμα είναι ξεκινώντας από τις λέξεις "PUMP AUTO",
    η συσκευή απαντά με ένα μήνυμα όπως παρακάτω:
    2022/09/06,18:27:43
    WATER-TANK #1 LEVEL:1.50m
    PUMP AUTOMATION IS ON

  • Ο διαχειριστής μπορεί να ελέγξει ή να ρωτήσει την κατάσταση της βαλβίδας αποστράγγισης με μηνύματα.
    Μπορεί να αρχίσει να ποτίζει, στέλνοντας το μήνυμα:
    DRAIN ON 15

    Με το παραπάνω μήνυμα η βαλβίδα αποστράγγισης θα ανοίξει και θα παραμείνει έτσι για 15 λεπτά.
    Αυτή η διάρκεια θα αποθηκευτεί από τη συσκευή ως παράμετρος.
    Μετά από αυτό, ο διαχειριστής μπορεί να στείλει ένα μήνυμα όπως:
    DRAIN ON

    και η συσκευή θα ανοίξει ξανά τη βαλβίδα αποστράγγισης για 15 λεπτά.
    Ο διαχειριστής μπορεί να κλείσει τη βαλβίδα αποστράγγισης αμέσως, στέλνοντας το μήνυμα:
    DRAIN OFF

    Ο διαχειριστής μπορεί να ρωτήσει την τρέχουσα κατάσταση της βαλβίδας αποστράγγισης, στέλνοντας το μήνυμα:
    DRAIN

    Σε όλες τις περιπτώσεις, όταν το μήνυμα ξεκινά με τη λέξη "DRAIN",
    όταν η βαλβίδα είναι ενεργή, η συσκευή απαντά με ένα μήνυμα όπως:
    2022/09/06,18:29:23
    WATER-TANK #1 LEVEL:1.50m
    DRAIN VALVE ON, duration: 5 minutes

    και όταν η βαλβίδα είναι απενεργοποιημένη, η συσκευή απαντά με ένα μήνυμα όπως:
    2022/09/06,18:30:34
    WATER-TANK #1 LEVEL:1.50m
    DRAIN VALVE OFF

  • Ο διαχειριστής μπορεί να ελέγξει τη συσκευή GAT με μια αναπάντητη τηλεφωνική κλήση.
    Εάν η συσκευή λειτουργεί σωστά, θα απαντήσει με ένα τηλεφώνημα στον διαχειριστή.


Η παραπάνω περιγραφόμενη λειτουργικότητα υλοποιείται με το ακόλουθο " Πρόγραμμα Εφαρμογής GAT ": 

; Water-Tank example with Automation Program
; Device: GAT-1 or GAT-2
;

;~ FPwizard 09/05/22,22:22:49
;~ device: GAT-2

;~ Telephone Numbers list with 1 clients
TN
1111111111
;~ #1 Administrator

;~ Inputs
;~ I1: WATER LEVEL

IT 1 20 ;~ I1 'WATER LEVEL' reaction Time: 2.00 sec
AIC 1 0 250 ;~ Input #1 'WATER LEVEL' Analog Calibration: Offset=0, Factor=250
AIT 1 30 150 ;~ I1 'WATER LEVEL' Analog Thresholds, Low=30, High=150

;~ Outputs
;~ O1: FILL PUMP
;~ O2: DRAIN VALVE

;~ Extras
HD "%D,%T%nWATER-TANK #1 LEVEL:%fA1m" ;~ Message Header
TCA 1 ;~ Telephone Call Answer mode

;~ FPwizard end

;--------------------------------
;Automation Program definitions
;
def LEVEL A1 ;Water Level Analog input
;
def PUMP_OUT O1 ;Water Fill Pump control output
def DRAIN_OUT O2 ;Water Drain Valve control output
;
def PUMP_AUTOMATION B1 ;Water Level Automation "switch"
;
;Parameters
def LEVEL_UPPER N1
def LEVEL_FILL N2
def LEVEL_LOWER N3
def DRAIN_DURATION N4
;Drain Valve active duration in minutes
;
def DRAIN_ACTIVE TE1 ;TIMER #1 ENABLE is used as "Drain Valve Active" flag
def DRAIN_ACTIVE_TC TC1 ;TIMER #1 COUNT is the "Drain Valve Active" time count

;GAT Automation Program code start

P( ;Prolog module, executed once
  ;declare the Non Volatile variables

  NVV( PUMP_AUTOMATION, 1, 8, 1 )
;the Pump Automation flag (B1)
  NVV( LEVEL_UPPER, 4, 8, 1 ) ;the 4 Parameters (N1..N4)
)

M( ;Main module, executed every 10msec
  ;INCOMMING MESSAGES PROCESSING
  ;------------------------------
  ; SETUP/QUERY the LEVEL PARAMETERS

  IF RMC( "LEVEL" )==1 ( ;INCOMMING MESSAGE STARTS WITH "LEVEL"
    IF RMC( "UPPER" ) ( ;INCOMMING MESSAGE CONTAINS "UPPER"
      RMN( LEVEL_UPPER, 1 ) ;SET the UPPER LEVEL PARAMETER
    )
    IF RMC( "FILL" ) ( ;INCOMMING MESSAGE CONTAINS "FILL"
      RMN( LEVEL_FILL, 1 ) ;SET the FILL LEVEL PARAMETER
    )
    IF RMC( "LOWER" ) ( ;INCOMMING MESSAGE CONTAINS "LOWER"
      RMN( LEVEL_LOWER, 1 ) ;SET the LOWER LEVEL PARAMETER
    )
    ;REPLY TO MESSAGE SENDER
    SM( 0, "LEVEL SETUP:%nUPPER=%fN1m%nFILL=%fN2m%nLOWER=%fN3m" )
  )
  ; SETUP/QUERY the PUMP AUTOMATION switch
  IF RMC( "PUMP AUTO" )==1 ( ;INCOMMING MESSAGE STARTS WITH ""PUMP AUTO"
    IF RMC( "ON" ) ( ;INCOMMING MESSAGE CONTAINS "ON"
      PUMP_AUTOMATION = 1 ;SET the PUMP_AUTOMATION switch
    )
    ELIF RMC( "OFF" ) ( ;INCOMMING MESSAGE CONTAINS "OFF"
      PUMP_AUTOMATION = 0 ;RESET the PUMP_AUTOMATION switch
    )
    ;REPLY TO MESSAGE SENDER
    IF PUMP_AUTOMATION (
      SM( 0, "PUMP AUTOMATION IS ON" )
    )
    ELSE (
      SM( 0, "PUMP AUTOMATION IS OFF" )
    )
  )
  ; CONTROL THE DRAIN VALVE
  IF RMC( "DRAIN" )==1 ( ;INCOMMING MESSAGE STARTS WITH "DRAIN"
    RMN( DRAIN_DURATION, 1 ) ;SET the DRAIN DURATION
    IF RMC( "ON" ) ( ;INCOMMING MESSAGE CONTAINS "ON"
      DRAIN_ACTIVE = 1 ;SET the DRAIN ACTIVE flag (enable TIMER #1)
      DRAIN_ACTIVE_TC = 0 ;RESET the DRAIN ACTIVE TIME COUNT (TIMER #1 COUNT)
    )
    ELIF RMC( "OFF" ) ( ;INCOMMING MESSAGE CONTAINS "OFF"
      DRAIN_ACTIVE = 0 ;RESET the DRAIN ACTIVE flag
    )
    ;
    ;REPLY TO MESSAGE SENDER
    IF DRAIN_ACTIVE (
      SM( 0, "DRAIN VALVE ON, duration: %N4 minutes" )
    )
    ELSE (
      SM( 0, "DRAIN VALVE OFF" )
    )
  )

  ;
  ;PUMP AUTOMATION
  ;----------------
  IF PUMP_AUTOMATION (
    IF LEVEL >= LEVEL_UPPER (
      PUMP_OUT = 0
    )
    ELIF LEVEL <= LEVEL_FILL (
      PUMP_OUT = 1
    )
  )
  ELSE ( ;NOT PUMP_AUTOMATION
    PUMP_OUT = 0
  )
  ;
  ;LOW WATER LEVEL CHECK
  ;----------------------
  def LOW_LEVEL_WARN_SENT B2 ;flag for the LOW-LEVEL WARNING MESSAGE
  ;

  IF LEVEL <= LEVEL_LOWER ( ;LOW LEVEL
    ;
    DRAIN_ACTIVE = 0 ;RESET the DRAIN ACTIVE flag
    ;
    IF !LOW_LEVEL_WARN_SENT ( ;IF NOT LOW-LEVEL WARNING MESSAGE SENT
      SM( 1, "WATER LEVEL LOW !" ) ;SEND LOW-LEVEL WARNING MESSAGE
      LOW_LEVEL_WARN_SENT = 1 ;SET the LOW-LEVEL WARNING FLAG
    )
  )
  ELIF LEVEL > (LEVEL_LOWER+10) ( ;LEVEL HIGHER than LEVEL_LOWER+10cm
    LOW_LEVEL_WARN_SENT = 0 ;RESET the LOW-LEVEL WARNING FLAG
  )
  ;
  ;DRAIN AUTOMATION
  ;-----------------
  IF DRAIN_ACTIVE a ( DRAIN_ACTIVE_TC < (DRAIN_DURATION*60) ) (
    ;DRAIN VALVE is ACTIVE and DRAIN TIME not passed yet
    DRAIN_OUT = 1 ;SET the DRAIN VALVE OUTPUT
  )
  ELSE (

    ;DRAIN VALVE is NOT ACTIVE or DRAIN TIME passed
    DRAIN_OUT = 0 ;RESET the DRAIN VALVE OUTPUT
    DRAIN_ACTIVE = 0 ;RESET the DRAIN ACTIVE flag
  )
)

;
APR 1 ;START THE AUTOMATION PROGRAM

 

Αυτό το πρόγραμμα εφαρμογής μεταφορτώνεται στη συσκευή με περίπου 10 διαδοχικά μηνύματα,
ενώ χρειάζεται περίπου 8 δευτερόλεπτα για να ανέβει τοπικά μέσω USB και 2..3 λεπτά για να ανέβει μέσω SMS σε απομακρυσμένη συσκευή.

* * *

Αυτό το πρόγραμμα εφαρμογής είναι μια επίδειξη των δυνατοτήτων του Προγράμματος Αυτοματισμού GAT,
το οποίο μπορείτε να χρησιμοποιήσετε ως πρότυπο για την εφαρμογή σας.