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 autonomo il funzionamento delle schede senza necessariamente doverle comandare da sistemi di supervisione domotici quali Domoticz, Home Assistence....... che potranno servire per monitorare i vari I/O ed eventualmente comandarli manualmente, oppure per affiancare il plc nella gestione delle funzioni piu complesse.

Funzioni PLC (opzionali)

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

L'uscita non viene presa in considerazione

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. I tempi sono in centesimi di secondo (da 0 a 65534 con 65535=infinito). E' possibile cambiare l'unità di misura con la funzione "plc_time_unit" con le seguenti modalità:

  • "0.01" centesimi di secondo
  • "0.1" decimi di secondo
  • "1": secondi
  • "2.5": 2.5 secondi

Se "plc_time_unit" non è impostata, l'unità di misura è espressa in centesimi di secondo

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 "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"
},

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 "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 funzione 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

i bit b7 e b6 possono essere sovrascritti tramite il comando "plc_time_unit": n

  • 0 = centesimi di secondo
  • 1 = decimi di secondo
  • 2 = secondi
  • 3 = 2.5 secondi

Il tempo massimo di uno stato è al massimo di 2.5 secondi * 65534 = 163835 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:b2 gestione montalità di conteggio tempi

  • 0:0 = normale
  • 0:1 = uscita ferma con ingresso a 1 (in questo caso b0 indica lo stato di uscita ferma e b1 lo stato di partenza dell'uscita)
  • 1:0 = sospende conteggio con ingresso a 1
  • 1:1 = partenza timer con stato 0 in modalità normale

b1:b0 tipo di innesco timer:

  • 0:0 Innesca timer su fronte ON e innesca timer su fronte OFF
  • 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

"plc_time_off"  tempo OFF da 0 a 65534 con 65535 = infinito

Esempio con  "plc_mode_timer" :1 che significa b'00000001' dove solo il b0 è a 1 che significa che il timer viene innescato sul fronte ON dei suoi 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": "timer", // funzione timer
"plc_mode_timer": 1, // innesca su fronte ON 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"
},

Con "plc_mode_timer": 3 si innesca il timer su fronte ON e lo si stoppa sil fronte OFF

Stessi parametri di Timer.
        "PC0":
        {
            "io_logic": 1, 
            "direction": "output",
            "io_type": "digital",
            "default_startup_value": 1,
            "filter": 10,
            "inverted": 0,
            "plc_function": "autostart_timer", // funzione timer
            "plc_mode_timer": 0,
            "plc_time_unit": 1, // Tempi in secondi (Impostare tra 0.01, 0.1, 1 e 2.5 secondi)
            "plc_timer_n_transitions": 10, // 10 transizioni prima di finire. 0 per infinito
            "plc_time_on": 50, 
            "plc_time_off": 50,
            "enable": 1,
            "name": "OUT 1",
            "description": "Autostart Timer",
            "dtype": "Switch"
        },

"test_nio_>=_n" Numero IO per settare uscita a 1 (da 1 a 8)

"OUT1":
{
    "io_logic": 1,
    "direction": "output",
    "io_type": "digital",
    "default_startup_value": 0,
    "inverted": 1,
    "filter": 127,
    "time_refresh": 3000,
    "n_refresh_on": 1,
    "n_refresh_off": 1,
    "enable": 1,
    "plc_function": "test_nio_>=_n",
    "plc_params": 1, // numero minimo di ingressi a 1 per uscita = 1
    "plc_linked_board_id_io_logic": ["4-11", "4-12", "4-13"],
    "name": "OUT1",
    "description": "Lampadine",
    "dtype": "Switch"
},

"IO1":
{
    "io_logic": 11,
    "direction": "input",
    "io_type": "digital",
    "pullup": 1,
    "filter": 200,
    "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": 20,
    "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": 20,
    "time_refresh": 3000,
    "n_refresh_on": 1,
    "n_refresh_off": 1,
    "enable": 1,
    "name": "IO4",
    "description": "IO analogico",
    "dtype": "Switch"
},
                
