Vai al contenuto
PLC Forum


Comunicazione Wincc -> Plc - Comunicazione WinCC -> PLC


Tiago Gomes

Messaggi consigliati

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 ?

Saluti

Tiago Gomes

Link al commento
Condividi su altri siti


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

Link al commento
Condividi su altri siti

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 3

7 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 0

MW0 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

Link al commento
Condividi su altri siti

Gabriele Corrieri

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

Link al commento
Condividi su altri siti

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: da vebernasconi
Link al commento
Condividi su altri siti

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 account

Accedi

Hai già un account? Accedi qui.

Accedi ora
×
×
  • Crea nuovo/a...