Funzionamento PLC su schede DL485

Opzionalmente è possibile richiedere le BOARD della serie DL485 con un MINI PLC a bordo, capace di rendere intelligenti le varie uscite a seconda di eventi / trigger presenti su ingressi / a tempo e molto altro.

Tramite il PLC è possibile così rendere le schede autonome di funzionare senza doverle comandare da sistemi domotici quali Domoticz, Home Assistence....... che serviranno esclusivamente per monitorare i vari I/O ed eventualmente comandarli.

Funzioni PLC (opzionali)

ComandoValoreDescrizione
plc_function   Funzione di PLC associata all'uscita e calcolata automaticamente quando varia un suo ingresso digitale che puo essere anche un'altra uscita, se invece l'ingresso è analogico la valutazione viene fatta in occasione del campionamento periodico
  disable Nessuna funzione associata
  equal L'uscita ha lo stesso stato di tutti i suoi ingressi se sono uguali, resta inalterata se sono diversi, si puo impostare un ritardo di inseguimento programmabile separatamente per le transizioni dell'uscita 0->1 e 1->0
  not_equal L'uscita è invertita rispetto a equal
  and Funzione AND tra I/O
  nand L'uscita è invertita rispetto a AND
  or Funzione OR tra I/O
  nor L'uscita è invertita rispetto a OR
  xor Funzione XOR tra I/O
  nxor L'uscita è invertita rispetto a XOR
  odd Funzione dispari. Uscita a 1 se il numero di ingressi a 1 è dispari
  even Funzione pari. Uscita a 1 se il numero di ingressi a 1 è pari
  toggle_on Inverte lo stato dell'uscita ad ogni transizione ON di un ingresso
  toggle_off Inverte lo stato dell'uscita ad ogni transizione OFF di un ingresso
  toggle_on_off Inverte lo stato dell'uscita ad ogni transizione di un ingresso
  timer Funzione timer. Uscita a 1 su innesco (vedere paragrafo timer)
  ntimer

L'uscita è invertita rispetto a timer

  autostart_timer come timer ma si autoinnesca una volta all'avvio
  nautostart_timer L'uscita è invertita rispetto a autostart_timer
  funztestcontaingr uscita 1 se numero di ingressi a 1 maggiore di un certo numero
  nfunztestcontaingr L'uscita è invertita rispetto a funztestcontaingr
  funztestcontaingrintervallo uscita 1 se numero ingressi a 1 compreso in un intervallo dato estremi compresi
  nfunztestcontaingrintervallo L'uscita è invertita rispetto a funztestcontaingrintervallo
  funztestcontaingrintervallots uscita inalterata se numero ingressi compreso tra max e min, 0 sotto il min e 1 sopra il max
  nfunztestcontaingrintervallots uscita negata rispetto a funztestcontaingrintervallots
  analoginmaggn  uscita a 1 se ingresso analogico maggiore di un numero dato
  nanaloginmaggn uscita negata rispetta a analoginmaggn
  analoginmaggun uscita a 1 se ingresso analogico maggiore o uguale a un numero dato
  nanaloginmaggun uscita negata rispetta a analoginmaggun
  analogints trigger schmidt su ingresso analogico, sopra il max fa uno sotto il min fa zero, altrimenti uscita resta inalterata
  nanalogints uscita negata rispetta a analogints
  ifin1maggin2 uscita a 1 se ingresso analogico 1 maggiore di ingresso analogico 2
  nifin1maggin2 uscita negata rispetta a ifin1maggin2
  ifin1magguin2 uscita a 1 se ingresso analogico 1 maggiore o uguale a ingresso analogico 2
  nifin1magguin2 uscita negata rispetta a ifin1magguin2
  analogtsin1menoin2 trigger di schmidt con ingresso (analogico1-analogico2)
  nanalogtsin1menoin2 uscita negata rispetta a analogtsin1menoin2
     

Esempi funzioni PLC

Funzione "equal"