"OUT1":
 {
 "io_logic": 1,
 "direction": "output",
 "io_type": "digital",
 "default_startup_value": 0,
 "inverted": 1,
 "filter": 127,
 "time_refresh": 3000,
 "n_refresh_on": 1,
 "n_refresh_off": 1,
 "enable": 1,
 "plc_function": "test_nio_into_n", // setta uscita a 1 se il numero degli ingressi è compreso nei limite impostato (estremi compresi)
 "plc_params": 33, // 0x21 0b00100001 b7:b4=estremo superiore, b3:b0=estremo inferiore
 "plc_linked_board_id_io_logic": ["4-11", "4-12", "4-13", "4-14"],
 "name": "OUT1",
 "description": "Lampadine",
 "dtype": "Switch"
 },

"IO1":
 {
 "io_logic": 11,
 "direction": "input",
 "io_type": "digital",
 "pullup": 1,
 "filter": 200,
 "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": 20,
 "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": 20,
 "time_refresh": 3000,
 "n_refresh_on": 1,
 "n_refresh_off": 1,
 "enable": 1,
 "name": "IO4",
 "description": "IO3",
 "dtype": "Switch"
 },

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

"OUT1":
{
"io_logic": 1,
"direction": "output",
"io_type": "digital",
"default_startup_value": 0,
"inverted": 1,
"filter": 127,
"time_refresh": 3000,
"n_refresh_on": 1,
"n_refresh_off": 1,
"enable": 1,
"plc_function": "test_schmitt_nio", // vedi descrizione
"plc_params": 33, // 0x21 0b00100001 b7:b4=numero superiore, b3:b0=numero inferiore
"plc_linked_board_id_io_logic": ["4-11", "4-12", "4-13", "4-14"], // ingressi che comandano l'uscita
"name": "OUT1",
"description": "Lampadine",
"dtype": "Switch"
},
"OUT1":
{
"io_logic": 1,
"direction": "output",
"io_type": "digital",
"default_startup_value": 0,
"inverted": 1,
"filter": 127,
"time_refresh": 3000,
"n_refresh_on": 1,
"n_refresh_off": 1,
"enable": 1,
"plc_function": "analog_in_=_n",
"plc_params": 437, // Valore impostato (da 0 a 1023)
"plc_linked_board_id_io_logic": ["4-12"],
"name": "OUT1",
"description": "Lampadine",
"dtype": "Switch"
},
"OUT1":
{
"io_logic": 1,
"direction": "output",
"io_type": "digital",
"default_startup_value": 0,
"inverted": 1,
"filter": 127,
"time_refresh": 3000,
"n_refresh_on": 1,
"n_refresh_off": 1,
"enable": 1,
"plc_function": "analog_in_>_n", // setta uscita a 1 se il numero degli ingressi è entro il limite impostato
"plc_params": 437, // Valore soglia da 0 a 1023
"plc_linked_board_id_io_logic": ["4-12"],
"name": "OUT1",
"description": "Lampadine",
"dtype": "Switch"
},
 "OUT1":
{
"io_logic": 1,
"direction": "output",
"io_type": "digital",
"default_startup_value": 0,
"inverted": 1,
"filter": 127,
"time_refresh": 3000,
"n_refresh_on": 1,
"n_refresh_off": 1,
"enable": 1,
"plc_function": "analog_in_>=_n",
"plc_params": 437, // Valore soglia da 0 a 1023
"plc_linked_board_id_io_logic": ["4-12"],
"name": "OUT1",
"description": "Lampadine",
"dtype": "Switch"
},
"OUT1":
{
"io_logic": 1,
"direction": "output",
"io_type": "digital",
"default_startup_value": 0,
"inverted": 1,
"filter": 127,
"time_refresh": 3000,
"n_refresh_on": 1,
"n_refresh_off": 1,
"enable": 1,
"plc_function": "analog_in_schmitt_n",
"plc_params": [600, 100], // Valore massimo e minimo (da 0 a 1023)
"plc_linked_board_id_io_logic": ["4-12"],
"name": "OUT1",
"description": "Lampadine",
"dtype": "Switch"
},
"OUT1":
{
"io_logic": 1,
"direction": "output",
"io_type": "digital",
"default_startup_value": 0,
"inverted": 1,
"filter": 127,
"time_refresh": 3000,
"n_refresh_on": 1,
"n_refresh_off": 1,
"enable": 1,
"plc_function": "if_analog_in1_=_analog_in2",
"plc_linked_board_id_io_logic": ["4-12", "4-13"],
"name": "OUT1",
"description": "Lampadine",
"dtype": "Switch"
},
"OUT1":
{
"io_logic": 1,
"direction": "output",
"io_type": "digital",
"default_startup_value": 0,
"inverted": 1,
"filter": 127,
"time_refresh": 3000,
"n_refresh_on": 1,
"n_refresh_off": 1,
"enable": 1,
"plc_function": "if_analog_in1_>_analog_in2",
"plc_linked_board_id_io_logic": ["4-12", "4-11"], // La numerazione degli ingressi va da destra verso sinistra quindi in1 è il 4-11.
"name": "OUT1",
"description": "Lampadine",
"dtype": "Switch"
},
"OUT1":
{
"io_logic": 1,
"direction": "output",
"io_type": "digital",
"default_startup_value": 0,
"inverted": 1,
"filter": 127,
"time_refresh": 3000,
"n_refresh_on": 1,
"n_refresh_off": 1,
"enable": 1,
"plc_function": "if_analog_in1_>_analog_in2",
"plc_linked_board_id_io_logic": ["4-12", "4-11"], // La numerazione degli ingressi va da destra verso sinistra quindi in1 è il 4-11.
"name": "OUT1",
"description": "Lampadine",
"dtype": "Switch"
},
"OUT1":
{
"io_logic": 1,
"direction": "output",
"io_type": "digital",
"default_startup_value": 0,
"inverted": 1,
"filter": 127,
"time_refresh": 3000,
"n_refresh_on": 1,
"n_refresh_off": 1,
"enable": 1,
"plc_function": "if_analog_in1_-_analog_in2_schmitt_value",
"plc_params": [500, 100], // Valore massimo e minimo (da 0 a 1023)
"plc_linked_board_id_io_logic": ["4-13"],
"name": "OUT1",
"description": "Lampadine",
"dtype": "Switch"
},
 "OUT1":
{
"io_logic": 1,
"direction": "output",
"io_type": "digital",
"default_startup_value": 0,
"inverted": 1,
"filter": 127,
"time_refresh": 3000,
"n_refresh_on": 1,
"n_refresh_off": 1,
"enable": 1,
"plc_function": "last_change",
"plc_linked_board_id_io_logic": ["4-11", "4-12", "4-13", "4-14"],
"name": "OUT1",
"description": "Lampadine",
"dtype": "Switch"
},
"OUT1":
{
"io_logic": 1,
"direction": "output",
"io_type": "digital",
"default_startup_value": 0,
"inverted": 1,
"filter": 127,
"time_refresh": 3000,
"n_refresh_on": 1,
"n_refresh_off": 1,
"enable": 1,
"plc_function": "last_change_all",
"plc_linked_board_id_io_logic": ["4-11", "4-12", "4-13", "4-14"],
"name": "OUT1",
"description": "Lampadine",
"dtype": "Switch"
},
 "VIRT1":
{
"io_logic": 2,
"direction": "output",
"io_type": "virtual", // uscita virtuale
"default_startup_value": 0,
"time_refresh": 10,
"enable": 1,
"plc_function": "analog_in_+_n",
"plc_params": 100, // numero da sommare al valore dell'ingresso analogico
"plc_linked_board_id_io_logic": ["4-12"],
"name": "VIRT1",
"description": "Variabile virtuale 1",
"dtype": "Switch"
},
"VIRT1":
{
"io_logic": 2,
"direction": "output",
"io_type": "virtual",
"default_startup_value": 0,
"time_refresh": 10,
"enable": 1,
"plc_function": "analog_in_-_n",
"plc_params": 100, // numero da sottrarre al valore dell'ingresso analogico
"plc_linked_board_id_io_logic": ["4-12"],
"name": "VIRT1",
"description": "Variabile virtuale 1",
"dtype": "Switch"
},
"VIRT1":
{
"io_logic": 2,
"direction": "output",
"io_type": "virtual",
"default_startup_value": 0,
"time_refresh": 10,
"enable": 1,
"plc_function": "analog_in_*_n",
"plc_params": 10,
"plc_linked_board_id_io_logic": ["4-12"],
"name": "VIRT1",
"description": "Variabile virtuale 1",
"dtype": "Switch"
},
"VIRT1":
{
"io_logic": 2,
"direction": "output",
"io_type": "virtual",
"default_startup_value": 0,
"time_refresh": 10,
"enable": 1,
"plc_function": "analog_in_/_n",
"plc_params": 10,
"plc_linked_board_id_io_logic": ["4-12"],
"name": "VIRT1",
"description": "Variabile virtuale 1",
"dtype": "Switch"
},
 "VIRT1":
{
"io_logic": 2,
"direction": "output",
"io_type": "virtual",
"default_startup_value": 0,
"time_refresh": 10,
"enable": 1,
"plc_function": "analog_in_%_n",
"plc_params": 10,
"plc_linked_board_id_io_logic": ["4-12"],
"name": "VIRT1",
"description": "Variabile virtuale 1",
"dtype": "Switch"
},
"VIRT1":
{
"io_logic": 2,
"direction": "output",
"io_type": "virtual",
"default_startup_value": 0,
"time_refresh": 10,
"enable": 1,
"plc_function": "analog_in_min_n",
"plc_params": 256,
"plc_linked_board_id_io_logic": ["4-12"],
"name": "VIRT1",
"description": "Variabile virtuale 1",
"dtype": "Switch"
},
"VIRT1":
{
"io_logic": 2,
"direction": "output",
"io_type": "virtual",
"default_startup_value": 0,
"time_refresh": 10,
"enable": 1,
"plc_function": "analog_in_max_n",
"plc_params": 256,
"plc_linked_board_id_io_logic": ["4-12"],
"name": "VIRT1",
"description": "Variabile virtuale 1",
"dtype": "Switch"
},
"VIRT1":
{
"io_logic": 2,
"direction": "output",
"io_type": "virtual",
"default_startup_value": 0,
"time_refresh": 10,
"enable": 1,
"plc_function": "analog_in1_+_analog_in2",
"plc_linked_board_id_io_logic": ["4-12", "4-13"],
"name": "VIRT1",
"description": "Variabile virtuale 1",
"dtype": "Switch"
},
"VIRT1":
{
"io_logic": 2,
"direction": "output",
"io_type": "virtual",
"default_startup_value": 0,
"time_refresh": 10,
"enable": 1,
"plc_function": "analog_in1_-_analog_in2",
"plc_linked_board_id_io_logic": ["4-12", "4-13"], // Valore uscita = "4-13" - "4-12"
"name": "VIRT1",
"description": "Variabile virtuale 1",
"dtype": "Switch"
},
"VIRT1":
{
"io_logic": 2,
"direction": "output",
"io_type": "virtual",
"default_startup_value": 0,
"time_refresh": 10,
"enable": 1,
"plc_function": "analog_in1_*_analog_in2",
"plc_linked_board_id_io_logic": ["4-12", "4-13"],
"name": "VIRT1",
"description": "Variabile virtuale 1",
"dtype": "Switch"
},
"VIRT1":
{
"io_logic": 2,
"direction": "output",
"io_type": "virtual",
"default_startup_value": 0,
"time_refresh": 10,
"enable": 1,
"plc_function": "analog_in1_/_analog_in2",
"plc_linked_board_id_io_logic": ["4-13", "4-12"], // Valore uscita = "4-12" / "4-13"
"name": "VIRT1",
"description": "Variabile virtuale 1",
"dtype": "Switch"
},
"VIRT1":
{
"io_logic": 2,
"direction": "output",
"io_type": "virtual",
"default_startup_value": 0,
"time_refresh": 10,
"enable": 1,
"plc_function": "analog_in1_%_analog_in2",
"plc_linked_board_id_io_logic": ["4-13", "4-12"], // Valore uscita = "4-12" % "4-13"
"name": "VIRT1",
"description": "Variabile virtuale 1",
"dtype": "Switch"
},
"VIRT1":
{
"io_logic": 2,
"direction": "output",
"io_type": "virtual",
"default_startup_value": 0,
"time_refresh": 10,
"enable": 1,
"plc_function": "analog_in1_min_analog_in2",
"plc_linked_board_id_io_logic": ["4-13", "4-12"], // Valore uscita = "4-12" - "4-13"
"name": "VIRT1",
"description": "Variabile virtuale 1",
"dtype": "Switch"
},
"VIRT1":
{
"io_logic": 2,
"direction": "output",
"io_type": "virtual",
"default_startup_value": 0,
"time_refresh": 10,
"enable": 1,
"plc_function": "analog_in1_max_analog_in2",
"plc_linked_board_id_io_logic": ["4-13", "4-12"], // Valore uscita = "4-13" - "4-12"
"name": "VIRT1",
"description": "Variabile virtuale 1",
"dtype": "Switch"
},
 
