 |
| Data (GMT):
02/03/2010 17:35:53 |
|
|
| Autore:
b2antonino
|
|
|
|
Volevo sapere se è possibile sviluppare un applicativo con un altro linguaggio tipo C++ o Pascal da far girare in background (senza grafica tipo un servizio) per ricevere dati dalle porte seriali e scrivere nel database per poter poi inviare i dati al PLC.
|
|
|
 |
| Data (GMT):
03/03/2010 17:22:15 |
|
|
Autore:
Bertaser
|
|
|
|
All'interno di un programma EasyBuilder è possibile scrivere programmi utilizzando il potente editor di macro. Il linguaggio utilizzato nelle macro è molto simile al linguaggio C, e tramite le macro è possibile operare sulle variabili del terminale e/o gestire un protocollo di comunicazione. Le macro possono essere eseguite a tempo o su eventi come pulsanti e/o altri oggetti grafici. E' possibile eseguire il download del manuale di riferimento. A titolo di esempio riporto una semplice macro che permette l'invio di una stringa di interrogazione (Comando reading holding registers) modbus sulla porta seriale e riceve la stringa di risposta. macro_command main() char command[32], response[32] short address, checksum short read_no, return_value, read_data[2] FILL(command[0], 0, 32) //command initialization FILL(response[0], 0, 32) //response initialization command[0]=0x1 //station no command[1]=0x3 //function code : Read Holding Registers address=0 HIBYTE(address, command[2]) LOBYTE(address, command[3]) read_no=2 //read 2 words (4x_1 and 4x_2) HIBYTE(read_no, command[4]) LOBYTE(read_no, command[5]) CRC(command[0], checksum, 6) LOBYTE(checksum, command[6]) HIBYTE(checksum, command[7]) // Send out a "Read Holding Registers" command OUTPORT(command[0], "MODBUS RTU Device", 8) // Read responses for a "Read Holding Registers" command INPORT(response[0], "MODBUS RTU Device", 9, return_value) if return_value > 0 then read_data[0] = response[4] + (response[3] << 8)// data in 4x_1 read_data[1] = response[6] + (response[5] << 8)// data in 4x_2 SetData(read_data[0], "Local HMI", LW, 100, 2) end if end macro_command
|
|
|
 |
| Data (GMT):
04/03/2010 07:54:16 |
|
|
| Autore:
b2antonino
|
|
|
|
Si avevo visto la presenza di macro (guardando il manuale sembrano anche molto potenti), ma ho necessità di scrivere routine piu complesse di un invia/ricevi di semplici caratteri e poi dovrebbero essere eseguite molto frequentemente. L'esecuzione delle macro è sincrona con il resto dell'HMI o gira in un thread separato ? Per esempio se faccio una macro che impiega circa 5 secondi il resto dell'HMI continua ad essere eseguito o si blocca fino al termine della macro ? Comunque dovrebbe essere possibile sviluppare e far eseguire applicativi autonomi sul pannello e poi metterlo in comunicazione con l'HMI tramite connessione ethernet/tcp/ip in localhost o sbaglio ?
|
|
|
 |
| Data (GMT):
04/03/2010 09:24:25 |
|
|
Autore:
Bertaser
|
|
|
|
Le macro girano in thread separati dal resto della applicazione, quindi anche se l'esecuzione della macro si blocca per un certo periodo il resto del pannello continua a funzionare. Ricordo che nelle macro è solo possibile come si evince dal manuale operare sulle variabili interne al pannello operatore e gestire cominicazioni su porta seriale, non sono previste gestioni di sockets TCP/IP.
|
|
|
 |
| Data (GMT):
04/03/2010 11:19:20 |
|
|
| Autore:
b2antonino
|
|
|
|
Il fatto che giri in un thread separato è ottimo, però a pagina 45 del manuale "Macro Reference" mi sembra di capire che posso inviare/ricevere dati su connessione socket, ovviamente l'HMI è client. Un'ulteriore domanda, è possibile inviare un segnale di break sulla linea seriale RS232 (COM2) e gestire i segnali RTS, CTS, ecc. ?
|
|
|