L'uscita ha lo stesso stato di tutti i suoi ingressi se sono uguali, resta inalterata se sono diversi, si puo impostare un ritardo di inseguimento programmabile separatamente per le transizioni dell'uscita 0->1 e 1->0

Esempio di uscita OUT2 comandata dall'ingresso della BOARD:4, IO_LOGICO:11 con ritardo di accensione di 200 centesimi di secondo e ritardo di spegnimento di 500 centesimi

"OUT2":
{
"io_logic": 1,
"direction": "output",
"io_type": "digital",
"default_startup_value": 1,
"inverted": 1,
"filter": 127,
"time_refresh": 30,
"n_refresh_on": 1,
"n_refresh_off": 1,
"enable": 1,
"plc_function": "equal",
"plc_linked_board_id_io_logic": ["4-11"],
"plc_delay_on_off": 500,
"plc_delay_off_on": 200,
"name": "OUT2",
"description": "RELE2",
"dtype": "Switch"
},

"IO1":
{
"io_logic": 11,
"direction": "input",
"io_type": "digital",
"pullup": 1,
"filter": 10,
"time_refresh": 3000,
"n_refresh_on": 1,
"n_refresh_off": 1,
"enable": 1,
"name": "IO1",
"description": "Ingresso IO1",
"dtype": "Switch"
},

Funzione "not_equal"

L'uscita è invertita rispetto a equal

"OUT2":
{
"io_logic": 1,
"direction": "output",
"io_type": "digital",
"default_startup_value": 1,
"inverted": 1,
"filter": 127,
"time_refresh": 30,
"n_refresh_on": 1,
"n_refresh_off": 1,
"enable": 1,
"plc_function": "not_equal",
"plc_linked_board_id_io_logic": ["4-11"],
"plc_delay_on_off": 150,
"plc_delay_off_on": 50,
"name": "OUT1",
"description": "RELE1",
"dtype": "Switch"
},

"IO1":
{
"io_logic": 11,
"direction": "input",
"io_type": "digital",
"pullup": 1,
"filter": 10,
"time_refresh": 3000,
"n_refresh_on": 1,
"n_refresh_off": 1,
"enable": 1,
"name": "IO1",
"description": "Ingresso IO1",
"dtype": "Switch"
},

Funzione "or"

Funzione OR tra I/O

Esempio di funzione "or" a 1 ingresso

"OUT2":
{
"io_logic": 1,
"direction": "output",
"io_type": "digital",
"default_startup_value": 1,
"inverted": 1,
"filter": 127,
"time_refresh": 30,
"n_refresh_on": 1,
"n_refresh_off": 1,
"enable": 1,
"plc_function": "or",
"plc_linked_board_id_io_logic": ["4-11"],
"name": "OUT2",
"description": "RELE2",
"dtype": "Switch"
},

"IO1":
{
"io_logic": 11,
"direction": "input",
"io_type": "digital",
"pullup": 1,
"filter": 10,
"time_refresh": 3000,
"n_refresh_on": 1,
"n_refresh_off": 1,
"enable": 1,
"name": "IO1",
"description": "Ingresso IO1",
"dtype": "Switch"
},

Esempio "or" a 2 ingressi:

"OUT2":
{
"io_logic": 1,
"direction": "output",
"io_type": "digital",
"default_startup_value": 1,
"inverted": 1,
"filter": 127,
"time_refresh": 30,
"n_refresh_on": 1,
"n_refresh_off": 1,
"enable": 1,
"plc_function": "or",
"plc_linked_board_id_io_logic": ["4-11", "4-12"],
"name": "OUT2",
"description": "RELE2",
"dtype": "Switch"
},

"IO1":
{
"io_logic": 11,
"direction": "input",
"io_type": "digital",
"pullup": 1,
"filter": 10,
"time_refresh": 3000,
"n_refresh_on": 1,
"n_refresh_off": 1,
"enable": 1,
"name": "IO1",
"description": "Ingresso IO1",
"dtype": "Switch"
},