Triggercampio       passare una lista ingressi, triggera su fronte on di ogni ingresso, passare numero io logico su cui comandare il campionamento, esempio si vuole campionare un sensore i2c oltre che a tempo anche su richiesta di un ingresso.
 
 
Byte counter_mode:
b7:b6: unità di misura del tempo dopo il quale il risultato viene azzerato
0:0 centesimi di secondo
0:1 decimi di secondo
1:0 secondi
1:1 2.5 secondi
b5:b4 modalità comunicazione del risultato (solo se si usa la modalità a tempo) altrimenti ogni impulso sarà anche inviato in rete
0:0 si aggiorna il dato a tempo scaduto o prima se viene superato il conteggio relativo al tempo precedente
0:1 aggiorna il risultato solo a tempo scaduto. In ogni caso, la lettura del risultato a tempo non scaduto fornisce il dato del conteggio precedente
1:0 aggiorna il risultato solo a tempo scaduto e solo se il risultato attuale è maggiore del precedente (ricava il massimo)
1:1 aggiorna il risultato solo a tempo scaduto e solo se il risultato attuale è minore del precedente (ricava il minimo)
b3 non usato
b2    0: contatore 16bit circolare. Arrivato al massimo o al minimo, ricomincia
1: il contatore rimane agli estremi 65535 o a 0
b1 non usato
b0: 0: conta solo fronti ON
     1: conta fronti ON e OFF
 
