Gapo Inserito: 9 luglio 2009 Segnala Share Inserito: 9 luglio 2009 (modificato) Ciao a tutti,sto provando a scambiare dei dati tra due CPU (nello stesso progetto) via ethernet, utilizzando le AG_SEND e AG_RECV.Ho inserito le CP343-1 nell'hardware (hanno indirizzo 1000 in entrambe le CPU), ho impostato gli indirizzi IP, e ho definito il collegamento in NetPro (il collegamento ha ID2).Ho definito in entrambe le CPU la DB11 di test fatta nel seguente modo: STRUCT continuos_increase : INT ; integer_test_01 : INT ; integer_test_02 : INT ; integer_test_03 : INT ; integer_test_04 : INT ; END_STRUCT ; Dopodiché ho inserito in una CPU la AG_SEND CALL FC 5 ( ACT := clock_1s, ID := 2, LADDR := W#16#3E8, SEND := P#DB11.DBX0.0 BYTE 10, LEN := 10, DONE := M 90.0, ERROR := M 90.1, STATUS := MW 92);e nell'altra la AG_RECV L 10; T MW 14; CALL FC 6 ( ID := 2, LADDR := W#16#3E8, RECV := P#DB11.DBX0.0 BYTE 10, NDR := M 90.0, ERROR := M 90.1, STATUS := MW 92, LEN := MW 14);Ora, la comunicazione sembrerebbe funzionare, se non fosse che sulla CPU "ricevente" mi ritrovo i dati "shiftati" all'indietro di una word: CPU-Send ---> CPU-Recv continuos_increase ---> integer_test_01 integer_test_01 ---> integer_test_02 integer_test_02 ---> integer_test_03 integer_test_03 ---> integer_test_04 integer_test_04 ---> continuos_increase C'è un motivo valido per tutto ciò?O c'è qualcosa che sbaglio?Per i più pazienti aggiungo un'ulteriore domanda: se le due CPU fossero di due progetti differenti, cosa cambierebbe?Grazie in anticipo Modificato: 9 luglio 2009 da Gapo Link al commento Condividi su altri siti More sharing options...
Gapo Inserita: 9 luglio 2009 Autore Segnala Share Inserita: 9 luglio 2009 Fico... ora sto provando con due progetti distinti (che poi sarà la situazione reale in cui mi troverò), e lo shift non c'è più... a volte Siemens proprio non la capisco...Vabbeh, con tutti i benefici del dubbio sul discorso dello shift con le CPU nello stesso progetto (che comunque basta saperlo in anticipo), pare che il problema sia risolto. Se qualcuno ha la stessa necessità e si trova in difficoltà, faccia un fischio.ciao Link al commento Condividi su altri siti More sharing options...
floppydisco Inserita: 10 luglio 2009 Segnala Share Inserita: 10 luglio 2009 Premetto che non ho mai usato ag_send e ag_receive.Ho usato invece x_get e x_put.Sei sicuro che in una cpu devi mettere ag_send e nellaltra ag_receive? Devono per forza essere accoppiate? Non è sufficiente solo una?Io per scambiare dati preferisco usare solo x_get in entrambe le cpu. Link al commento Condividi su altri siti More sharing options...
Gapo Inserita: 11 luglio 2009 Autore Segnala Share Inserita: 11 luglio 2009 X_GET e X_PUT, AFAIK, non funzionano per la Ethernet.In ogni caso, AG_SEND e AG_RECV vanno messe entrambe, anche perché la prima specifica dove prendere i dati, ma non dove metterli, e la seconda il contrario (a differenza di X_GET e X_PUT, dove specifichi entrambe) Link al commento Condividi su altri siti More sharing options...
walterword Inserita: 17 luglio 2009 Segnala Share Inserita: 17 luglio 2009 se stai trasmettendo delle stringhe ASCII , vengono sempre aggiunti dal sistema siemens due caratteri ad inizio buffer , li usa lui per cose sue come intestazione del frame .Quindi non le tocchi , le salti .Se invece stai traferendo dei bytes di dati "binari" allora guarda bene come te li shifta Di solito siemens trasmette con bytes invertiti all'interno di una word e word invertite all'interno di una doppia word .Questo e' dovuto all'architettura del processore e del sistema little endian .COn un TAW puoi sistemare tutto Lo uso spesso per mettere a posto gli allarmi in modo tale da poterli copiare in maniera continua dal db del plc a winccL mw10TAW T MW12 Se invece il tuo problema e' un altro ancora , allora sutidati bene il comportamento e scrivi un po di codice per un algoritmo che ti sistemi il tutto Link al commento Condividi su altri siti More sharing options...
Gapo Inserita: 17 luglio 2009 Autore Segnala Share Inserita: 17 luglio 2009 Nessuna stringa ASCII e nessuna inversione di Word o Byte... è un vero e proprio shift, ma solo se le due CPU sono nello stesso progetto: infatti lo stesso codice tra due CPU di progetti distinti non produce alcuno shift. Il codice è esattamente quello che ho riportato. Il problema non è scrivere algoritmi per "sistemare" la faccenda, ma capire perché lo fa... comunque al momento ho accantonato il problema, visto che nella situazione reale in cui mi troverò, il problema non sussiste. L'unica cosa che mi viene in mente, ripensandoci, è che non avevo assegnato a nessuno il ruolo di master, cosa che invece ho dovuto fare con i due progetti distinti, altrimenti non c'era proprio comunicazioneciao Link al commento Condividi su altri siti More sharing options...
walterword Inserita: 20 luglio 2009 Segnala Share Inserita: 20 luglio 2009 assegnare il ruolo ad un master , unico , in una rete RS485 è la cosa che devi fare prima di qualsiasi altra cosa Link al commento Condividi su altri siti More sharing options...
Gapo Inserita: 21 luglio 2009 Autore Segnala Share Inserita: 21 luglio 2009 In realtà, finche si sta nello stesso progetto, sembrerebbe che non si siano grossi problemi. Sono andato a ripescare anche un vecchio progetto di test dove scambiavo dati tra 5 CPU e tutto funzionava alla perfezione (a parte lo shift).Con CPU in progetti diversi invece la situazione cambia, e senza master non c'è proprio comunicazione. In ogni caso è probabile che sia proprio l amancanza di master a generare lo shift nel pruimo caso (solo che ora non ho modo di fare altre prove)ciao 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