"IO2":
{
"io_logic": 12,
"direction": "input",
"io_type": "digital",
"pullup": 1,
"filter": 127,
"time_refresh": 3000,
"n_refresh_on": 1,
"n_refresh_off": 1,
"enable": 1,
"name": "IO2",
"description": "Ingresso IO2",
"dtype": "Switch"
},

Esempio funzione "or" con "not" sugli ingressi:

"OUT2":
{
"io_logic": 1,
"direction": "output",
"io_type": "digital",
"default_startup_value": 1,
"inverted": 1,
"filter": 127,
"time_refresh": 30,
"n_refresh_on": 1,
"n_refresh_off": 1,
"enable": 1,
"plc_function": "or",
"plc_linked_board_id_io_logic": ["4-11", "4-12"],
"plc_xor_input": 3, // il numero 3 in binario è 0b00000011 con significato di inversione per i primi 2 ingressi della funzione.
"name": "OUT2",
"description": "RELE2",
"dtype": "Switch"
},

Esempio di funzione "or" a 2 ingressi con inversione dell'ultimo ingresso che compare nell'elenco:

"OUT2":
{
"io_logic": 1,
"direction": "output",
"io_type": "digital",
"default_startup_value": 1,
"inverted": 1,
"filter": 127,
"time_refresh": 30,
"n_refresh_on": 1,
"n_refresh_off": 1,
"enable": 1,
"plc_function": "or",
"plc_linked_board_id_io_logic": ["4-11", "4-12"],
"plc_xor_input": 1, // 0b00000001
"name": "OUT2",
"description": "RELE2",
"dtype": "Switch"
},

Esempio di funzione "or" a 2 ingressi con inversione del penultimo ingresso che compare nell'elenco:

"OUT2":
{
"io_logic": 1,
"direction": "output",
"io_type": "digital",
"default_startup_value": 1,
"inverted": 1,
"filter": 127,
"time_refresh": 30,
"n_refresh_on": 1,
"n_refresh_off": 1,
"enable": 1,
"plc_function": "or",
"plc_linked_board_id_io_logic": ["4-11", "4-12"],
"plc_xor_input": 1, // 0b00000010
"name": "OUT2",
"description": "RELE2",
"dtype": "Switch"
},

Funzione "nor" a 2 ingressi:

"OUT2":
{
"io_logic": 1,
"direction": "output",
"io_type": "digital",
"default_startup_value": 1,
"inverted": 1,
"filter": 127,
"time_refresh": 30,
"n_refresh_on": 1,
"n_refresh_off": 1,
"enable": 1,
"plc_function": "nor",
"plc_linked_board_id_io_logic": ["4-11", "4-12"],
"plc_xor_input": 0,
"name": "OUT2",
"description": "RELE2",
"dtype": "Switch"
},

Funzione "and" con 2 ingressi

"OUT2":
{
"io_logic": 1,
"direction": "output",
"io_type": "digital",
"default_startup_value": 1,
"inverted": 1,
"filter": 127,
"time_refresh": 30,
"n_refresh_on": 1,
"n_refresh_off": 1,
"enable": 1,
"plc_function": "and",
"plc_linked_board_id_io_logic": ["4-11", "4-12"],
"plc_xor_input": 0,
"name": "OUT2",
"description": "RELE2",
"dtype": "Switch"
},

Funzione "nand" con 2 ingressi:

"OUT2":
{
"io_logic": 1,
"direction": "output",
"io_type": "digital",
"default_startup_value": 1,
"inverted": 1,
"filter": 127,
"time_refresh": 30,
"n_refresh_on": 1,
"n_refresh_off": 1,
"enable": 1,
"plc_function": "nand",
"plc_linked_board_id_io_logic": ["4-11", "4-12"],
"plc_xor_input": 0,
"name": "OUT2",
"description": "RELE2",
"dtype": "Switch"
},

Funzione "xor" con 2 ingressi

