Controllori multifunzione programmabili Manuale delle comunicazioni ISTRUZIONI PER L USO M.I.U. ACCS - 11 / 00-07 Cod. J30-304 - 1ACSAC 783.2 783.2 783.2 783.2 10 0.0 1 00.0 1 00.0 1 0 0. 0 10 0.0 1 00.0 1 00.0 10 0.0 L O C L O C L O C L O C 0.0 0.0 0. 0 0.0 0.0 0.0 0.0 0.0 0= 32 0 = 3 2 0= 32 0 = 3 2
Copyright 1996 ASCON spa Tutti i diritti riservati Nessuna parte di questo documento può essere riprodotta o trasmessa in qualsiasi forma a mezzo elettronico o meccanico per alcuno scopo, senza il permesso scritto di ASCON spa. ASCON spa garantisce il massimo impegno per assicurare l accuratezza delle informazioni contenute in questo documento. Tuttavia, al fine di mantenere la leadership tecnologica, i prodotti ASCON sono soggetti a miglioramenti continui; ciò potrebbe richiedere modifiche alle informazioni contenute in questo documento senza alcun preavviso. ASCON spa non sarà responsabile per errori tecnici o editoriali, oppure omissioni qui contenute, né per danni incidentali o conseguenti risultati dalla fornitura, prestazione o uso di questo materiale. AC STATION, AC PROGRAPH e AC EDIT, sono marchi registrati di ASCON spa. Tutti gli altri marchi e nomi di prodotti, sono marchi di fabbrica o marchi registrati dalle proprie società. ASCON spa 20021 Ospiate di Bollate ( Milano ) Italy Via Falzarego 9 / 11 - Tel. ++39-2-333371 - Fax ++39-2-3504243 http://www.ascon.it support@ascon.it 2
I N D I C E 1. INTRODUZIONE... 4 2. MODBUS & JBUS... 5 2.1 DIFFERENZE TRA MODBUS E JBUS... 5 2.2 RIFERIMENTI... 5 2.3 HARDWARE... 5 2.4 IL PROTOCOLLO MODBUS... 6 2.5 FORMATO DEI MESSAGGI... 6 2.6 L'INDIRIZZO... 6 2.7 IL CODICE FUNZIONE... 7 2.8 IL CRC16... 7 2.8.1 Esempio di calcolo del CRC16 in Visual Basic... 8 2.9 SINCRONIZZAZIONE DEI MESSAGGI... 8 3. LE FUNZIONI MODBUS... 9 3.1 READ COILS STATUS ( 01 )... 9 3.2 READ INPUT STATUS ( 02 )... 9 3.3 READ HOLDING REGISTERS ( 03 )... 9 3.4 READ INPUT REGISTERS ( 04 )... 10 3.5 FORCE SINGLE COIL ( 05 )... 10 3.6 PRESET SINGLE REGISTER ( 06 )... 10 3.7 FORCE MULTIPLE COILS ( 15 )... 11 3.8 PRESET MULTIPLE REGISTERS (16)... 11 4. LA GESTIONE DEGLI ERRORI... 13 4.1 CODICI D'ECCEZIONE... 13 5. SISTEMA DI SUPERVISIONE... 14 5.1 LA BASE DATI... 14 5.2 LA COMPOSIZIONE DEI FLOATING POINT UTILIZZATI... 15 5.3 LA FUNZIONE DI SWAP DEI FLOATING POINT... 15 5.4 VARIABILI LOGICHE ( COILS )... 16 5.5 VARIABILI NUMERICHE ( REGISTER )... 18 5.6 COME INSERIRE I DATI DI UN PROGRAMMA USANDO LA SERIALE MODBUS... 24 5.7 VARIABILI DI SISTEMA... 24 5.8 LETTURA E SCRITTURA DELLA CONFIGURAZIONE... 25 5.9 ESEMPIO DI PROGRAMMAZIONE E CONFIGURAZIONE TRAMITE RS 485... 26 5.10 LETTURA DEI MENU... 31 5.11 LETTURA DEI REALI... 32 5.12 LETTURA DELLE STRINGHE... 32 6. GLI INDIRIZZI STATICI E DINAMICI DI MODBUS / JBUS... 33 6.1 GLI INDIRIZZI STATICI... 33 6.2 GLI INDIRIZZI DINAMICI... 33 7. ARCNET... 34 7.1 HARDWARE... 34 7.2 PROTOCOLLO ARCNET PER REGOLATORE SERIE AC... 35 7.3 PROTOCOLLO TIPO A... 35 7.4 PROTOCOLLO TIPO B... 36 7.5 LA GESTIONE DEGLI ERRORI... 37 8. CALIBRAZIONE STAZIONE AC VIA SERIALE... 38 8.1 CALIBRAZIONE USCITE... 38 8.2 INDIRIZZI JBUS NEL MODO TEST... 39 8.3 FUNZIONI DISPONIBILI... 40 3
1. INTRODUZIONE Nello strumento AC-20 le comunicazioni rappresentano una componente molto rilevante, pertanto si ritiene opportuno stabilire in modo sistematico la loro funzione e la descrizione il più dettagliata possibile della loro operatività. Le linee di comunicazione presenti nello strumento, nella massima espansione, sono: ### Linea seriale di programmazione. Si tratta di una linea di tipo RS232 per la connessione temporanea ad un Personal Computer portatile o ad un terminale di programmazione, la cui funzione è quella di caricare, fuori linea, nella memoria dello strumento la configurazione e i dati di avviamento. Essendo permanentemente disponibile anche oltre il momento della programmazione, si suggerisce l'uso di questa linea per funzioni di "debugging" del sistema, consentendo il monitoraggio attraverso un P.C. con software appropriato delle variabili interne in "tempo reale" per la verifica del corretto funzionamento e l'avviamento. Essa é programmata per lavorare con la seguente configurazione: 9600,E,7,2 e non é possibile modificare tali parametri. ### Linea seriale verso il sistema di supervisione. E` una linea di tipo RS485 per la connessione ad un sistema di supervisione. Il protocollo di comunicazione, di tipo Master-Slave, è il JBus di cui è implementato il sottoinsieme delle funzioni necessarie. Lo strumento ha funzione di slave, risponde alle richieste e ai comandi trasmessi da parte del sistema supervisore secondo le modalità e le condizioni stabilite. ### Linea seriale verso l'unità ausiliaria. E` una linea di tipo RS485 per la connessione ad una unità remota di espansione di ingresso e uscita. Tale linea è gestita dallo strumento che ha funzione di master. ### Rete locale peer-to-peer. La rete peer-to-peer consente di inserire lo strumento in una rete ad alta velocità (2,5 Mbit/Sec) per la connessione paritetica con altri apparecchi, uguali o di tipo e/o produttore diverso, per lo scambio di dati. 4
CAP. 2. - MODBUS & JBUS 2. MODBUS & JBUS 2.1 Differenze tra MODBUS e JBUS 2.2 Riferimenti 2.3 Hardware La sola differenza che esiste tra i due protocolli e che il ModBus decrementa di uno gli indirizzi delle tabelle che saranno riportate, pertanto se una variabile si trova all'indirizzo 1 richiederemo la variabile 1 se usiamo il JBus e la variabile 0 nel caso di ModBus. Inoltre i possibili indirizzi ModBus partono da 0 mentre quelli JBus da 1. Gould Modbus Protocol Reference Guide (PI-MBUS-300 Rev. B) April JBUS Specification Global Eng. Doc. EIA STANARD RS -485 Modicon ModBus Protocol Reference Guide (PI-MBUS-300 Rev. H) L 'hardware deve essere RS-485 compatibile. La linea deve essere costituita da un cavo twistato di impedenza caratteristica di circa 120 Ω. Sul circuito CPU della stazione AC sono previsti tre switch (S1,S3,S4) aventi le seguenti funzioni. Switch Funzione Funzione S1-A = Nessuna S1-B = Terminazione 120 Ω S3-A = PullDown S3-B = Nessuna S4-A = Nessuna S4-B = PullUp In grigio le posizioni standard degli switch. La funzione di terminazione (S1-B) é vivamente consigliata per i due dispositivi che si trovano alle due opposte estremità della linea, come risulta dal seguente schema tratto dal manuale originale dello standard RS485: Rt Rt Terzo conduttore=nessuna connessione Rg Rg Rg G R G/R Comune logico Rg Rg Rg Terra G = Generatore R = Ricevitore G/R = Combinazione Generatore Ricevitore Rt = Resistenza di terminazione: un driver può pilotare 32 ricevitori più 2 resistenze da 120 Ω. Rg = Resistenza da 100 Ω. 5
2.4 Il protocollo MODBUS Il protocollo ModBus definisce il formato e la modalità di comunicazione tra un "master" che gestisce il sistema e uno o più "slave" che rispondono alle interrogazioni del master. Esso definisce come il master e gli slaves stabiliscono e interrompono la comunicazione, come trasmettitore e ricevitore sono identificati, come i messaggi sono scambiati e come gli errori sono rilevati. Si possono avere un master e fino a 247 slaves su una linea comune; occorre notare che questo è un limite logico del protocollo, l'interfaccia fisica può peraltro limitare ulteriormente il numero di dispositivi, per esempio l'interfaccia standard RS485 prevede un massimo di 32 strumenti connessi alla linea. Solo il master può iniziare una transazione. Una transazione può avere il formato domanda/risposta diretta ad un singolo slave o broadcast in cui il messaggio viene inviato a tutti i dispositivi sulla linea che non danno risposta. Una transazione è composta da una struttura (frame) singola domanda/singola risposta o una struttura singolo messaggio broadcast/nessuna risposta. Alcune caratteristiche del protocollo non sono definite. Queste sono: standard di interfaccia, baud rate, parità, numero di stop bits. Il protocollo consente inoltre di scegliere tra due "modi" di comunicazione, ASCII e RTU (binario). Negli strumenti ASCON viene implementato solo il modo RTU in quanto più efficiente. Il protocollo JBus è funzionalmente identico al ModBus e se ne differenzia per la diversa numerazione degli indirizzi: nel ModBus questi partono da zero (0000 = 1 indirizzo) mentre nel JBUS partono da uno (0001 = 1 indirizzo) mantenendo questo scostamento per tutta la numerazione. Nel seguito, se non esplicitamente menzionato, pur facendo riferimento al ModBus la descrizione si considera valida per entrambi i protocolli. 2.5 Formato dei messaggi 2.6 L'indirizzo Per poter comunicare tra due dispositivi, il messaggio deve essere contenuto in un "involucro". L'involucro lascia il trasmettitore attraverso una "porta" ed è "portato" lungo la linea fino ad una analoga "porta" sul ricevitore. ModBus stabilisce il formato di questo involucro che, tanto per il master che per lo slave, comprende: L'indirizzo del dispositivo con cui il master ha stabilito la transazione (l'indirizzo 0 corrisponde ad un messaggio broadcast inviato a tutti i dispositivi slave). Il codice della funzione che deve essere o è stata eseguita. I dati che devono essere scambiati. Il controllo d'errore composto secondo l'algoritmo CRC16. Se un dispositivo individua un errore nel messaggio ricevuto (di formato, di parità o nel CRC16) il messaggio viene considerato non valido e scartato, uno slave che rilevi un errore nel messaggio quindi non eseguirà l'azione e non risponderà alla domanda, così come se l'indirizzo non corrisponde ad un dispositivo in linea. Come sopra menzionato, le transazioni ModBus coinvolgono sempre il master, che gestisce la linea, ed uno slave per volta (tranne nel caso di messaggi broadcast). Per identificare il destinatario del messaggio viene trasmesso come primo carattere un byte che contiene l'indirizzo numerico del dispositivo slave selezionato. Ciascuno degli slave quindi avrà assegnato un diverso numero di indirizzo che lo identifica univocamente. Gli indirizzi legali sono quelli da 1 a 247, mentre l'indirizzo 0, che non può essere assegnato ad uno slave, posto in testa al messaggio trasmesso dal master indica che questo è "broadcast", cioè diretto a tutti gli slave contemporaneamente. Possono essere trasmessi come broadcast solo messaggi che non richiedono risposta per espletare la loro funzione, quindi solo le assegnazioni. 6
CAP. 2. - MODBUS & JBUS 2.7 Il codice funzione 2.8 Il CRC16 Il secondo carattere del messaggio identifica la funzione che deve essere eseguita nel messaggio trasmesso dal master, cui lo slave risponde a sua volta con lo stesso codice ad indicare che la funzione è stata eseguita. Sugli strumenti ASCON viene implementato un sottoinsieme delle funzioni ModBus che comprende: ### 01 Read Coil Status ### 02 Read Input Status ### 03 Read Holding Registers ### 04 Read Input registers ### 05 Force Single Coil ### 06 Preset Single register ### 07 Read Status ( Non implementato sulla serie AC ) ### 15 Force multiple Coils ### 16 Preset Multiple Registers Nell'implementazione per gli strumenti ASCON le funzioni 01 e 02 sono operativamente identiche e intercambiabili, così come le funzioni 03 e 04. Per una descrizione completa e dettagliata delle funzioni si rimanda al capitolo 3. Gli ultimi due caratteri del messaggio contengono il codice di ridondanza ciclica (Cyclic Redundancy Check) calcolato secondo l'algoritmo CRC16. Per il calcolo di questi due caratteri il messaggio (indirizzo, codice funzione e dati scartando i bit di start, stop e l'eventuale parità) viene considerato come un unico numero binario continuo di cui il bit più significativo (MSB) viene trasmesso prima. Il messaggio viene innanzitutto moltiplicato per x 16 (spostato a sinistra di 16 bit) e poi diviso per x 16 +x 15 +x 2 +1 espresso come numero binario (1100000000000101). Il quoziente intero viene poi scartato e il resto a 16 bit (inizializzato a FFFFh all'inizio per evitare il caso di un messaggio di soli zeri) viene aggiunto di seguito al messaggio trasmesso. Il messaggio risultante, quando diviso dal dispositivo ricevente per lo stesso polinomio (x 16 +x 15 +x 2 +1) deve dare zero come resto se non sono intervenuti errori (il dispositivo ricevente ricalcola il CRC). Di fatto, dato che il dispositivo che serializza i dati da trasmettere (UART) trasmette prima il bit meno significativo (LSB) anziché il MSB come dovrebbe essere per il calcolo del CRC, questo viene effettuato invertendo il polinomio. Inoltre, dato che il MSB del polinomio influenza solo il quoziente e non il resto, questo viene eliminato rendendolo quindi 1010000000000001. La procedura passo-passo per il calcolo del CRC16 è la seguente: 1) Caricare un registro a 16 bit con FFFFh (tutti i bit a 1). 2) Fare l'or esclusivo del primo carattere con il registro e porre il risultato nel registro. 3) Spostare il registro a destra di un bit. 4) Se il bit uscito a destra dal registro (flag) è un 1, fare l'or esclusivo del polinomio generatore 1010000000000001 con il registro. 5) Ripetere per 8 volte i passi 3 e 4. 6) Fare l'or esclusivo del carattere successivo con il registro e porre il risultato nel registro. 7) Ripetere i passi da 3 a 6 per tutti i caratteri del messaggio. 8) Il contenuto del registro a 16 bit è il codice di ridondanza CRC che deve essere aggiunto al messaggio. 7
2.8.1 Esempio di calcolo del CRC16 in Visual Basic Function CRC16(Stringa As String) As String Dim N As Integer, i As Integer, NByte As Integer Dim CRC As Long, a As Byte Dim Buffer As String NByte = Len(Stringa) CRC = 65535 For i = 1 To NByte a = Asc(Mid$(Stringa, i, 1)) 'C(I) CRC = (CRC Xor a) And &HFFFF Next For N = 0 To 7 If CRC And 1 Then CRC = (CRC \ 2) CRC = (CRC Xor 40961) Else CRC = CRC \ 2 End If Next Buffer = Right$("0000" + Hex$(CRC And &HFFFF), 4) CRC16 = Chr$("&H" + Right$(Buffer, 2)) + Chr$("&H" + Left$(Buffer, 2)) End Function 2.9 Sincronizzazione dei messaggi La sincronizzazione del messaggio tra trasmettitore e ricevitore viene ottenuta interponendo una pausa tra i messaggi pari ad almeno 3.5 volte il tempo di un carattere. Se il dispositivo ricevente non riceve per un tempo di 3 caratteri, ritiene completato il messaggio precedente e considera che il successivo byte ricevuto sarà il primo di un nuovo messaggio e quindi un indirizzo. 8
CAP. 3. - LE FUNZIONI MODBUS 3. LE FUNZIONI MODBUS Viene riportata di seguito la descrizione dettagliata delle funzioni ModBus implementate sugli strumenti ASCON della serie AC 3.1 Read Coils Status ( 01 ) Questa funzione permette di richiedere lo stato ON o OFF di variabili logiche binarie. Il modo broadcast non è permesso. Domanda Oltre all'indirizzo dello slave e al codice funzione (01) il messaggio contiene l'indirizzo di partenza (starting Address) espresso su due bytes e il numero di bit da leggere anch'esso su due bytes. La numerazione degli indirizzi parte da zero (bit1 = 0) per il ModBus, da uno (bit1 = 1) per il JBUS. Esempio: Richiesta di lettura dallo slave 17 del bit dal 0004 al 0015. DATA DATA DATA DATA CRC CRC ADDR FUNC start start bit # bit # Addr HI Addr LO HI LO HI LO 11 01 00 03 00 0C CE 9F Risposta Oltre all'indirizzo dello slave e al codice funzione (01) il messaggio comprende un carattere che contiene il numero di bytes di dati e i caratteri contenenti i dati. I dati sono impaccati, così che un byte contiene lo stato di 8 bit, il bit meno significativo del primo byte contiene il bit corrispondente allo starting Address e così via. Se il numero di bit da leggere non è multiplo di 8, l'ultimo carattere è completato con zeri nei bit più significativi. Esempio: Risposta alla richiesta sopra riportata. DATA DATA DATA CRC CRC ADDR FUNC Byte Count bit bit 04..11 12..15 HI LO 11 01 02 CD 0B 6D 68 3.2 Read Input Status ( 02 ) Questa funzione è operativamente identica alla precedente. 3.3 Read Holding Registers ( 03 ) Questa funzione permette di richiedere il valore di registri a 16 bit (word) contenenti variabili numeriche. Il modo broadcast non è permesso. Domanda Oltre all'indirizzo dello slave e al codice funzione (03) il messaggio contiene l'indirizzo di partenza (starting Address) espresso su due bytes e il numero di word da leggere anch'esso su due bytes. Il numero massimo di word che possono essere lette è 125. La numerazione degli indirizzi parte da zero (word1 = 0) per il ModBus, da uno (word1 = 1) per il JBUS. Esempio: Richiesta di lettura dallo slave 25 dei registri da 069 a 0071. DATA DATA DATA DATA CRC CRC ADDR FUNC start start word # word # Addr HI Addr LO HI LO HI LO 19 03 00 44 00 03 46 06 9
Risposta Oltre all'indirizzo dello slave e al codice funzione (03) il messaggio comprende un carattere che contiene il numero di bytes di dati e i caratteri contenenti i dati. I registri richiedono due bytes ciascuno, il primo dei quali contiene la parte più significativa. Esempio: Risposta alla richiesta sopra riportata. DATA DATA DATA DATA DATA DATA DATA CRC CRC ADDR FUNC Byte word word word word word word Count 69 HI 69 LO 70 HI 70 LO 71 HI 71 LO HI LO 19 03 06 02 2B 00 00 00 64 AF 7A 3.4 Read Input Registers ( 04 ) Questa funzione è operativamente identica alla precedente. 3.5 Force Single Coil ( 05 ) Questa funzione permette di forzare lo stato di una singola variabile binaria ON o OFF. Il modo broadcast è permesso. Domanda Oltre all'indirizzo dello slave e al codice funzione (05) il messaggio contiene l'indirizzo della variabile da forzare su due bytes e due caratteri di cui il primo è posto a FFh (255) per forzare lo stato ON e 00h per forzare OFF, il secondo è posto a zero in ogni caso. La numerazione degli indirizzi parte da zero (bit1 = 0) per il ModBus, da uno (bit1 = 1) per il JBus. Esempio: Richiesta di forzare ON sullo slave 47 il bit 4. DATA DATA DATA DATA CRC CRC ADDR FUNC start start ON/OFF (zero) Addr HI Addr LO HI LO 2F 05 00 03 FF 00 7A 74 Risposta La risposta consiste nel ritrasmettere il messaggio ricevuto dopo che la variabile è stata modificata. Esempio: Risposta alla richiesta sopra riportata. DATA DATA DATA DATA CRC CRC ADDR FUNC bit # bit # ON/OFF (zero) HI LO HI LO 2F 05 00 03 FF 00 7A 74 3.6 Preset Single Register ( 06 ) Questa funzione permette di impostare il valore di un singolo registro a 16 bit. Il modo broadcast è permesso. Domanda Oltre all'indirizzo dello slave e al codice funzione (06) il messaggio contiene l'indirizzo della variabile espresso su due bytes e il valore che deve essere assegnato. La numerazione degli indirizzi parte da zero (word1 = 0) per il ModBus, da uno (word1 = 1) per il JBUS. Esempio: Richiesta di forzare 926 sullo slave 38 all'indirizzo 26. Register Register DATA DATA CRC CRC ADDR FUNC Byte # Byte # WORD WORD HI LO HI LO HI LO 26 06 00 19 03 9E DF 82 10
CAP. 3. - LE FUNZIONI MODBUS Risposta La risposta consiste nel ritrasmettere il messaggio ricevuto dopo che la variabile è stata modificata. Esempio: Risposta alla richiesta sopra riportata. Register Register DATA DATA CRC CRC ADDR FUNC Byte # Byte # Byte Byte HI LO HI LO HI LO 26 06 00 19 03 9E DF 82 3.7 Force Multiple Coils ( 15 ) Questa funzione permette di forzare lo stato di ciascuna variabile binaria in un blocco consecutivo. Il modo broadcast è permesso. Domanda Oltre all'indirizzo dello slave e al codice funzione (15) il messaggio contiene l'indirizzo di partenza (starting Address) espresso su due bytes, il numero di bit da scrivere, il numero di byte che contengono i dati e i caratteri di dati. I dati sono impaccati, così che un byte contiene lo stato di 8 bit, il bit meno significativo del primo byte deve contenere il bit corrispondente allo starting Address e così via. Se il numero di bit da scrivere non è multiplo di 8, l'ultimo carattere va completato con zeri nei bit più significativi. La numerazione degli indirizzi parte da zero (bit1 = 0) per il ModBus, da uno (bit1 = 1) per il JBus. Esempio: Richiesta di forzare, sullo slave 12, 4 bit a partire dall'indirizzo 1. I bit 1 e 4 forzati a "1", gli altri a "0". DATA DATA DATA DATA DATA MASK CRC CRC ADDR FUNC start start bit # bit # Byte bit Addr HI Addr LO HI LO Count 1..4 HI LO 0C 0F 00 00 00 04 01 09 3F 09 Risposta Oltre all'indirizzo dello slave e al codice funzione (15) il messaggio comprende l'indirizzo di partenza (starting Address) e il numero di bit scritti. Esempio: Risposta alla richiesta sopra riportata. DATA DATA DATA DATA CRC CRC ADDR FUNC start start bit # bit # Addr HI Addr LO HI LO HI LO 0C 0F 00 00 00 04 55 15 3.8 Preset Multiple Registers (16) Questa funzione permette di impostare il valore di un blocco consecutivo di registri a 16 bit. Il modo broadcast è permesso. Domanda Oltre all'indirizzo dello slave e al codice funzione (15) il messaggio contiene l'indirizzo di partenza (starting Address), il numero di word da scrivere, il numero di byte che contengono i dati e i caratteri di dati. La numerazione degli indirizzi parte da zero (word1 = 0) per il ModBus, da uno (word1 = 1) per il JBUS. Esempio: Richiesta di impostare, sullo slave 17, 1 word all'indirizzo 35, con valore 268. DATA DATA DATA DATA DATA DATA DATA CRC CRC ADDR FUNC start start word # word # Byte word word Addr HI Addr LO HI LO Count 35 HI 35 LO HI LO 11 10 00 22 00 01 02 01 0C 6C 87 11
Risposta Oltre all'indirizzo dello slave e al codice funzione (16) il messaggio comprende l'indirizzo di partenza (starting Address) e il numero di word scritte. Esempio: Risposta alla richiesta sopra riportata. DATA DATA DATA DATA CRC CRC ADDR FUNC start start word # word # Addr HI Addr LO HI LO HI LO 11 10 00 22 00 01 A3 53 12
CAP. 4 - LA GESTIONE DEGLI ERRORI 4. LA GESTIONE DEGLI ERRORI Nel ModBus esistono due tipi di errori, gestiti in modo diverso: errori di trasmissione ed errori operativi. Gli errori di trasmissione sono errori che alterano il messaggio, nel suo formato, nella parità (se è usata), o nel CRC16. Il dispositivo che rilevi errori di questo tipo nel messaggio lo considera non valido e non dà risposta. Qualora invece il messaggio sia corretto nella sua forma ma la funzione richiesta, per qualsiasi motivo, non sia eseguibile, si ha un errore operativo. A questo errore il dispositivo slave risponde con un messaggio di eccezione. Questo messaggio è composto dall'indirizzo, dal codice della funzione richiesta, da un codice d'errore e dal CRC. Per indicare che la risposta è la notifica di un errore il codice funzione viene ritornato con il bit più significativo a "1". Esempio: Richiesta di lettura dallo slave 10 del bit 1185. DATA DATA DATA DATA CRC CRC ADDR FUNC start start bit # bit # Addr HI Addr LO HI LO HI LO 0A 01 04 A1 00 01 AC 63 Risposta La richiesta chiede il contenuto del bit 1185, che non esiste nello slave. Questi risponde con il codice d'errore "02" (ILLEGAL DATA ADDRESS) e ritorna il codice funzione 81h (129). Esempio: Eccezione alla richiesta sopra riportata. DATA CRC CRC ADDR FUNC Except. Code HI LO 0A 81 02 B0 53 4.1 Codici d'eccezione Sebbene il ModBus standard preveda 8 diversi codici d'eccezione l'implementazione ASCON del protocollo ne prevede solo quattro: Codice Eccezione Significato 01 ILLEGAL FUNCTION Il codice di funzione ricevuto non corrisponde ad una funzione permessa sullo slave indirizzato. 02 ILLEGAL DATA ADDRESS L'indirizzo cui fa riferimento il campo dati non è un indirizzo permesso sullo slave indirizzato. 03 ILLEGAL DATA VALUE Il valore da assegnare cui fa riferimento il campo dati non è permesso per questo indirizzo. 07 NAK - NEGATIVE ACKNOWLEDGEMENT La funzione non può essere eseguita nelle attuali condizioni operative o si è tentato di scrivere in un indirizzo a sola lettura. 13
5. SISTEMA DI SUPERVISIONE La linea seriale verso il sistema di supervisione opera con protocollo JBus, le funzioni implementate sono le seguenti: # Funzione Descrizione 01 Read Output Status (1) Legge lo stato di una o più variabili logiche di uscita (bit) 02 Read Input Status (1) Legge lo stato di una o più variabili logiche di ingresso (bit) 03 Read Output Registers (2) Legge il valore di una o più variabili numeriche di uscita (word) 04 Read Input Registers (2) Legge il valore di una o più variabili numeriche di ingresso (word) 05 Force Single Coil Forza lo stato di una variabile logica (bit) 06 Preset Single Register Scrive il valore di una variabile numerica (word) 15 Force Multiple Coil Forza lo stato di più variabili logiche (bit) 16 Preset Multiple Register Scrive il valore di più variabili numeriche (word) 5.1 La base dati Note 1) Le funzioni 01 e 02 sono gestite dallo strumento allo stesso modo, per cui possono essere usate indifferentemente per la lettura di bit(s). 2) Le funzioni 03 e 04 sono gestite dallo strumento allo stesso modo, per cui possono essere usate indifferentemente per la lettura di word(s). La base dati dello strumento è costituita da due aree: L'area delle variabili logiche, che contiene le variabili che rappresentano stati binari (bits) e cui è possibile accedere attraverso le funzioni ModBus-JBus 01, 02, 05 e 15 L'area delle variabili numeriche, che contiene le variabili che rappresentano valori numerici in formato intero e in virgola mobile. A quest'area è possibile accedere attraverso le funzioni 03, 04, 06 e 16. Dato che tali funzioni leggono e scrivono i dati sotto forma di word (16 bit) e che un valore numerico in virgola mobile richiede 32 bit, lo scambio di ciascuna variabile di questo tipo richiede 2 word. Di conseguenza il tentativo di scrivere in un indirizzo contenente una variabile in virgola mobile con la funzione 06 darà errore 02 (illegal data address) così come la funzione 16 può scrivere in un'area di variabili in virgola mobile solo a condizione di scrivere interamente le variabili cui accede, non può cioè scrivere una serie di word a partire dall'indirizzo contenente la seconda parte di una variabile e il numero di word scritte deve essere tale da non terminare con la prima parte di una variabile. L'area numerica è inoltre suddivisa in due sezioni, la sezione di supervisione che comprende le variabili essenziali del processo e la sezione parametri che contiene i parametri principali. 14
5.2 La composizione dei floating point utilizzati CAP. 5. - SISTEMA DI SUPERVISIONE Il floating point utilizzato dallo strumento è del tipo Single. Un numero single di 4 byte (32 bit), viene diviso in 3 campi: Lunghezza in bit 1 8 23 S e f msb lsb msb lsb Il valore v del numero viene determinato da: if 0 < e < 255, then v = (-1) s * 2 (e-127) * (1.f) if e = 0 and f <> 0, then v = (-1) s * 2 (-126) * (0.f) if e = 0 and f = 0, then v = (-1) s * 0 if e = 255 and f = 0, then v = (-1) s * Inf. if e = 255 and f <> 0, then v è un NaN. 5.3 La funzione di swap dei floating point Sulle stazioni AC, dalla release 00I per l AC10 e AC20 e la release 00D per l AC30 è stata aggiunta la possibilità di swappare (invertire) l ordine dei bytes delle word costituenti il floating point utilizzati dal protocollo ModBus. Nel menù della stazione AC Main Comm è stata aggiunta la selezione Sw. Float con la possibilità di selezionare Si o No. Sw. Float = No Questa è la modalità standard usata dalla stazione AC e significa che non verrà effettuata nessuna operazione di riordino dei bytes ricevuti o trasmessi quindi l ordine dei bytes utilizzato è il seguente: Floating point Word High Word Low Byte 0 Byte 1 Byte 2 Byte 3 Sw. Float = Yes Questa è la modalità swap usata dalla stazione AC e significa che i bytes ricevuti o trasmessi verranno riordinati o interpretati secondo il seguente ordine: Floating point Word High Word Low Byte 2 Byte 3 Byte 0 Byte 1 15
5.4 Variabili logiche ( Coils ) Indirizzo JBus Modulo Variabile Prograh 1 DI #1 Ingresso logico #1 NO 2 DI #2 Ingresso logico #2 NO 3 DI #3 Ingresso logico #3 NO 4 DI #4 Ingresso logico #4 NO 5 DI #5 Ingresso logico #5 NO 6 DI #6 Ingresso logico #6 NO 7 DI #7 Ingresso logico #7 NO 8 DI #8 Ingresso logico #8 NO 9 DI #9 Ingresso logico #9 unità aux. NO 10 DI #10 Ingresso logico #10 unità aux. NO 11 DI #11 Ingresso logico #11 unità aux. NO 12 DI #12 Ingresso logico #12 unità aux. NO 13 DI #13 Ingresso logico #13 unità aux. NO 14 DI #14 Ingresso logico #14 unità aux. NO 15 DI #15 Ingresso logico #15 unità aux. NO 16 DI #16 Ingresso logico #16 unità aux. NO 17 DI #17 Ingresso logico #17 unità aux. NO 18 DI #18 Ingresso logico #18 unità aux. NO 19 DI #19 Ingresso logico #19 unità aux. NO 20 DI #20 Ingresso logico #20 unità aux. NO 21 DI #21 Ingresso logico #21 unità aux. NO 22 DI #22 Ingresso logico #22 unità aux. NO 23 DI #23 Ingresso logico #23 unità aux. NO 24 DI #24 Ingresso logico #23 unità aux. NO 25 DI #25 Ingresso logico #25 unità aux. NO 26 DI #26 Ingresso logico #26 unità aux. NO 27 DI #27 Ingresso logico #27 unità aux. NO 28 DI #28 Ingresso logico #28 unità aux. NO 29 DI #29 Ingresso logico #29 unità aux. NO 30 DI #30 Ingresso logico #30 unità aux. NO 31 DI #31 Ingresso logico #31 unità aux. NO 32 DI #32 Ingresso logico #32 unità aux. NO 33 DO #1 Uscita logica #1 NO 34 DO #2 Uscita logica #2 NO 35 DO #3 Uscita logica #3 NO 36 DO #4 Uscita logica #4 NO 37 DO #5 Uscita logica #5 NO 38 DO #6 Uscita logica #6 NO 39 DO #7 Uscita logica #7 NO 40 DO #8 Uscita logica #8 NO 41 DO #9 Uscita logica #9 unità aux. NO 42 DO #10 Uscita logica #10 unità aux. NO 43 DO #11 Uscita logica #11 unità aux. NO 44 DO #12 Uscita logica #12 unità aux. NO 45 DO #13 Uscita logica #13 unità aux. NO 46 DO #14 Uscita logica #14 unità aux. NO 47 DO #15 Uscita logica #15 unità aux. NO 48 DO #16 Uscita logica #16 unità aux. NO 49 DO #17 Uscita logica #17 unità aux. NO 50 DO #18 Uscita logica #18 unità aux. NO 51 DO #19 Uscita logica #19 unità aux. NO 52 DO #20 Uscita logica #20 unità aux. NO 53 DO #21 Uscita logica #21 unità aux. NO 54 DO #22 Uscita logica #22 unità aux. NO 55 DO #23 Uscita logica #23 unità aux. NO 56 DO #24 Uscita logica #24 unità aux. NO 57 DO #25 Uscita logica #25 unità aux. NO 58 DO #26 Uscita logica #26 unità aux. NO 59 DO #27 Uscita logica #27 unità aux. NO 60 DO #28 Uscita logica #28 unità aux. NO 61 DO #29 Uscita logica #29 unità aux. NO 62 DO #30 Uscita logica #30 unità aux. NO 63 DO #31 Uscita logica #31 unità aux. NO 64 DO #32 Uscita logica #32 unità aux. NO 65 MV #1 HCMV #1 DA/M - Modo Auto/Man da tastiera #1 ( 1 ) Abilit. Scritt. SI 16
CAP. 5. - SISTEMA DI SUPERVISIONE Indirizzo JBus Modulo Prograh Variabile Abilit. Scritt. 66 MV #2 DA/M - Modo Auto/Man da tastiera #2 ( 1 ) SI 67 MV #3 DA/M - Modo Auto/Man da tastiera #3 ( 1 ) Si HCMV #2 68 MV #4 DA/M - Modo Auto/Man da tastiera #4 ( 1 ) Si 69 MV #1 DCAM - Modo Auto/Man da computer #1 ( 2 ) SI 70 MV #2 DCAM - Modo Auto/Man da computer #2 ( 2 ) SI 71 MV #3 DCAM - Modo Auto/Man da computer #3 ( 2 ) SI 72 MV #4 DCAM - Modo Auto/Man da computer #4 ( 2 ) SI 73 MV #1 Stato di uscita Hold (0 = Normale, 1 = Hold) NO HCMV #1 74 MV #2 Stato di uscita Hold (0 = Normale, 1 = Hold) NO 75 MV #3 Stato di uscita Hold (0 = Normale, 1 = Hold) NO HCMV #2 76 MV #4 Stato di uscita Hold (0 = Normale, 1 = Hold) NO 77..84 CDIO #1 DIO1 DIO8 I/O digtali da computer SI 85..92 CDIO #2 DIO1 DIO8 I/O digtali da computer SI 93..100 CDIO #3 DIO1 DIO8 I/O digtali da computer SI 101..108 CDIO #4 DIO1 DIO8 I/O digtali da computer SI 109 PRG #1 Run programma. NO 110 PRG #1 Hold programma. NO 111 PRG #2 Run programma. NO 112 PRG #2 Hold programma. NO 113 PRG #3 Run programma. NO 114 PRG #3 Hold programma. NO 115 PRG #4 Run programma. NO 116 PRG #4 Hold programma. NO Note 1) I coils 65.. 68 agiscono sul piedino di ingresso DA/M del modulo di funzione MV ottenendo come risultato una duplicazione della funzione del tasto A/M sul frontale del regolatore (0 = Auto, 1 = Man). 2) I coils 69.. 72 agiscono sulla base dati DCAM del modulo di funzione MV. In questo caso il regolatore si troverà ad operare nello stato di Manuale senza che questo sia visualizzato sui vari display dello strumento. I coils 69.. 72 hanno una priorità inferiore dei coils 65.. 68 (0 = Auto, 1 = Man). 17
5.5 Variabili numeriche ( Register ) Sezione supervisione Ind. JBus Tipo Modulo Prograph Variabile 1 FP AI #1 Ingresso #1 in unità ingegneristiche NO 3 FP AI #2 Ingresso #2 in unità ingegneristiche NO 5 FP AI #3 Ingresso #3 in unità ingegneristiche NO 7 FP AI #4 Ingresso #4 in unità ingegneristiche NO 9 FP AI #5 Ingresso #5 in unità ingegneristiche NO 11 FP AI #6 Ingresso #6 in unità ingegneristiche NO 13 FP AI #7 Ingresso #7 in unità ingegneristiche NO 15 FP AI #8 Ingresso #8 in unità ingegneristiche NO 17 FP AI #1 Ingresso Impulsivo in unità ingegneristiche NO 19 FP AO #1 Uscita analogica #1 in % NO 21 FP AO #2 Uscita analogica #2 in % NO 23 FP AO #3 Uscita analogica #3 in % NO 25 FP AO #4 Uscita analogica #4 in % NO 27 FP AO #5 Uscita analogica #1 unità aux. AAC-EU/88/4 NO 29 FP AO #6 Uscita analogica #2 unità aux. AAC-EU/88/4 NO 31 FP AO #7 Uscita analogica #3 unità aux. AAC-EU/88/4 NO 33 FP AO #8 Uscita analogica #4 unità aux. AAC-EU/88/4 NO 35 FP SDV #1 Set point da computer #1 SI 37 FP SDV #2 Set point da computer #2 SI 39 FP SDV #3 Set point da computer #3 SI 41 FP SDV #4 Set point da computer #4 SI 43 W SDV #1 Stato operativo impostato da tastiera #1 (8) NO 44 W SDV #2 Stato operativo impostato da tastiera #2 (8) NO 45 W SDV #3 Stato operativo impostato da tastiera #3 (8) NO 46 W SDV #4 Stato operativo impostato da tastiera #4 (8) NO 47 FP SDV #1 Set point operante #1 NO 49 FP SDV #1 Set point di target #1 NO 51 FP SDV #1 Set point locale #1 SI 53 FP SDV #1 Set point di rapporto #1 NO 55 FP SDV #2 Set point operante #2 NO 57 FP SDV #2 Set point di target #2 NO 59 FP SDV #2 Set point locale #2 SI 61 FP SDV #2 Set point di rapporto #2 NO 63 FP SDV #3 Set point operante #3 NO 65 FP SDV #3 Set point di target #3 NO 67 FP SDV #3 Set point locale #3 SI 69 FP SDV #3 Set point di rapporto #3 NO 71 FP SDV #4 Set point operante #4 NO 73 FP SDV #4 Set point di target #4 NO 75 FP SDV #4 Set point locale #4 SI 77 FP SDV #4 Set point di rapporto #4 NO 79 W SDV #1 Modifica stato operativo da computer #1 (9) SI 80 W SDV #2 Modifica stato da operativo computer #2 (9) SI 81 W SDV #3 Modifica stato da operativo computer #3 (9) SI 82 W SDV #4 Modifica stato da operativo computer #4 (9) SI 83... 149 150... 200 Abilit. Scritt. - - Area disponibile per variabili aggiuntive - - - Area occupata da variabili di sistema vedi pag. 24-18
CAP. 5. - SISTEMA DI SUPERVISIONE Sezione parametri Ind. JBus Tipo Modulo Prograph Variabile Abilit. Scritt. 201 FP AI #1 TFIL - Costante di tempo del filtro SI 203 FP AI #2 TFIL - Costante di tempo del filtro SI 205 FP AI #3 TFIL - Costante di tempo del filtro SI 207 FP AI #4 TFIL - Costante di tempo del filtro SI 209 FP AI #5 TFIL - Costante di tempo del filtro SI 211 FP AI #6 TFIL - Costante di tempo del filtro SI 213 FP AI #7 TFIL - Costante di tempo del filtro SI 215 FP AI #8 TFIL - Costante di tempo del filtro SI 217...232 W DI #1 DI #16 Tempo di ritardo ingressi digitali DIN1.. SI DIN16 233...248 W DO#1 DO#16 Tempo di ritardo uscite digitali DOUT1.. SI DOUT16 249 FP SDV #1 SLU - Pendenza del Set point in salita SI 251 FP SDV #1 SLD - Pendenza del Set point in discesa SI 253 FP SDV #1 BETA - Coefficente di pesatura Set point SI locale 255 FP SDV #2 SLU - Pendenza del Set point in salita SI 257 FP SDV #2 SLD - Pendenza del Set point in discesa SI 259 FP SDV #2 BETA - Coefficente di pesatura Set point SI locale 261 FP SDV #3 SLU - Pendenza del Set point in salita SI 263 FP SDV #3 SLD - Pendenza del Set point in discesa SI 265 FP SDV #3 BETA - Coefficente di pesatura Set point SI locale 267 FP SDV #4 SLU - Pendenza del Set point in salita SI 269 FP SDV #4 SLD - Pendenza del Set point in discesa SI 271 FP SDV #4 BETA - Coefficente di pesatura Set point SI locale 273 FP PID #1 PBND - Banda proporzionale SI 275 W PID #1 INT - Tempo integrale SI 276 FP PID #1 DERT - Tempo derivativo SI 278 W PID #1 CPID - Abilitazione coefficenti SI regolazione 279 FP PID #2 PBND - Banda proporzionale SI 281 W PID #2 INT - Tempo integrale SI 282 FP PID #2 DERT - Tempo derivativo SI 284 W PID #2 CPID - Abilitazione coefficenti SI regolazione 285 FP PID #3 PBND - Banda proporzionale SI 287 W PID #3 INT - Tempo integrale SI 288 FP PID #3 DERT - Tempo derivativo SI 290 W PID #3 CPID - Abilitazione coefficenti SI regolazione 291 FP PID #4 PBND - Banda proporzionale SI 293 W PID #4 INT - Tempo integrale SI 294 FP PID #4 DERT - Tempo derivativo SI 296 W PID #4 CPID - Abilitazione coefficenti SI regolazione 297 FP MV #1 CTRK - Segnale di tracking da computer SI HCMV #1 299 FP MV #1 YMIN - Minima uscita SI HCMV #1 301 FP MV #1 YMAX - Massima uscita SI HCMV #1 303 FP MV #2 CTRK - Segnale di tracking da computer SI 305 FP MV #2 YMIN - Minima uscita SI 307 FP MV #2 YMAX - Massima uscita SI 309 FP MV #3 CTRK - Segnale di tracking da computer SI HCMV #2 311 FP MV #3 YMIN - Minima uscita SI HCMV #2 313 FP MV #3 HCMV #2 YMAX - Massima uscita SI 19
Tipo Modulo Prograph Variabile 315 FP MV #4 CTRK - Segnale di tracking da computer SI 317 FP MV #4 YMIN - Minima uscita SI 319 FP MV #4 YMAX - Massima uscita SI 321 FP LMT #1 Low - Valore del limite inferiore SI 323 FP LMT #1 High - Valore del limite superiore SI 325 FP LMT #2 Low - Valore del limite inferiore SI 327 FP LMT #2 High - Valore del limite superiore SI 329 FP LMT #3 Low - Valore del limite inferiore SI 331 FP LMT #3 High - Valore del limite superiore SI 333 FP LMT #4 Low - Valore del limite inferiore SI 335 FP LMT #4 High - Valore del limite superiore SI 337 FP ALM #1 VMIN - Soglia inferiore allarme SI 339 FP ALM #1 VMAX - Soglia superiore allarme SI 341 FP ALM #1 HYS - Isteresi allarme SI 343 W ALM #1 SLC - Selezione ingresso SI 344 FP ALM #2 VMIN - Soglia inferiore allarme SI 346 FP ALM #2 VMAX - Soglia superiore allarme SI 348 FP ALM #2 HYS - Isteresi allarme SI 350 W ALM #2 SLC - Selezione ingresso SI 351 FP ALM #3 VMIN - Soglia inferiore allarme SI 353 FP ALM #3 VMAX - Soglia superiore allarme SI 355 FP ALM #3 HYS - Isteresi allarme SI 357 W ALM #3 SLC - Selezione ingresso SI 358 FP ALM #4 VMIN - Soglia inferiore allarme SI 360 FP ALM #4 VMAX - Soglia superiore allarme SI 362 FP ALM #4 HYS - Isteresi allarme SI 364 W ALM #4 SLC - Selezione ingresso SI 365 FP ALM #5 VMIN - Soglia inferiore allarme SI 367 FP ALM #5 VMAX - Soglia superiore allarme SI 369 FP ALM #5 HYS - Isteresi allarme SI 371 W ALM #5 SLC - Selezione ingresso SI 372 FP ALM #6 VMIN - Soglia inferiore allarme SI 374 FP ALM #6 VMAX - Soglia superiore allarme SI 376 FP ALM #6 HYS - Isteresi allarme SI 378 W ALM #6 SLC - Selezione ingresso SI 379 FP ALM #7 VMIN - Soglia inferiore allarme SI 381 FP ALM #7 VMAX - Soglia superiore allarme SI 383 FP ALM #7 HYS - Isteresi allarme SI 385 W ALM #7 SLC - Selezione ingresso SI 386 FP ALM #8 VMIN - Soglia inferiore allarme SI 388 FP ALM #8 VMAX - Soglia superiore allarme SI 390 FP ALM #8 HYS - Isteresi allarme SI 392 W ALM #8 SLC - Selezione ingresso SI 393 FP HCMV #1 DBND - Banda morta caldo - freddo SI 395 FP HCMV #2 DBND - Banda morta caldo - freddo SI 397 FP AOUT #1: TFIL - Costante di tempo del filtro SI 399 FP AOUT #2: TFIL - Costante di tempo del filtro SI 401 FP AOUT #3 TFIL - Costante di tempo del filtro SI 403 FP AOUT #4 TFIL - Costante di tempo del filtro SI 405 FP AOUT #5 TFIL - Costante di tempo del filtro SI 407 FP AOUT #6 TFIL - Costante di tempo del filtro SI 409 FP AOUT #7 TFIL - Costante di tempo del filtro SI 411 FP AOUT #8 TFIL - Costante di tempo del filtro SI 413 FP FI TFIL - Costante di tempo del filtro SI Indirizzo JBus Abilit. Scritt. 20
CAP. 5. - SISTEMA DI SUPERVISIONE Indirizzo JBus Tipo Modulo Prograph Variabile Abilit. Scritt. 415..429 FP CAIO #1 I/O 1..8 Valori analogici da computer SI 431..445 FP CAIO #2 I/O 1..8 Valori analogici da computer SI 447..461 FP CAIO #3 I/O 1..8 Valori analogici da computer SI 463..477 FP CAIO #4 I/O 1..8 Valori analogici da computer SI 479 W SELP #1 ITEM - scelta item del computer (1) SI 480 W SELP #2 ITEM - scelta item del computer (1) SI 481 FP MV #1 Y% - Variabile regolata SI 483 FP MV #2 Y% - Variabile regolata SI 485 FP MV #3 Y% - Variabile regolata SI 487 FP MV #4 Y% - Variabile regolata SI 489 FP PRG #1 NPGM - N programma selezionato. SI 491 FP PRG #1 NSGM - N segmento in esecuzione. SI 493 FP PRG #1 SRT - Tempo residuo segmento in SI esecuzione. 495 FP PRG #1 TCYC - N totale di cicli del programma SI selezionato. 497 FP PRG #1 ACYC - N del ciclo corrente del prog. SI Selezionato. 499 FP PRG #2 NPGM - N programma selezionato. SI 501 FP PRG #2 NSGM - N segmento in esecuzione del SI blocco PRG_#2 503 FP PRG #2 SRT - Tempo residuo segmento in SI esecuzione. 505 FP PRG #2 TCYC - N totale di cicli del programma SI selezionato. 507 FP PRG #2 ACYC - N del ciclo corrente del prog. SI Selezionato. 509 FP PRG #3 NPGM - N programma selezionato. SI 511 FP PRG #3 NSGM - N segmento in esecuzione. SI 513 FP PRG #3 SRT - Tempo residuo segmento in SI esecuzione. 515 FP PRG #3 TCYC - N totale di cicli del programma SI selezionato. 517 FP PRG #3 ACYC - N del ciclo corrente del prog. SI Selezionato. 519 FP PRG #4 NPGM - N programma selezionato. SI 521 FP PRG #4 NSGM - N segmento in esecuzione. SI 523 FP PRG #4 SRT - Tempo residuo segmento in SI esecuzione. 525 FP PRG #4 TCYC - N totale di cicli del programma SI selezionato. 527 FP PRG #4 ACYC - N del ciclo corrente del prog. SI Selezionato. 529..536 W RTC DOUT #1 #8 Domenica (2) SI 537..544 W RTC DOUT #1 #8 Lunedi (2) SI 545..552 W RTC DOUT #1 #8 Martedi (2) SI 553..560 W RTC DOUT #1 #8 Mercoledi (2) SI 561..568 W RTC DOUT #1 #8 Giovedi (2) SI 569..576 W RTC DOUT #1 #8 Venerdi (2) SI 577..584 W RTC DOUT #1 #8 Sabato (2) SI 585..600 W DI #17 #32 Tempo di ritardo ingressi digitali. SI 601..616 W DO #17 #32 Tempo di ritardo uscite digitali. SI 617 W 16SW#1 Comandi da computer SI 618 W 16SW#2 Comandi da computer SI 619 W 16SW#3 Comandi da computer SI 620 W 16SW#4 Comandi da computer SI 621..650 - FREE - - Gli indirizzi di Jbus delle soglie d allarme superiori a 8 e dei limiti analogici superiori a 4, si trovano nel file nome_progetto.mba che viene generato dal programma AC-Prograph / AC-Edit al momento della spedizione della strategia alla stazione AC. Questi indirizzi, a differenza di quelli illustrati in tabella, sono dinamici e possono cambiare di valore ad ogni spedizione della strategia alla stazione AC. Per essere certi del loro valore, si deve completare in ogni minimo dettaglio la strategia con AC-Prograph / AC-Edit e quindi, spedirla alla stazione AC. A questo punto il file ausiliario nome_progetto.mba conterrà tutte le informazioni e indirizzi dinamici della strategia corrente, non pubblicati sul presente manuale. Per maggiori dettagli a riguardo, si veda il Cap. 6 21
Indirizzo JBus Tipo Modulo Prograph Variabile Abilit. Scritt. 651 - RISERVATO - - 652..669 - FREE - - 670 W - Comando (3) SI 671 W PRG#1 PRG#4 Prg.N - Programma in editazione (4) SI 672 W PRG#1 PRG#4 Node N - Segmento in editazione (4) SI 673 W PRG#1 PRG#4 Time Type - Unita di tempo (0=h:m, SI 1=m:s) 674 W PRG#1 PRG#4 Fast - Fattore di accelerazione (1..360) SI 675 W PRG#1 PRG#4 Cicli - Ripetizioni programma (0..999) SI 676 W PRG#1 PRG#4 Restart - Restart dopo Power Fail (0..5) SI 677 FP PRG#1 PRG#4 Dev1 - Condizione di PowerFail (7) SI 679 FP PRG#1 PRG#4 Dev2 - Condizione di PowerFail (7) SI 681 W PRG#1 PRG#4 Tim1 - Condizione di PowerFail SI 682 W PRG#1 PRG#4 Tim2 - Condizione di PowerFail SI 683 FP PRG#1 PRG#4 Range Lo - Inizio scala PV Programma SI 685 FP PRG#1 PRG#4 Range Hi - Fondo scala PV Programma SI 687 FP PRG#1 PRG#4 Final SetPoint - SP di arrivo del seg. SI 689 FP PRG#1 PRG#4 Aux SP - SP ausiliario SI 691 W PRG#1 PRG#4 Exec. Time - Durata del segmento (5) SI 692 FP PRG#1 PRG#4 Allowed Dev. - Massima Dev. ammessa SI 694 W PRG#1 PRG#4 DO1 DO16 - Uscite logiche del seg. SI 695 W PRG#1 PRG#4 End Prg. - Ultimo segmento (1=TRUE; SI 0=FALSE ) 696 W PRG#1 PRG#4 D.P. - Formato scala SI 697 W RTC Anno orologio (6) SI 698 W RTC Mese (6) SI 699 W RTC Giorno (6) SI 700 W RTC Giorno della settimana (6) SI 701 W RTC Ora (6) SI 702 W RTC Minuto (6) SI Note 1) Il computer sceglie l item nel modo seguente: Item richiesto ( MSB ) Richiesta ( LSB ) Item number 0..15 0 se si rilascia, <> 0 se si richiede 2) Il bit 15 del valore ritornato, indica l abilitazione della generazione dell impulso all ora impostata. I bit da 14 a 0 contengono il valore nel formato (minuti + ( Ore x 60)) 3) Comando: Questo indirizzo non é un dato del DataBase del regolatore bensì un comando: Funzione Valore del codice Delete All Programs -2 Delete Current Segment -1 Read Data 0 Write Data 1 Insert Segment after 2 Delete Current Program 3 Add a New Program ( = ) 4 AddNewSegment ( = ) 5 ( = ) da usarsi solo per la costruzione di un nuovo programma. Tra il Sw del regolatore e la comunicazione seriale esiste un buffer di transito ove é possibile depositare i dati prima del comando di lettura o viceversa prima del comando di scrittura. ( Valido solo per gli indirizzi da 670 a 702 ) Quando si scrive o si legge si scrive e si legge sul buffer di transito; per far sì che l informazione raggiunga o pervenga effettivamente dal database del regolatore bisogna eseguire il comando appropriato. Questo significa che se si vuole scrivere un segmento bisogna prima preparare il buffer con tutti i dati e poi dare il comando di scrittura. 22
CAP. 5. - SISTEMA DI SUPERVISIONE Pertanto scrivendo per esempio che il nuovo valore di Fast vale 2 fare come segue: PSReg(Ind,674,2) questa istruzione permette di settare l indirizzo 674 al valore di 2 ma ciò non basta perché essa ha ottenuto il solo risultato di scriverlo sul buffer. Per far sì che il valore 2 raggiunga effettivamente la sua destinazione occore dare il seguente comando: PSReg(Ind,670,1) ovvero il comando di WRITE del Buffer. 4) Non appena si scrivono il numero di programma da editare ed il numero di segmento, il Sw del regolatore provvede a caricare (se il programma ed il segmento esistono altrimenti da un codice di exception=8) tutti gli altri dati del programma e del segmento che si rendono così disponibili per la lettura. In altre parole questa sequenza é equivalente ad eseguire un comando di READ. 5) La durata del segmento é espressa in unità congruenti con quanto scelto all indirizzo 673 ovvero ore:minuti oppure minuti:secondi. In entrambi i casi il numero viene espresso nelle unità più piccole, ovvero in minuti nel primo caso ed in secondi nel secondo caso. Esempio 2ore e 45 minuti =2*60+45=165 minuti 6) Per leggere l orologio basta leggere con la funzione Read Registers i registri dal 697 al 702. Si tenga presente che: a) l anno è espresso con numeri da 0..99 b) il mese con numeri da 1..12 (Gennaio=1;Dicembre=12) c)l indirizzo 699 é il giorno del mese (1..31),mentre il 700 é il giorno della settimana (1=Domenica, 2=Lunedi,...7=Sabato) Per scrivere bisogna fare nell ordine : a) Fermare l orologio con la funzione 85 in cui il almeno primo dato del campo DATA vale 1 : Addr 85 01 01 CRC16 CRC16 b) Scrivere la nuova data negli indirizzi dal 697 al 702, tenendo conto che al momento in cui si ferma l orologio la data corrente viene copiata in questi indirizzi. Ciò vuol dire che basta modificare solo quello che serve. c) Far ripartire l orologio con la funzione 85 con il primo dato del campo DATA uguale a 0. Addr 85 00 00 CRC16 CRC16 7) Per scrivere un float non si possono usare (questo solo nell ambito set programmato) due operazioni consecutive del comando PSReg ma si deve usare il comando PMReg. 8) Stato operativo impostato da tastiera. Indica lo stato di funzionamento della stazione AC. La word a 16 bit ricevuta è da interpretare nel seguente modo: MSB LSB Non usati Possible Set M ode Active M ode Keyboard Set point M ode Il significato del campo Possible Set Mode (Stati possibili) è il seguente: 0 Solo Locale 1 Solo Remoto 2 Locale / Remoto 3 Locale / Computer 4 Locale / Remoto / Computer 23
Il significato del campo Active Mode (Stato attivo) è il seguente: 0 None 1 Locale 2 Remoto 3 Computer Il significato del campo Keyboard Setpoint Mode (stato richiesto da tastiera) è il seguente: 0 None 1 Locale 2 Remoto 3 Computer 9) Modifica dello stato di funzionamento da computer. La word a 16 bit trasmessa o ricevuta, ha il seguente significato: 0 None 1 Locale 2 Remoto 3 Computer 5.6 Come inserire i dati di un programma usando la seriale ModBus 1) Lanciare, se é il caso, il comando di cancellazione di tutti i programmi: PSReg(Ind,670,-2). Scrivere il numero del nuovo programma all indirizzo 671: PSReg(Ind,671,NProg) Si tenga presente che i numeri programma vanno da 0..15 per il primo blocco Programmatore (PRG_#1),da 16..31 per il secondo (PRG_#2), da 32..47 per il terzo (PRG_#3) e da 48..64 per il quarto (PRG_#4). 2) Scrivere tutti i dati comuni del programma (unità di tempo, Fast, ricicli, restart, dev1, dev2, time1, time2, Range Low, Range High) quindi tutti i dati relativi al segmento 0 o segmento iniziale (set point, set point aux, durata, max deviazione, stati logici, formato ) 3) Dare il comando di nuovo programma: PSReg(Ind,670,4) 4) Scrivere tutti i dati del segmento numero N (set point, set point aux, durata, max deviazione, stati logici, format ) 5) Dare il comando di aggiungi nuovo segmento: PSReg(Ind,670,5) 6) Ripetere gli step 4 e 5 per N che va da 1 al numero finale di segmenti del programma. 5.7 Variabili di sistema Sezione di supervisione Indirizzo JBus Tipo Variabile Abilit. Scritt. 0151 W Password ( 2 lettere vedi nota 1 ) NO 0152 W Password (2 lettere vedi nota 1 ) NO 0153 W Password (2 lettere vedi nota 1 ) NO 0154 W Blocco gruppi ( Vedi nota 2 ) NO 0155 W Codice prodotto ( Vedi nota 3 ) NO 0156 W Codice prodotto ( Vedi nota 3 ) NO 0157 W Codice produttore ( ASCON = 600 ) NO 0158 Identificativo di release ( Vedi nota 3 ) NO 0159 - Identificativo di release ( Vedi nota 3 ) NO 0191 FP TS tempo di campionamento SI 24
CAP. 5. - SISTEMA DI SUPERVISIONE Note 1) La password è composta da 3 words, ogni words sono due lettere espresse in decimale. La sua rappresentazione è quindi la seguente: PASSWORD lettera n 1 lettera n 2 lettera n 3 lettera n 4 lettera n 5 0 0151 0152 0153 2) Il blocco gruppi è una word, dove ogni gruppo occupa 3 bits. I gruppi sono identificati come segue: A-B-C-Set Pnt-Manual I gruppi A-B possono essere: Visibili e modificabili = 10 Visibili = 01 Non Visibili = 00 I gruppi C-Set Pnt-Manual possono essere: Modificabili = 1 Non modificabili = 0 Blocco gruppi Manual Set Pnt C B A 3) Il codice di prodotto e l identificativo di release, sono composti da 4 caratteri ASCII rappresentati da 2 words. Codice prodotto lettera n 1 lettera n 2 lettera n 3 lettera n 4 0155 0156 Identificativo di release lettera n 1 lettera n 2 lettera n 3 lettera n 4 0158 0159 Esempio : Release = 00B 32 48 48 66 32 * 256 + 48 = 8240 48 * 256 + 66 = 12354 5.8 Lettura e scrittura della configurazione E' possibile Leggere Scrivere la Configurazione da ModBus, usando le istruzioni: Preset Multiple Register e Read Register Tramite queste istruzioni si può accedere in lettura e scrittura su tutto il DataBase del regolatore Registro Tipo Dati Lettura Scrittura 6000... 7FFF NET SI NO 8000... 8FFF MENU SI NO 9000... 9FFF INTERI SI SI A000... AFFF REALI SI SI B000... BFFF STRINGHE SI SI C000... CFFF COILS SI SI D000..DFFF REGISTERS SI SI E000..E7FF Variabili ARCNET da produrre SI SI (Nota) E800..EFFF Variabili ARCNET da consumare SI SI (Nota) 25
Nota E possibile scrivere queste variabili richiedendo prima di scrivere la configurazione. La scrittura dell intero file di configurazione può essere fatto oltre che dalla porta RS232 sul frontale dello strumento anche dalla porta Main Comm RS485 sul backpanel dello stesso. Questa, poiché deve essere una operazione indivisibile, deve essere preannunciata e terminata con due messaggi specifici. All interno di tali messaggi deve essere inviato il file di configurazione. Il messaggio di inizio deve essere: PresetReg(Indirizzo,651,0); (*atomic operation beginning*) e quello di fine : PresetReg(Indirizzo,651,1); (*atomic operation ending*) Tutte le operazioni di scrittura (e di lettura) sul database della tabella sopra devono essere fatte assolutamente con Preset Multiple Registers 5.9 Esempio di programmazione e configurazione tramite RS 485 Viene riportato di seguito un esempio di programma in Turbo Pascal che legge un file del tipo *.S19 generato da AC-Prograph e lo trasferisce alla stazione AC via RS-485 ( Main Comm ) con protocollo JBus. program config; uses crt,mbuscom,setta; var bufin: array[1..16384] of Char; { 16K buffer} infile :TEXT; base:word; riga,filename:string; indirizzo:byte; debugmode,fstring:boolean; scelta:arofindex; procedure Error(E: integer); begin case E of 1 : WriteLn('Error <1>: Illegal Function.'); 2 : WriteLn('Error <2>: Illegal Data Address.'); 3 : WriteLn('Error <3>: Illegal Data Value.'); 7 : WriteLn('Error <7>: NAK - Negative Acknowledgment.'); 16: WriteLn('Error!!!: No Answer.'); 17: WriteLn('Error!!!: Protocol Error.'); 18: WriteLn('Error!!!: Frame Error.'); 19: WriteLn('Error!!!: CRC Error.'); function ByteToHex(B: byte): string; const H: array [0..15] of char = ('0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F'); begin ByteToHex := H[B div 16] + H[B and 15]; procedure DispHex; var I: integer; begin Write(#13, ' TX:'); for I := 0 to TXNum do begin if (I mod 26) = 0 then Write(#13, #10, ' '); Write(' ', ByteToHex(TXSave[I])); 26
CAP. 5. - SISTEMA DI SUPERVISIONE WriteLn; Write(' RX:'); if RXNum < 0 then Write(#13, #10, ' <no answer>') else for I := 0 to RXNum do begin if (I mod 26) = 0 then Write(#13, #10, ' '); Write(' ', ByteToHex(RXSave[I])); WriteLn; function GetAddress(w:word):word; var t:word; begin if w<$1000 then t:=$6000+w(*netlist*) else if (w>=$1000) and (w<$2000) then t:=$a000+2*(w-$1000) (*reali*) else if (w>=$2000) and (w<$3000) then t:=$9000+(w-$2000) (*interi*) else if (w>=$3000) and (w<$4000) then begin t:=w-$3000;fstring:=true;(*stringhe*) GetAddress:=t; function HexToInt(s:string):word; const Hex1:set of char=['0'..'9']; Hex2:set of char=['a'..'f']; Hex3:array[1..4] of word=($1000,$100,$10,1); var t,i:word; rt:array[0..10] of word; begin t:=0; for i:=1 to 4 do begin if(s[i] in Hex1) then rt[i]:=ord(s[i])-48 else rt[i]:=ord(s[i])-55; t:=t+hex3[i]*rt[i]; HexToInt:=t; procedure SendData(N:word); var nb:string; w,k,j,i:word; flag:boolean; h:char; e:byte; begin e:=100; while (e>0) do begin flag:=fstring; j:=n-3;i:=1;w:=0; while (i<2*j) do begin if ((flag) and (base and 1=1)) then begin (*stringa dispari*) ModBusData.Data[w]:=0; (*inizia con il terminatore stringa precedente*) flag:=false; w:=w+1; base:=(base*15-1) div 2 +$B000;(*calcola indirizzo prima word*) if (flag) and ((base and 1)=0) then begin (*stringa pari*) base:=(base*15) div 2+$B000;(*calcola indirizzo prima word*) flag:=false; 27
nb:='00'+copy(riga,8+i,2); k:=hextoint(nb); i:=i+2; nb:='00'+copy(riga,8+i,2); k:=k*256+hextoint(nb); ModBusData.Data[w] := Hi(k); ModBusData.Data[w+1] := Lo(k); i:=i+2; w:=w+2; w:=(j div 2) ; if fstring then inc(w); PresetMRegs(Indirizzo,base,w); E:=ReceiveAnswer; if E <> 0 then Error(E); DispHex; if debugmode then repeat until keypressed; if (keypressed) then begin h:=readkey; if ord(h)=27 then begin ComClose;halt(1); procedure openfile; var i:integer; begin clrscr; write('input filename '); readln(filename); assign(infile,filename); settextbuf(infile,bufin); {$i-} reset(infile); {$i+} i:=ioresult; case i of 2: begin writeln('not existing file ');halt(1);comclose; 152:begin writeln('disk not ready');halt(1);comclose; procedure ReadData; var identifier,ad,nb:string[8]; flag:boolean; N,data_ad:word; i:integer; begin while not eof(infile) do begin readln(infile,riga);writeln(riga); identifier:=copy(riga,1,2); ad:=copy(riga,5,4);(*indirizzo*); nb:='00'+copy(riga,3,2); data_ad:=hextoint(ad); N:=HexToInt(nb); flag:=false;(*the default case *) fstring:=false; case ord(identifier[2]) of ord('0'):flag:=false;(*the beginning*) ord('1'):begin base:= GetAddress(data_ad); flag:=true; (*trap here : NET,REAL,INT*) ord('2'):begin base:=$8000+data_ad; flag:=true; (*menu*) ord('3'):flag:=false;(*system data*) 28
CAP. 5. - SISTEMA DI SUPERVISIONE ord('4'):begin base:=$c000+data_ad; flag:=true; (*coils*) ord('5'):begin base:=$d000+data_ad; flag:=true; (*registers & double registers*) ord('9'):flag:=false; (*end of MOTOROLA like file*) ord('a'):begin base:=$e000+data_ad; flag:=true; (*ARCNET consumer list*) ord('b'):begin base:=$e800+data_ad; flag:=true; (*ARCNET producer list*) (*end of case*) if flag then SendData(N); procedure sendmsg; var e:byte; begin e:=100; while (e>0) do begin PresetReg(Indirizzo,651,0); (*atomic opearation beginning*) delay(100); e:=receiveanswer; if E <> 0 then Error(E); DispHex; ReadData; e:=100; while (e>0) do begin PresetReg(Indirizzo,651,1); (*atomic operation ending*) delay(100); e:=receiveanswer; if E <> 0 then Error(E); DispHex; begin clrscr; setting(scelta); debugmode:=false; if paramcount > 0 then debugmode:=true; if ComOpen(scelta[4]-1,scelta[1]-1,scelta[3]-1,scelta[2]) then begin indirizzo:=1; openfile; sendmsg; close(infile); end else writeln('no Communication Port Found '); ComClose; end. 29
ATTENZIONE Note: Tutte le informazioni inerenti i dati di tabella sono intese come word (16 bit) Se per esempio si vuole scrivere/leggere un REALE (per esempio il reale n.14), poiché ogni reale occupa due word il suo indirizzo fisico si trova a A000+1C=A001C Un discorso analogo vale per le stringhe, poiché ogni stringa, occupa 15 bytes la stringa n.8 si troverà allo indirizzo B000+3C=B03C (con un offset di 120 bytes = 60 word) Un piccolo problema nasce quando l'indirizzo della stringa é dispari, esempio la stringa n.3 ha un offset di 45 bytes, ma poiché lo si deve esprimere in word necessariamente il sw dovrà catturare la stringa a partire da un byte (carattere) della precedente. Richiesta della configurazione allo strumento Si voglia richiedere la NETLIST allo strumento. Formattare la richiesta di Read Registers (funzione n. 3) a partire dall'indirizzo 0x6000 richiedendo 50 registri TX: 01 03 60 00 00 32 DA 1F Lo strumento risponderà in un modo simile al seguente (ovviamente la reale risposta é in funzione della configurazione attiva). RX: 01 03 64 00 09 10 0B 10 0C 20 07 10 0D 10 0E 20 08 10 0F 20 01 10 01 00 05 20 02 20 03 20 04 10 02 10 03 10 04 10 05 10 06 10 01 10 07 10 01 10 08 10 09 30 01 30 02 30 03 30 04 10 10 10 11 10 12 10 13 20 09 20 0A 10 14 10 15 20 05 10 0A 20 06 FF FF 10 02 20 31 20 32 20 06 00 02 20 33 20 34 20 35 20 14 00 02 B0 98 La prima parte ( 01 03 64 ) rappresenta l indirizzo, la funzione ed il numero di bytes inviati, la NETLIST vera e propria inizia da 00 09 10 0B... e termina con la word FFFF sempre e comunque. Quindi non essendo nota a priori la lunghezza della NETLIST il programma che la legge deve per prima cosa intercettare il terminatore FFFF. 0009 Inizio funzione n 9 = Blocco Ingresso Frequenza 100B Frequency Low Limit 100C Frequency High Limit 2007 Scale 100D Range Low 100E Range High 2008 Decimal Point 100F Filter 2001 Digital Overrange 1001 Output 0005 Inizio funzione n 5=1 Bar Panel 30
CAP. 5. - SISTEMA DI SUPERVISIONE Si tenga presente che : -Tutte le funzioni sono numerate da 1..100 -Tutte le variabili float sono numerate da 0x1000..0x1FFF -Tutte le variabili intere sono numerate da 0x2000..0x2FFF -Tutte le stringhe sono numerata da 0x3000..0x3FFF Pertanto se si raccoglie il database dello strumento in tre vettori INTERI, REALI, STRINGHE la variabile 100B viene rappresenta da REALI[11], 2007 da INTERI[7] etc.. Tutte le funzioni hanno una struttura di variabili predefinita (si veda il manuale delle funzioni) per cui é facile una volta ottenuta la NETLIST identificare una variabile e modificarla Esempio si voglia modificare il parametro Scale (che é un intero nel campo 0..2) 1) Individuare che Scale é il terzo parametro della funzione 2) leggere il suo indirizzo : 2007 3) Scrivere nella posizione del database degli interi ( 0x9000..0x9FFF ), quindi alla posizione 0x9007 il valore 2, usando la funzione Preset Multiple Registers TX: 01 10 90 07 00 01 02 00 02 B6 2F RX: 01 10 90 07 00 01 9D 08 5.10 Lettura dei Menu TX: 01 03 80 00 00 14 6C 05 RX: 01 03 28 00 09 30 05 00 00 00 05 30 06 00 0A FF FF 00 05 00 22 00 02 30 1D 00 27 00 02 30 1E 00 2C 00 02 30 1F 00 31 00 19 30 20 A3 E6 Anche per i MENU come già detto per la NETLIST la lunghezza non é nota a priori e si deve intercettare il terminatore FFFF 0009 Funzione 9 3005 Stringa con il suo TAG 0000 offset inizio della sua istanza nella NETLIST 0005 Funzione 5 3006 Stringa con il suo TAG 000A offset inizio della sua istanza nella NETLIST 31
5.11 Lettura dei Reali TX: 01 03 A0 00 00 28 67 D4 RX: 01 03 50 3B 20 3C 20 FF E6 C9 A3 01 10 0B 10 3C 10 3D 10 3E 20 3D 20 3E 20 21 00 24 30 01 30 02 30 03 30 04 30 05 20 3F 10 04 10 07 10 02 10 3F 80 00 00 00 00 00 00 04 10 10 10 11 10 12 10 13 00 00 00 00 00 00 00 46 9C 40 00 00 00 00 00 46 9C 40 00 F4 A3 Il numero dei REALI (degli INTERI e delle STRINGE ) viene determinato analizzando la NETLIST. Esempio se scandendo tutti gli INTERI si trova che il massimo indirizzo é 0x2030 vuol dire che esistono 0x30 (48) interi. 5.12 Lettura delle Stringhe TX: 01 03 B0 00 00 64 62 E1 RX: 01 03 C8 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 4F 46 46 20 4F 4E 4F 46 46 20 4F 4E 20 20 00 4F 46 46 20 4F 4E 41 49 31 41 49 32 20 20 00 41 49 33 41 49 34 41 49 35 20 20 20 20 20 00 50 56 31 20 20 20 20 20 20 20 20 20 20 20 00 4D 49 46 5F 31 20 20 20 20 20 00 20 20 20 00 31 4C 50 5F 31 20 20 20 20 20 00 FF 20 20 00 4F 46 46 20 4F 4E 41 49 31 41 49 32 20 20 00 41 49 33 41 49 34 41 49 35 20 20 20 20 20 00 50 56 31 20 20 20 20 20 20 20 20 20 20 20 00 4F 46 46 20 4F 4E 4F 46 46 20 4F 4E 20 20 00 4F 46 46 20 4F 4E 41 49 31 41 49 32 20 20 00 41 49 33 41 49 34 41 49 35 20 20 20 20 20 00 50 56 D8 20 20 C7 0A Le stringhe sono formate da un vettore di 15 caratteri,di cui 14 utili e l ultimo che é il terminatore '\0' in puro standard ANSI C. typedef char tag[15]; /* 14 caratteri + terminatore 0 */ 32
CAP. 6. - GLI INDIRIZZI STATICI DINAMICI DI MODBUS / JBUS 6. Gli indirizzi statici e dinamici di ModBus / Jbus Come si sarà potuto notare durante la creazione di una strategia di controllo, tramite il programma AC-Prograph / AC-Edit, non tutte le connessioni e i blocchi di funzione, hanno un indirizzo ModBus / Jbus. Quelli esistenti saranno definiti statici mentre quelli, che all apparenza non appaiono, saranno chiamati indirizzi dinamici. 6.1 Gli indirizzi statici L elenco degli indirizzi statici, é riportato su questo manuale ed è riproducibile in fase di stampa della strategia tramite il programma AC-Prograph / AC-Edit. Il vantaggio di avere un indirizzo statico è rappresentato dal fatto che a priori si saprà che quella connessione o quel particolare parametro di un blocco di funzione avrà solo ed inequivocabilmente quel dato indirizzo. Lo svantaggio sarà quello di avere a disposizione una tabella di indirizzi limitata. 6.2 Gli indirizzi dinamici Tutti gli indirizzi dei blocchi di funzione o parametri o softwiring non rappresentati in questo manuale o descritti dal programma AC-Prograph / AC-Edit, saranno racchiusi nel file nome_progetto.mba. Questo file ausiliario di informazioni verrà generato atomaticamente ed in modo del tutto trasparente nella directory di residenza della strategia caricata dal programma AC-Prograph / AC-Edit nel momento stesso della spedizione della strategia alla stazione AC. Essendo questi indirizzi assegnati in modo dinamico ogni qualvolta si trasferisce una strategia dall ambiente AC-Prograph / AC-Edit alla stazione AC, si deve consultare questo file con un normalissimo editor di testo (blocco note di windows), solo dopo aver trasferito la strategia di controllo alla stazione AC l ultima volta. Gli indirizzi dinamici iniziano dal valore di 30000 in su. Viene riportato di seguito un esempio del contenuto del file nome_progetto.mba : "Module Type:EXP " "Tag:Portata " " Pin(1), A : 40968 Double Register" " Pin(2), B : 40966 Double Register" " Pin(3), C : 40970 Double Register" " Pin(4), D : 40960 Double Register" " Pin(5), R : 40972 Double Register" "C:\PROGRAMMI\AC-PROGRAPH\netimg 04-14-1998" "Module Type:AI " "Tag:Mandata " " Parm(1), INA: 36882 Register" " Parm(2), MS: 36884 Register" " Parm(3), TING: 36900 Register" " Parm(4), CLIN: 36901 Register" " Parm(5), TFIL: 41002 Double Register" " Parm(6), MLO: 41004 Double Register" " Parm(7), MHI: 41006 Double Register" etc... etc... 33
7. ARCNET La rete ARCNET é un protocollo "token passing" ad alta velocità (2.5 Mb/sec) Riferimenti: SMC DataPoint ARCNET Local Area Network Standard ARCNET Designer's Handbook 7.1 Hardware Per piccole reti locali non é necessario alcun hardware aggiuntivo a quello standard dello strumento Un massimo di 8 regolatori possono essere interconnessi tra loro connettendo i morsetti LAN+ e LAN- dello strumento come "Daisy Chained" o in configurazione a "bus". L2 T L1 T 1 2 8 L1 = Distanza minima tra regolatore e regolatore =180 cm nel caso di doppino e 90 cm nel caso di coassiale. L2 = Massima distanza totale=120 metri in doppino e 330 metri in coassiale. T = terminazione ai due Estremi con resistore pari alla impedenza caratteristica. Qualora si volessero connettere più di 8 stazioni bisogna passare allo schema seguente: T T T U U LR T T T U U T = Scatola di derivazione ( Transceiver ) U = Utenza LR = Ripetitore Locale Parametro Valore per COAX Valore per Twisted pair Wiring RG62 Rame 22,24 o 26 AWG Resistenza DC 1 ohm/100 metri 8 ohm/100 metri max. Impedenza caratteristica 93 ohm @ 1 Mhz 105 ohm @ 1 Mhz Massima Attenuazione 1.83 db /100 metri @ 5 Mhz 5.3 db /100 metri @5Mhz 34
CAP. 7. - ARCNET 7.2 Protocollo ARCNET per regolatore serie AC Esistono due differenti tipi di protocolli: a) per la comunicazione tra i regolatori b) per la comunicazione verso un computer Il pacchetto dati ARCNET permette l'individuazione di questi due tipi dall'osservazione del primo byte del pacchetto dati. Protocol type Function type Start Address Hi Start Address Lo Byte number Se il protocol type vale zero si tratta del caso a) viceversa se vale 1 del caso b) Essenzialmente i due protocolli svolgono compiti diversi: a) permette la condivisione di un data base comune di variabili; 256 digitali (Interi) e 256 analogiche (Float). b) permette la lettura della configurazione di ogni strumento e la manipolazione dell'intero data base (accesso totale alle variabili intere e float nonché alle stringhe) 7.3 Protocollo tipo A Il protocollo di tipo A è del tipo (ogni casella rappresenta un byte) 0 0 1 0 2 1 2 0xFF 0XFF 0 200 0 100 0X40 0X48 0XF5 0XC3 ovvero scrivendo simbolicamente: Protocol Adrresses Field Control Data Field Protocol Type A0Hi A0Lo A1Hi A1Lo AnHi AnLo 0xFF 0xFF W0Hi W0Lo W1Hi W1Lo F00 F01 F02 F03 ovvero è formato da una lista di indirizzi di variabili (0...255 variabili intere, 256...511 variabili float) separata dal campo dati vero e proprio dalla word di controllo 0xFFFF a) A0Hi,A0Lo= indirizzo word 0 A1hi,AiLo=indirizzo 2 word (1) b) AnHi,AnLo = indirizzo variabile float F0 (1) c) 0xFF, 0xFF : separatore W0Hi,W0Lo,W1Hi,W1lo : valore delle due word F00,F01,F02,F03=valore del float F0 (1):gli indirizzi interi si diversificano da quelli float per il fatto che hanno valori diversi: 0..255 le word, 256..511 i float Uno strumento produttore prepara il pacchetto testé analizzato e lo invia in modo broadcast a tutti i regolatori connessi alla rete. Tutti gli altri strumenti che sono in quel momento consumatori analizzano la parte indirizzi del pacchetto e se vi trovano variabili di loro interesse acquisiscono i dati viceversa gli ignorano. 35
7.4 Protocollo tipo B Il protocollo di tipo B invece è del tipo: Richiesta di informazione nel caso di trasmissione del Computer: Protocol type Function type Start Address Hi Start Address Lo RegNumberHi RegNumberLo Dove RegisterNumber é una word che rappresenta quanti registri si vogliono richiedere. Poiché i pacchetti di trasmissione ARCNET sono nel nostro caso di 256 bytes (128 word) tenendo contro dello spazio richiesto da altre informazioni del pacchetto consegue che RegNumber non può superare il valore di 120. Una richiesta di una informazione maggiore di questa genera un codice di errore La risposta del regolatore è del seguente tipo: Protocol type Function type Start Address Hi Start Address Lo Dato #0 Dato # N-1 Dato # N Le funzioni richiamabili sono le seguenti: Indice Funzione tipo dato Funzione 0 NETLIST Lettura 1 MENU Lettura 2 REALI Lettura 3 INTERI Lettura 4 STRINGHE Lettura 5 Variabili RETE da produrre Lettura 6 Variabili Rete da consumare Lettura 15 Non Permesso 16 Non Permesso 17 REALI Scrittura 18 INTERI Scrittura 19 STRINGHE Scrittura Circa le modalità di acquisizione dati di rete e base dati dello strumento vale quanto detto precedentemente per il protocollo ModBus JBus ATTENZIONE Note: Tutte le informazioni inerenti i dati di tabella sono intese come word (16 bit) Se per esempio si vuole scrivere/leggere un REALE (per esempio il reale n.14),poiché ogni reale occupa due word il suo indirizzo fisico si trova a 1C Un discorso analogo vale per le stringhe,poiché ogni stringa, occupa 15 bytes la stringa n.8 si troverà allo indirizzo 3C (con un offset di 120 bytes = 60 word) Un piccolo problema nasce quando l'indirizzo della stringa é dispari,esempio la stringa n.3 ha un offset di 45 bytes,ma poiché lo si deve esprimere in word necessariamente il sw dovrà catturare la stringa a partire da un byte (carattere) della precedente. 36
CAP. 7. - ARCNET La richiesta di lettura della stringa n.3 é del tipo: Protocollo Funzione Start Address Hi Start Address Lo 1 4 0 16H e la risposta é del tipo: Pro Fun Hi Lo 1 4 0 16 0 41 49 33 41 49 34 41 49 35 20 20 20 20 20 0.. La parte in grigio é la stringa vera e propria che é preceduta da un carattere 0 che appartiene alla stringa precedente (il terminatore della stringa precedente). 7.5 La gestione degli errori Nel ModBus esistono due tipi di errori, gestiti in modo diverso: errori di trasmissione ed errori operativi. Gli errori di trasmissione sono errori che alterano il messaggio, nel suo formato, e rilevati tramite il CRC16. Il dispositivo che rilevi errori di questo tipo nel messaggio lo considera non valido e non dà risposta affermativa forzando così il produttore del messaggio a riprovarci. Qualora invece il messaggio sia corretto nella sua forma ma la funzione richiesta, per qualsiasi motivo, non sia eseguibile, si ha un errore operativo. A questo errore il dispositivo slave risponde con un messaggio di eccezione. Questo messaggio è composto da : Protocol Type Error Code=Function Code +128 37
8. Calibrazione stazione AC via seriale La calibrazione avviene attraverso l'interfaccia RS485 (porta supervisore MAIN COMM) nel modo Factory Test, secondo il protocollo JBUS. Nel modo Factory Test, sono previste le seguenti funzioni : Funzione Dato Master Dato slave Significato 65 0 0 Ingresso procedura Factory Test 65 1 1 Uscita procedura Factory Test 66 X CAL0 Calib ingresso I. Scala 67 X CAL5 Calib ingresso F. Scala 68 X X Calib out #1 I.S. (Ma) 69 X X Calib out #1 F.S. (Ma) 70 X X Calib out #2 I.S. (Ma) 71 X X Calib out #2 F.S. (Ma) 72 X X Calib out #3 I.S. (Ma) 73 X X Calib out #3 F.S. (Ma) 74 X X Calib out #4 I.S. (Ma) 75 X X Calib out #4 F.S. (Ma) 76 X X Calib out #1 I.S. (Volt) 77 X X Calib out #1 F.S. (Volt) 78 X X Calib out #2 I.S. (Volt) 79 X X Calib out #2 F.S. (Volt) 80 X X Calib out #3 I.S. (Volt) 81 X X Calib out #3 F.S. (Volt) 82 X X Calib out #4 I.S. (Volt) 83 X X Calib out #4 F.S. (Volt) 84 X X Test LCD 85 1 1 Fermata orologio 85 0 0 Partenza orologio 86 X X Reset Strumento Per accedere ad una qualsiasi delle funzioni sopracitate è necessario per prima cosa, entrare nel modo Factory Test secondo la seguente procedura: Esempio di funzione 65 - Ingresso modo Factory Test Domanda 1 41 0 0 51 CC Risposta 1 C1 0 71 90 Esempio di funzione 65 - Uscita modo Factory Test Domanda 1 41 1 1 91 9C Risposta 1 C1 1 B0 50 Esempio di funzione 66 - Calibrazione zero volt ingresso Domanda 1 42 0 0 21 4C Risposta 1 C2 0 8B E0 43 Essendo 08B il valore a 16 bit dello zero di calibrazione. N.B. Il secondo byte di risposta è sempre il codice di funzione incrementato del valore esadecimale &H80. Questo è valido solo per il modo di funzionamento Factory Test. 8.1 Calibrazione uscite Si prenda come esempio la calibrazione della uscita #4 in volt. Domanda: 01 53 00 00 71 49 38
CAP. 8. - CALIBRAZIONE STAZIONE AC VIA SERIALE Come risposta il regolatore pone l uscita del PWM al 95% di Duty Cycle. Leggere con un voltmetro l uscita e informare il regolatore settando la variabile VOLT95[4]. Es. Si supponga che Volt95[1] = 5.297 Esprimere 5.297 in floating point IEEE ovvero 40A98106 e spedirlo come due word contigue usando la funzione JBUS (16) Preset Multiple Registers, ricordando che l indirizzo JBUS di tale variabile vale 31 (vedi tabella sottostante): 01 10 00 1F 00 02 04 40 A9 81 06 17 51 La risposta sarà quella tipica del Preset Multiple Registers. 8.2 Indirizzi JBUS nel modo test INDIRIZZO VARIABILE 1 Ingressi Logici (4) 2 Uscite Logiche (5) 3 Uscita #1 (6) 4 Uscita #2 (6) 5 Uscita #3 (6) 6 Uscita #4 (6) 7 Configurazione Uscite (1) 8 Tasti (2) 9 AI #1 (3) 10 AI #2 11 AI #3 12 AI #4 13 AI #5 14 AI #6 15 AI #7 16 AI #8 17 VOLT5[1] (MSW) 18 VOLT5[1] (LSW) 19 VOLT95[1] (MSW) 20 VOLT95[1] (LSW) 21 VOLT5[2] (MSW) 22 VOLT5[2] (LSW) 23 VOLT95[2] (MSW) 24 VOLT95[2] (LSW) 25 VOLT5[3] (MSW) 26 VOLT5[3] (LSW) 27 VOLT95[3] (MSW) 28 VOLT95[3] (LSW) 29 VOLT5[4] (MSW) 30 VOLT5[4] (LSW) 31 VOLT95[4] (MSW) 32 VOLT95[4] (LSW) 33 MAMP5[1] (MSW) 34 MAMP5[1] (LSW) 35 MAMP95[1] (MSW) 36 MAMP95[1] (LSW) 37 MAMP5[2] (MSW) 38 MAMP5[2] (LSW) 39 MAMP95[2] (MSW) 40 MAMP95[2] (LSW) 41 MAMP5[3] (MSW) 42 MAMP5[3] (LSW) 43 MAMP95[3] (MSW) 44 MAMP95[3] (LSW) 45 MAMP5[4] (MSW) 46 MAMP5[4] (LSW) 47 MAMP95[4] (MSW) 48 MAMP95[4] (LSW) 49 Valore Calib Ingresso IS 50 Valore Caib Ingresso FS 51 Compensazione display LCD (7) 52 58 Reserved 59 Esclusione logo Ascon (8) 39
Note: 1) Configurazione uscite : una word MSB #4 #3 #2 #1 0..3 0..3 0..3 0..3 2) Tasti: una word di cui il byte meno significativo vale: R/L + - Disp Page AMan < > 3) Ingressi Analogici. Una word contenente il conteggio dell'adc (0..65535) 4, 5) Ingressi Uscite logiche. Una word il cui byte meno significativo vale: L8 L7 L6 L5 L4 L3 L2 L1 6) Uscite analogiche Una word 0..655355 esprimente un valore percentuale della uscita. Esempio se l'uscita é in volt (scala 0..5) e voglio portarla a 2.5 volt pari al 50% della scala,allora scriverò il valore 32767, viceversa per 3.12 volt 40894 : (5/3.12 )* 65536 7) Compensazione in temperatura LCD: Scrivendo a questo indirizzo il valore AAAA, si predispone una curva di compensazione in temperatura per LCD di tipo normale. Qualsiasi altro valore assegnato a questo indirizzo, predispone una curva di compensazione in temperatura per LCD a range esteso. 8) Esclusione logo Ascon dai pannelli frontali Scrivendo a questo indirizzo il valore AA55, si maschererà il logo Ascon. Qualsiasi altro valore assegnato a questo indirizzo, farà riapparire il logo. Questa funzione è disponibile solo per le stazioni AC20 e AC30. 8.3 Funzioni disponibili Sono disponibili le seguenti funzioni JBus : Numero Funzione Descrizione Modo Test 01 READ COIL STATUS No Si 02 READ INPUT STATUS No Si 03 READ HOLDIND REGISTERS Si Si 04 READ INPUT REGISTERS Si Si 05 FORCE SINGLE COIL No Si 06 PRESET SINGLE REGISTER Si Si 15 FORCE MULTIPLE COILS No Si 16 PRESET MULTIPLE REGISTERS Si Si Uscita modo test Domanda: 01 41 01 00 50 5C Risposta: 01 41 01 30 50 Modo Regolatore 40