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 "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"
    ],
    "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"
    ],
    "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", // "!" permette di invertire lo stato dell'ingresso
        "!4-12" // "!" permette di invertire lo stato dell'ingresso
    ],
    "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", // ! invertito IO 11 della scheda 4
        "4-12"
    ],
    "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"
    ],
    "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"
    ],
    "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"
    ],
    "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"
    ],    
    "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 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