Tiago Gomes Inserito: 2 febbraio 2004 Segnala Inserito: 2 febbraio 2004 Cari Coleghi Ho un problema e non so il migliore modo per risolverlo. Ho notato che quando passo dei dati da WinCC al PLC, ad esempio, nella word il byte basso viene cambiato con il byte alto (siemens interpreta le word in modo diverso di microsoft). Vorrei chiedere a qualcuno si ha un soluzione per questo problema ? Ho pensato di fare una funzione di swap ? Cosa pensate ?SalutiTiago Gomes
vebernasconi Inserita: 2 febbraio 2004 Segnala Inserita: 2 febbraio 2004 So che in Visual C++ esite una funzione ntohl e la sua inversa che trasfomano un unsigned long little endian in big endian.Prova a controllare su WinCC. Dovrebbe essere una funzione implementata dai Socket TCP / IP.Ciao, Vittorio
rddiego Inserita: 5 febbraio 2004 Segnala Inserita: 5 febbraio 2004 Non ho ben capito il problema, ma mi sembrate due pazzi!!! Però per capire meglio:che PLC è?in che modo invii i dati?come è strutturata la memoria nei PLC Siemens:le word sono formate da due byte ciascuno dei quali da 8 bit. Il primo bit di una word è sempre quello più a destra.la word 0 è formata dal byte 0 + il byte 1 però partendo da sinistra. Quindi il primo bit della word 0 corrisponde al primo bit del byte 1. DOUBLE WORD 0 WORD 0 WORD 1 WORD 2 BYTE 0 BYTE 1 BYTE 2 BYTE 37 6 5 4 3 2 1 0 7 6 5 4 3 2 1 0 7 6 5 4 3 2 1 0 7 6 5 4 3 2 1 0MW0 oppure DB1.DBW0 significano rispettivamnete: word (16 bit) a partire dal byte 0 dell'area Merker; word a partire dal byte 0 del Data Block numero 1.ATTENZIONE che la word 1 parte da byte 1, quindi il byte 1 è sia alto sia basso di due word differenti!!!La prima word è la 0 la successiva è la 2 NON LA 1.Saputo questo capisci perchè trovi i byte "girati". Comunque secondo me è preferibile aggiustare i byte nel plc e non inviarli corretti da pc con C++Se sono io il pazzo...... beh ormai è andata che ci posso fare
Gabriele Corrieri Inserita: 6 febbraio 2004 Segnala Inserita: 6 febbraio 2004 Ciao,non mi ricordo se tale cosa esiste anche sul 200, ma di sicuro su S5 e sul 300/400, in quanto è una caratteristiche di avere le Word invertite in una DW ... in quanto i plc suddetti sono basati su CPU Motorola che utilizzano questa codifica, di norma si usa uno swap per invertirli ... sul 200 non so in quanto non mi è mai capitato di dover muovere verso le uscite DW ....Ciao
vebernasconi Inserita: 6 febbraio 2004 Segnala Inserita: 6 febbraio 2004 (modificato) Caro rddiego,il problema mi si è posto quando traferisco DINT da PLC a PC.Utilizzando Socket TCP/IP il valore non era corretto a causa della differenza delle diverse architetture( problema simile se non sbaglio si verifica se i dati ti arrivano da altri microprocessorii non Intel tramite TCP/IP) e quindi ho usato semplicemente l'istruzione messa a disposizione dalla libreria del C per ottenere il risultato corretto.Tutta la tua analisi è perfettamente corretta.Ci possono essere differenze rilevanti di prestazioni ad invertirle nel PC anzichè nel PLC che tu sappia?Ciao, Vittorio Modificato: 6 febbraio 2004 da vebernasconi
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