La modalità a tempo si ottiene impostando il byte "timeout_counter" LS e MS
  • 0. = escluso
  • 65535 = escluso
La modalità a tempo si ottiene impostando il byte "counter_filter"
  • Attualmente non usato

 

Esempio di contatore semplice con conteggio di tutti i fronti ON

"OUT1":
{
"io_logic": 1,
"direction": "output",
"io_type": "digital",
"default_startup_value": 0,
"inverted": 1,
"filter": 127,
"time_refresh": 30,
"n_refresh_on": 1,
"n_refresh_off": 1,
"enable": 1,
"plc_function": "counter_up",
"counter_mode": 0, // contatore semplice
"counter_filter": 0, // non usato
"timeout_counter": 0, // escluso
"plc_linked_board_id_io_logic": ["4-11"],
"name": "OUT1",
"description": "Contatore",
"dtype": "Switch"
},

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

Esempio di contatore che si azzera ogni 10 secondi (timeout_counter = 1000 centesimi).

"OUT1":
{
"io_logic": 1,
"direction": "output",
"io_type": "digital",
"default_startup_value": 0,
"inverted": 1,
"filter": 127,
"time_refresh": 3000,
"n_refresh_on": 1,
"n_refresh_off": 1,
"enable": 1,
"plc_function": "counter_up",
"counter_mode": 16, // Aggiorna risultato ogni tot secondi, tempi in centesimi
"counter_filter": 0, // non usato
"counter_timeout": 1000, // 10 secondi cioè 10*100=1000 centesimi
"plc_linked_board_id_io_logic": ["4-11"],
"name": "OUT1",
"description": "Contatore",
"dtype": "Switch"
},
 