"OUT2":
{
"io_logic": 1,
"direction": "output",
"io_type": "digital",
"default_startup_value": 1,
"inverted": 1,
"filter": 127,
"time_refresh": 30,
"n_refresh_on": 1,
"n_refresh_off": 1,
"enable": 1,
"plc_function": "xor",
"plc_linked_board_id_io_logic": ["4-11", "4-12"],
"plc_xor_input": 0,
"name": "OUT2",
"description": "RELE2",
"dtype": "Switch"
},

Funzione "nxor" con 2 ingressi

"OUT2":
{
"io_logic": 1,
"direction": "output",
"io_type": "digital",
"default_startup_value": 1,
"inverted": 1,
"filter": 127,
"time_refresh": 30,
"n_refresh_on": 1,
"n_refresh_off": 1,
"enable": 1,
"plc_function": "nxor",
"plc_linked_board_id_io_logic": ["4-11", "4-12"],
"plc_xor_input": 0,
"name": "OUT2",
"description": "RELE2",
"dtype": "Switch"
},

Funzione "odd" (dispari) con 4 ingressi

L'uscita OUT2 sarà a 1 quando il numero di ingressi a livello logico 1 è dispari

"OUT2":
{
"io_logic": 1,
"direction": "output",
"io_type": "digital",
"default_startup_value": 1,
"inverted": 1,
"filter": 127,
"time_refresh": 30,
"n_refresh_on": 1,
"n_refresh_off": 1,
"enable": 1,
"plc_function": "odd",
"plc_linked_board_id_io_logic": ["4-11", "4-12", "4-13", "4-14"],
"name": "OUT2",
"description": "RELE2",
"dtype": "Switch"
},

"IO1":
{
"io_logic": 11,
"direction": "input",
"io_type": "digital",
"pullup": 1,
"filter": 10,
"time_refresh": 3000,
"n_refresh_on": 1,
"n_refresh_off": 1,
"enable": 1,
"name": "IO1",
"description": "Ingresso IO1",
"dtype": "Switch"
},

"IO2":
{
"io_logic": 12,
"direction": "input",
"io_type": "digital",
"pullup": 1,
"filter": 127,
"time_refresh": 3000,
"n_refresh_on": 1,
"n_refresh_off": 1,
"enable": 1,
"name": "IO2",
"description": "Ingresso IO2",
"dtype": "Switch"
},

"IO3":
{
"io_logic": 13,
"direction": "input",
"io_type": "digital",
"pullup": 1,
"filter": 127,
"time_refresh": 3000,
"n_refresh_on": 1,
"n_refresh_off": 1,
"enable": 1,
"name": "IO3",
"description": "Ingresso IO3",
"dtype": "Switch"
},

"IO4":
{
"io_logic": 14,
"direction": "input",
"io_type": "digital",
"pullup": 1,
"filter": 127,
"time_refresh": 3000,
"n_refresh_on": 1,
"n_refresh_off": 1,
"enable": 1,
"name": "IO4",
"description": "Uscita IO4",
"dtype": "Switch"
},

 

Funzione "EVEN" (pari)

L'uscita OUT2 sarà a 1 quando il numero di ingressi a livello logico 1 è pari

"OUT2":
{
"io_logic": 1,
"direction": "output",
"io_type": "digital",
"default_startup_value": 1,
"inverted": 1,
"filter": 127,
"time_refresh": 30,
"n_refresh_on": 1,
"n_refresh_off": 1,
"enable": 1,
"plc_function": "even",
"plc_linked_board_id_io_logic": ["4-11", "4-12", "4-13", "4-14"],
"name": "OUT2",
"description": "RELE2",
"dtype": "Switch"
},

 

Funzione "toggle_on"

Inverte lo stato dell'uscita ad ogni transizione ON di uno dei 4 ingressi associati

"OUT2":
{
"io_logic": 1,
"direction": "output",
"io_type": "digital",
"default_startup_value": 1,
"inverted": 1,
"filter": 127,
"time_refresh": 30,
"n_refresh_on": 1,
"n_refresh_off": 1,
"enable": 1,
"plc_function": "toggle_on",
"plc_linked_board_id_io_logic": ["4-11", "4-12", "4-13", "4-14"],
"name": "OUT2",
"description": "RELE2",
"dtype": "Switch"
},

 

