Scaram Inserito: 19 ottobre 2007 Segnala Share Inserito: 19 ottobre 2007 Salve, mi piacerebbe sapere nel dettaglio cosa faccia di preciso il comando "DO" in S5. Ovviamente l'ho cercato in lungo e largo ma non ho trovato niente ne' su manuali ne' in rete... Mi e' stato detto che ha una funzionalita'per certi versi simile al "DO-WHILE" dei linguaggi tipo Java pero' a me servirebbe sapere precisamente come funziona,comprese le modifiche (se ci sono) che porta sugli accumulatori e la parola di stato...Vi riporto per esempio uno stralcio di codice nel quale compare il suddetto comando: A =ERR BEC DO =DB L KF 0 T FW198 LW =STDW T FW200 L KM 10000000 00000000M003: T FW 196 DO FW 200 L DW 0 AW L KF 0 ><F = =ERR JC =M001Da quello che si denota in questo codice il comando DO viene usato la prima volta con un parametro di tipo puntatore (e, per la cronaca, questo in S7 viene tradotto con AUF,ovvero il comando per aprire un blocco dati). La seconda volta invece viene usato con un parametro di tipo FlagWord (e questo in S7 viene tradotto in maniera che evito di riportare per non complicare ancora di piu' le cose). Insomma che fa questo comando???Grazie in anticipo. Link al commento Condividi su altri siti More sharing options...
Matteo Montanari Inserita: 19 ottobre 2007 Segnala Share Inserita: 19 ottobre 2007 il comando DO significa DatablockOpen, letteralmente apri il blocco dati.DO =DB -> qui apre il blocco dati indicato in DBDO FW 200 -> qui apre il blocco dati "puntato" nella varibile FW200, ovvero il numero del DB corrispondente al numero presente nella word 200 dei flag (merker).(non mi ricordo se il numero doveva essere scritto in decimale o esadecimale).per alcune cose il programma di "traduzione" da S5 a S7 funziona, in altri casi è molto più semplice riscrivere la funzione in linguaggio S7...(parere personale) Link al commento Condividi su altri siti More sharing options...
rguaresc Inserita: 19 ottobre 2007 Segnala Share Inserita: 19 ottobre 2007 LW =STDW // leggi la word STDW dove STDW e' un parametro rivevuto alla chiamata dell'FBT FW200 // e salvala in FW200............DO FW 200 L DW 0 // leggi il contenuto della DW indicata da FW200. Il DO unito all'istruzione successiva permette di fare una lettura indiretta in memoria. Se ad esempio il parametro STDW vale 123 alla fine sara' letta la DW123 del blocco dati aperto Link al commento Condividi su altri siti More sharing options...
Savino Inserita: 19 ottobre 2007 Segnala Share Inserita: 19 ottobre 2007 (modificato) Il mnemonic inglese DO(procesing operation) equivale al mnemonic tedesco B(operazione di elaborazione)..non mi ricordo se il numero doveva essere scritto in decimale o esadecimale esadecimale!Il DO unito all'istruzione successiva permette di fare una lettura indiretta in memoria e quindi si comporta da puntatore: il valore della variabile rappresenta l'indirizzo di un'altra variabile... Un'altro esempio..DB6 .. . DW 12 KH = 0108 DW 13 KH = 0001 FBx A DB 6 .. .. B DW 12 ( DO DW 12) U M 0.0 B DW 13 SS T 0 Programma eseguito A DB 6 .. . U M 8.1 (KH = 0108) SS T 1 (KH = 0001) Modificato: 19 ottobre 2007 da Savino Link al commento Condividi su altri siti More sharing options...
Scaram Inserita: 24 ottobre 2007 Autore Segnala Share Inserita: 24 ottobre 2007 (modificato) Grazie a tutti!!! In effetti mi era venuto piu' di un dubbio sul fatto che facesse qualcosa tipo DO-WHILE... Vedendolo utilizzato avevo supposto anch'io che fosse un comando di "apertura" delle DB, pero' per fare cio' io avevo sempre visto usare il comando OPN (o AUF in tedesco)... La differenza immagino stia nel discorso puntatatore che mi avete appena eplicitato in maniera chiarissima... Credo che dovro' fare un paio di discorsetti a chi mi aveva mal consigliato citandomi il DO-WHILE... Modificato: 24 ottobre 2007 da Scaram Link al commento Condividi su altri siti More sharing options...
Scaram Inserita: 26 ottobre 2007 Autore Segnala Share Inserita: 26 ottobre 2007 Vediamo se ho capito bene...Questo stralcio di codice S5:DO FW 200L DW 0viene tradotto in S7 come:T #conv_akku1L STWT #conv_stwL MB 201SLW 4LAR1 L #conv_stwT STWL #conv_akku1L DBW [AR1,P#0.0]Posso pero' ridurre il codice S7 alle istruzioniL DW [FW 200]E' corretto questo? Il codice e' equivalente o no? Link al commento Condividi su altri siti More sharing options...
rguaresc Inserita: 27 ottobre 2007 Segnala Share Inserita: 27 ottobre 2007 (modificato) L'intenzione e' corretta e con un plc AB funzionerebbe, ma non con lo step 7 che non permette questa sintesi.In step 7 l'indirizzo e' sempre un undirizzo a bit che per comodita' di solito si puo' dichiarare nella forma byte.bit. Il numero che esprime l'indirizzo a bit e' del tipo doppio intero.Un modo per rendere L DW [FW 200] puo' essere. L FW 200 // leggi il numero intero che punta al byte, 0 primo byte, 1 secondo, 2 terzo... ITD // convertilo in doppio intero (32 bit) SLW 3 // moltiplica per 8 per avere l'indirizzo a bit T FD 202 // salvalo in un registro a 32 bit L DBW [FD 202] // leggi indirettamente puntando al bit intero X 8 e preleva una word Modificato: 27 ottobre 2007 da rguaresc Link al commento Condividi su altri siti More sharing options...
Scaram Inserita: 29 ottobre 2007 Autore Segnala Share Inserita: 29 ottobre 2007 Per quanto non molto stringata e' preferibile alla grande questa forma rispetto a quella che crea il tool di conversione e che ho postato sopra,no? Pero' non mi e' molto chiaro perche' l'istruzioneL DBW[FW 200]non sia accettata da step7 mentre invece ad esempioT DBW[FW 200]non da' problemi. Link al commento Condividi su altri siti More sharing options...
Scaram Inserita: 29 ottobre 2007 Autore Segnala Share Inserita: 29 ottobre 2007 Errata corrige:ovviamente non e' FW 200 (sintassi s5) bensi' MW 200 (sintassi s7) Link al commento Condividi su altri siti More sharing options...
Scaram Inserita: 29 ottobre 2007 Autore Segnala Share Inserita: 29 ottobre 2007 Sempre su questo benedetto comando...DO FW 166C DB 0Puo' essere tradotto in S7 conAUF DB[MW 166] ???L'editor non mi segnala errori ma vorrei esserne sicuro...Mentre inveceDO FW 168T DD 0se lo traduco in S7 comeT DBD [MW 168]mi segnala errore... Link al commento Condividi su altri siti More sharing options...
Scaram Inserita: 5 novembre 2007 Autore Segnala Share Inserita: 5 novembre 2007 Ovviamente l'errore era nella sintassi, il comando corretto e' T DBD [MD 168]Ho provato con il PLCSIM ,facendo i test piu' svariati, se fosse giusto utilizzare AUF DB[MW 166] al posto del malloppone che mi propone il tool di conversione. Ebbene sembra proprio che si possa fare, non ho riscontrato errori di nessun tipo 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