Esempio di contatore che mostra il massimo del conteggio in 5 secondi (solo se viene superato)
 
"OUT1":
{
"io_logic": 1,
"direction": "output",
"io_type": "digital",
"default_startup_value": 0,
"inverted": 1,
"filter": 127,
"time_refresh": 3000,
"n_refresh_on": 1,
"n_refresh_off": 1,
"enable": 1,
"plc_function": "counter_up",
"counter_mode": 160, // Aggiorna risultato ogni 10 secondi (modo timer in secondi b10000000 + mostra max timer b00100000 = 160d)
"counter_filter": 0, // non usato
"counter_timeout": 5, // 5 secondi
"plc_linked_board_id_io_logic": ["4-11"],
"name": "OUT1",
"description": "Contatore",
"dtype": "Switch"
},
 
Esempio di contatore UP con 2 ingressi:
 
"OUT1":
{
"io_logic": 1,
"direction": "output",
"io_type": "digital",
"default_startup_value": 10,
"inverted": 1,
"filter": 127,
"time_refresh": 3000,
"n_refresh_on": 1,
"n_refresh_off": 1,
"enable": 1,
"plc_function": "counter_up",
"counter_mode": 0, // Aggiorna risultato ogni 10 secondi
"counter_filter": 0, // non usato
"counter_timeout": 0, // 5 secondi
"plc_linked_board_id_io_logic": ["4-11", "4-14"],
"name": "OUT1",
"description": "Contatore",
"dtype": "Switch"
},
 