Funzione "toggle_off"

Inverte lo stato dell'uscita ad ogni transizione OFF di uno dei 4 ingressi associati

"OUT2":
{
"io_logic": 1,
"direction": "output",
"io_type": "digital",
"default_startup_value": 1,
"inverted": 1,
"filter": 127,
"time_refresh": 30,
"n_refresh_on": 1,
"n_refresh_off": 1,
"enable": 1,
"plc_function": "toggle_off",
"plc_linked_board_id_io_logic": ["4-11", "4-12", "4-13", "4-14"],
"name": "OUT2",
"description": "RELE2",
"dtype": "Switch"
},

Funzione "toggle_on_off"

Inverte lo stato dell'uscita ad ogni transizione di uno dei 4 ingressi associati

 

"OUT2":
{
"io_logic": 1,
"direction": "output",
"io_type": "digital",
"default_startup_value": 1,
"inverted": 1,
"filter": 127,
"time_refresh": 30,
"n_refresh_on": 1,
"n_refresh_off": 1,
"enable": 1,
"plc_function": "toggle_on_off",
"plc_linked_board_id_io_logic": ["4-11", "4-12", "4-13", "4-14"],
"name": "OUT2",
"description": "RELE2",
"dtype": "Switch"
},

 

 Funzione "timer"

La fuznione TIMER può essere configurata con diverse modalità:

"plc_mode_timer" è un byte di 8 BIT b7:b0:

b7:b6 seleziona l'unità di misura per la scala dei tempi:

  • 0:0 tempi in centesimi di secondo
  • 0:1 decimi di secondo
  • 1:0 secondi
  • 1:1 2.5 secondi

Il tempo massimo di uno stato è al massimo di 2.5 secondi + 65534 = 163836 secondi (circa 45 ore)

b5:b4 gestione degli inneschi sui fronti con timer già innescato e uscita ON. Se uscita OFF sono ignorati

  • 0:0 ignorati inneschi con timer innescato
  • 0:1 se arriva l'innesco reinizializza tempo timer
  • 1:0 se arriva innesco, somma tempo timer a tempo residuo
  • 1:1 se arriva innesco timer, cambia stato timer

b3: innesco permanente con ingresso a 0

b2: innesco permanente con ingresso a 1

b1:b0 tipo di innesco timer:

  • 0:0
  • 0:1 Innesca su fronte ON
  • 1:0 Spegne timer su fronte OFF
  • 1:1 Innesca timer su fronte ON e spegne timer su fronte OFF

"plc_timer_n_transitions" numero massimo di commutazioni. Da 1 a 255. 0 = infinito

"plc_time_on"  tempo ON da 0 a 65534 con 65535 = infinito

Esempio

"OUT2":
{
"io_logic": 1,
"direction": "output",
"io_type": "digital",
"default_startup_value": 1,
"inverted": 1,
"filter": 127,
"time_refresh": 30,
"n_refresh_on": 1,
"n_refresh_off": 1,
"enable": 1,
"plc_function": "timer", // modo timer
"plc_mode_timer": 2, // innesca su fronte OFF dell'ingresso
"plc_timer_n_transitions": 4, // 4 transizioni prima di finire
"plc_time_on": 50, //
"plc_time_off": 50,
"plc_linked_board_id_io_logic": ["4-11", "4-12"],
"name": "OUT2",
"description": "RELE2",
"dtype": "Switch"
},

Nell'esempio "plc_mode_timer" :2 significa b'00000010'

dove solo il bit 1 è a 1 e quindi significa che il conteggio del tempo è in decimi di secondo

 

CASI D'USO (paragrafo in corso di definizione)

 

esempio di alcuni casi d'uso che si possono soddisfare utilizzando le funzioni plc

 

Stampa   Email