Vai al contenuto
PLC Forum


Accesso allo stesso byte da più POU


John_Fischetti

Messaggi consigliati

John_Fischetti

Salve,

è la prima volta che ho a che fare con il SoMachine 4.1 e mi trovo davanti a un comportamento strano che non ho riscontrato in nessun altro sistema usato fino ad oggi (Siemens e Panasonic).

Nel PLC (Schneider M241) è installata una scheda di uscita a 16 canali. Alcuni canali sono gestiti da una POU e altri canali da un'altra POU. Quando compilo non trovo messaggi di errore, ma quando genero il codice esce un errore che dice: "C0165: The same Byte in output-memory is written in different tasks."

I canali sono gestiti singolarmente come BOOL, non come Byte, e quindi non capisco cosa c'entri se li attivo da task diversi. L'unica soluzione che mi viene in mente è di fare una POU per tutte le uscite da gestire poi con comandi via variabili interne, ma mi sembra folle. C'è qualche idea a riguardo? Grazie.

John

P.S. E' il mio primo messaggio in questo forum :)

Link al commento
Condividi su altri siti


la POU è una program organization unit , unita di programma organizzata. E' un processo in un sistema operativo e come ben saprai un processo in un sistema operativo ha una sua area dedicata per memoria , stack , contatore istruzioni etc. Per scambiare informazioni con altri processi ci sono delle tecniche tipo le pipe , i messaggi etc che vanno sincronizzati con l'uso di mutex o semafori etc. E visto e considerato che un plc contiene al suo interno un processore con relativo sistema operativo .... 

Questo è il motivo per cui ti da' questo errore.E' come se tu volessi usare una variabile in due processi distinti , se poi e' un'uscita ancor peggio in quanto un sistema non e' mai in grado di sapere quando e in quale stato si trova un processo per cui non sa a chi assegnare l'uscita , cosa molto grave anche perche un'uscita non si deve mai assegnare piu di una volta , questo in qualsiasi sistema.

Modificato: da walterword
Link al commento
Condividi su altri siti

John_Fischetti

Grazie per la risposta, che però non è tale. E' ovvio che se io voglio scrivere sulle stesse uscite da più punti faccio un errore (che negli altri sistemi che ho usato sono per definizione "affari miei", cioè ad ogni istante le uscite vengono pilotate dal processo che è attivo in quel momento, e quindi avrò incertezze nel risultato). Invece io NON uso le stesse uscite da processi diversi, uso canali diversi BOOL che però fanno riferimento a un fantomatico Byte che io non uso, ma che evidentemente usa il sistema a mia insaputa. Mi spiego meglio. Io da un POU piloto l'uscita X che è mappata come BOOL e che io controllo mediante una "bobina" in un POU. Sulla stessa scheda di uscita piloto l'uscita Y che è anch'essa mappata come BOOL e che io controllo mediante un'altra "bobina" in un POU diverso. Tutte BOOL. Dove cavolo sta il "Byte"? Se metto le due "bobine" nello stesso POU il sistema funziona, se le divido in due POU diversi il sistema mi dà errore, ma io NON piloto la stessa uscita da due POU, piloto due uscite BOOL diverse che per un qualche motivo misterioso il sistema operativo interpreta come "Byte". Spero di essermi spiegato meglio. Grazie per l'attenzione.

John

  

Link al commento
Condividi su altri siti

  • 1 month later...

Ciao John,

il problema che descrivi è chiarissimo. Sarebbe, per me, interessante avere  un estratto del software che hai sviluppato per approfondire il problema e capire l'eventuale soluzione. Concordo sul fatto che il comportamento è strano.

Superfluo dirti che il problema è aggirabile usando un byte di "appoggio" da scrivere, poi, in un solo task.

 

Grazie

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