Esempio di contatore UP con incremento di 2 ad ogni impulso
 
"OUT1":
{
"io_logic": 1,
"direction": "output",
"io_type": "digital",
"default_startup_value": 10,
"inverted": 1,
"filter": 127,
"time_refresh": 3000,
"n_refresh_on": 1,
"n_refresh_off": 1,
"enable": 1,
"plc_function": "counter_up",
"counter_mode": 0, // Aggiorna risultato ogni 10 secondi
"counter_filter": 0, // non usato
"counter_timeout": 0, // 5 secondi
"plc_linked_board_id_io_logic": ["4-11", "4-11"],
"name": "OUT1",
"description": "Contatore",
"dtype": "Switch"
},
 
Esempio di conteggio all'indietro con valore precaricato. Arrivato a 0 riprende da 65535
 
"OUT1":
{
"io_logic": 1,
"direction": "output",
"io_type": "digital",
"default_startup_value": 100, // Valore di partenza del contatore
"inverted": 1,
"filter": 127,
"time_refresh": 3000,
"n_refresh_on": 1,
"n_refresh_off": 1,
"enable": 1,
"plc_function": "counter_dw",
"counter_mode": 0, // contatore normale
"counter_filter": 0, // non usato
"counter_timeout": 0,
"plc_linked_board_id_io_logic": ["4-11"],
"name": "OUT1",
"description": "Contatore",
"dtype": "Switch"
},
 
Esempio di conteggio all'indietro con valore precaricato. Arrivato a 0 resta a 0
 
"OUT1":
{
"io_logic": 1,
"direction": "output",
"io_type": "digital",
"default_startup_value": 20,
"inverted": 1,
"filter": 127,
"time_refresh": 3000,
"n_refresh_on": 1,
"n_refresh_off": 1,
"enable": 1,
"plc_function": "counter_dw",
"counter_mode": 4, // contatore all'indietro con STOP su 0
"counter_filter": 0, // non usato
"counter_timeout": 0, // 5 secondi
"plc_linked_board_id_io_logic": ["4-11"],
"name": "OUT1",
"description": "Contatore",
"dtype": "Switch"
},
Esempio di contatore UP / DOWN con 2 ingressi: si possono collegare piu' ingressi e partendo da destra sono alternativamente UP e DOWN
 
"OUT1":
{
"io_logic": 1,
"direction": "output",
"io_type": "digital",
"default_startup_value": 10,
"inverted": 1,
"filter": 127,
"time_refresh": 3000,
"n_refresh_on": 1,
"n_refresh_off": 1,
"enable": 1,
"plc_function": "counter_up",
"counter_mode": 0, // Aggiorna risultato ogni 10 secondi
"counter_filter": 0, // non usato
"counter_timeout": 0, // 5 secondi
"plc_linked_board_id_io_logic": ["4-11", "4-11"], // lo stesso ingresso usato 2 volte per avere incremento di 2. (E' possibile usare fino a 8 ingressi)
"name": "OUT1",
"description": "Contatore",
"dtype": "Switch"
},
 
Byte counter_mode:
  • b7:b6 unità di misura del tempo per il conteggio
    • 0:0 centesimi di secondo
    • 0:1 decimi di secondo
    • 1:0 secondi
    • 1:1 2.5 secondi
  • b5:b4 modo del filtro del risultato
    • 0:0 memoria del valore precedente e si aggiorna dato con media col precedente
    • 0:1 memoria del valore precedente e si aggiorna dato con periodo ottenuto
    • 1:0 memoria del valore precedente e si aggiorna dato con periodo ottenuto solo se maggiore (ricava il massimo)
    • 1:1 1:0 memoria del valore precedente e si aggiorna dato con periodo ottenuto solo se minore (ricava il minimo)
     
  • b3 1: azzera tempo ad ogni start a conteggio finito - 0: si somma tempo precedente
  • b2 1: azzera tempo ad ogni start a conteggio in corso
  • b1 1: considera end come nuovo start
  • b0 0: end su fronte OFF - 1: end su fronte ON

