Frank681 Inserito: 23 novembre 2016 Segnala Share Inserito: 23 novembre 2016 Salve Sto sviluppando la lettura dei dati da inverter DSP SOLEIL tramite gateway DATEXEL DAT3580 , se unso un programma windows per leggere i dati dai due inverter tutto OK , se usa la FC per leggere i dati niente da fare finche' leggo il solo dato di un inverter funziona appena ciclicamente cerco di leggerne 2 mi da errore ti timeout 80C8. Di seguito codice , Grazie per qualsiasi aiuto //Controllo limiti step comunicazione IF "MB_TCP_STATUS_DIAG_FV".STEP_TCP < 1 OR "MB_TCP_STATUS_DIAG_FV".STEP_TCP > "MB_TCP_STATUS_DIAG_FV".STEP_TCP_MAX THEN "MB_TCP_STATUS_DIAG_FV".STEP_TCP := 1; END_IF; //Imposta nodo dispositivo //N.B.: in questo esempio si stanno leggendo dati utilizzando un gateway Modbus TCP --> Modbus RTU. //L'indirizzo IP rimane quindi invariato (quello del gateway), e si deve impostare //il parametro MB_UNIT_ID col numero di nodo del dispositivo Modbus RTU. //In caso di normale utilizzo di Modbus TCP, MB_UNIT_ID non va usato. Si deve invece //impostare il quarto ottetto dell'indirizzo IP del dispositivo. CASE "MB_TCP_STATUS_DIAG_FV".STEP_TCP OF 1: // INV 1 "MB_CLIENT_DB_FV_DIAG".MB_UNIT_ID := 65; 2: // INV 2 "MB_CLIENT_DB_FV_DIAG".MB_UNIT_ID := 66; END_CASE; //Lettura dati //I dati letti vengono sempre depositati in un'area di "parcheggio" PRK. //Quest'area deve essere una struttura o un array di un DB "non ottimizzato". //Se la lettura è terminata in modo corretto, i dati vengono successivamente //trasferiti nella loro destinazione definitiva. //La destinazione deve essere una struttura o un array identico a quello di "parcheggio". //In questo esempio, la destinazione è un array di strutture identiche a PRK. //In alternativa, si potrebbero depositare i dati direttamente nella destinazione //definitiva. In questo caso, il DB ""MOD_TCP_RDATA" dovrebbe essere "non ottimizzato". "MB_CLIENT_DB_FV_DIAG"(REQ:="MB_TCP_STATUS_DIAG_FV".REQ, DISCONNECT:=FALSE, CONNECT_ID:=3, IP_OCTET_1:=192, IP_OCTET_2:=168, IP_OCTET_3:=1, IP_OCTET_4:=100, IP_PORT:=502, MB_MODE:=0, MB_DATA_ADDR:=42001, MB_DATA_LEN:=30, DONE => "MB_TCP_STATUS_DIAG_FV".DONE, BUSY => "MB_TCP_STATUS_DIAG_FV".BUSY, ERROR => "MB_TCP_STATUS_DIAG_FV".ERROR, STATUS => "MB_TCP_STATUS_DIAG_FV".STATUS, MB_DATA_PTR:= "MOD_TCP_PARK_FV_DIAG".PRK ); //SET richiesta lettura //Attivare la richiesta lettura dopo il richiamo di MB_CLIENT, in modo che //MB_CLIENT legga per una scansione lo stato FALSE di REQ "MB_TCP_STATUS_DIAG_FV".REQ := TRUE; //Lettura andata a buon fine: copia dati da "Parcheggio" a destinazione definitiva IF "MB_TCP_STATUS_DIAG_FV".DONE THEN "MB_TCP_STATUS_DIAG_FV".STATUS_MEM := 0; "MOD_TCP_RDATA_FV_DIAG".Device["MB_TCP_STATUS_DIAG_FV".STEP_TCP] := "MOD_TCP_PARK_FV_DIAG".PRK ; "MB_TCP_STATUS_DIAG_FV".STEP_TCP := "MB_TCP_STATUS_DIAG_FV".STEP_TCP + 1; "MB_TCP_STATUS_DIAG_FV".REQ := FALSE; END_IF; //Lettura andata a buon fine o terminata con errore: incrementare Step e resettare REQ IF "MB_TCP_STATUS_DIAG_FV".DONE OR "MB_TCP_STATUS_DIAG_FV".ERROR THEN // MEM ERR "MB_TCP_STATUS_DIAG_FV".STATUS_MEM := "MB_TCP_STATUS_DIAG_FV".STATUS; //"MB_TCP_STATUS_DIAG_FV".STEP_TCP := "MB_TCP_STATUS_DIAG_FV".STEP_TCP + 1; "MB_TCP_STATUS_DIAG_FV".REQ := FALSE; END_IF; Link al commento Condividi su altri siti More sharing options...
Messaggi consigliati
Crea un account o accedi per commentare
Devi essere un utente per poter lasciare un commento
Crea un account
Registrati per un nuovo account nella nostra comunità. è facile!
Registra un nuovo accountAccedi
Hai già un account? Accedi qui.
Accedi ora