Byte counter_filter: non implementato

word counter_timeout

byte counter_mintime: tempo minimo per il calcolo del risulrato

Esempio di misura della durata dell'ingresso tra fronte ON e  fronte OFF (tempo ON di un ingresso)

"OUT1":
{
"io_logic": 1,
"direction": "output",
"io_type": "digital",
"default_startup_value": 10,
"inverted": 1,
"filter": 127,
"time_refresh": 3000,
"n_refresh_on": 1,
"n_refresh_off": 1,
"enable": 1,
"plc_function": "time_meter",
"counter_mode": 24, // Aggiorna risultato ogni 10 secondi
"counter_filter": 0, // non usato
"counter_timeout": 0, // 5 secondi
"plc_linked_board_id_io_logic": ["4-11"],
"name": "OUT1",
"description": "Contatore",
"dtype": "Switch"
},

Esempio misura del tempo tra 2 fronti ON (tempo impiegato per consumare 1 Watt/ora sul contatore dell'ENEL)

"OUT1":
{
"io_logic": 1,
"direction": "output",
"io_type": "digital",
"default_startup_value": 10,
"inverted": 1,
"filter": 127,
"time_refresh": 3000,
"n_refresh_on": 1,
"n_refresh_off": 1,
"enable": 1,
"plc_function": "time_meter",
"counter_mode": 25, // Aggiorna risultato ogni 10 secondi
"counter_filter": 0, // non usato
"counter_timeout": 0, // 5 secondi
"plc_linked_board_id_io_logic": ["4-11"],
"name": "OUT1",
"description": "Contatore",
"dtype": "Switch"
},

Byte powermeter:
  • b7:b6 unità di misura del tempo per il conteggio
    • 0:0 centesimi di secondo
    • 0:1 decimi di secondo
    • 1:0 secondi
    • 1:1 2.5 secondi
  • b5:b4 modo del filtro del risultato
    • 0:0 memoria del valore precedente e si aggiorna dato con media col precedente
    • 0:1 memoria del valore precedente e si aggiorna dato con periodo ottenuto
    • 1:0 memoria del valore precedente e si aggiorna dato con periodo ottenuto solo se maggiore (ricava il massimo)
    • 1:1 1:0 memoria del valore precedente e si aggiorna dato con periodo ottenuto solo se minore (ricava il minimo)
     
  • b3 1: azzera tempo ad ogni start a conteggio finito - 0: si somma tempo precedente
  • b2 1: azzera tempo ad ogni start a conteggio in corso
  • b1 1: considera end come nuovo start
  • b0 0: end su fronte OFF - 1: end su fronte ON

Byte counter_filter: non implementato

word counter_timeout

byte counter_mintime: tempo minimo per il calcolo del risulrato

Esempio di calcolo della potenza misurata dal contatore ENEL domestico: il LED presente emette 1 lampo ogni wattora consumato. Misurando il periodo in secondi la potenza in Watt vale 3600/periodo. Siccome il calcolo viene fatto tra numeri interi, per misurare con precisione i periodi brevi (quindi potenze alte), conviene usare l'unità di misura del tempo in decimi o centesini di secondo. Usando i decimi, la formula diventa 36000 / periodo. Volendo usare i centesimi, la formula diventerebbe 360000 / periodo, ma il numeratore non può essere contenuto nei 16 bit previsti (65535) quindi si può usare come numeratore il numero 60000 ottenendo così 1/6 della potenza reale.
Esempio
 
"OUT1":
{
"io_logic": 1,
"direction": "output",
"io_type": "digital",
"default_startup_value": 0,
"inverted": 1,
"filter": 127,
"time_refresh": 3000,
"n_refresh_on": 1,
"n_refresh_off": 1,
"enable": 1,
"plc_function": "powermeter",
"counter_mode": 27, // b11011 memoria del valore precendente e aggiorna dato a periodo ottenuto, azzera tempo ad ogni start a conteggio finito. Considera end come nuovo start, end si fronte ON
"powermeter_k": 60000, // numeratore (nel caso del contatore enel, il risultato è 1/6 della potenza attuale)
"counter_filter": 0, // non usato
"counter_timeout": 0, // 5 secondi
"plc_linked_board_id_io_logic": ["4-11"],
"name": "OUT1",
"description": "Contatore",
"dtype": "Switch"
},
 

 

 

 


Stampa   Email