John_Fischetti Inserito: 21 gennaio 2016 Segnala Share Inserito: 21 gennaio 2016 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.JohnP.S. E' il mio primo messaggio in questo forum Link al commento Condividi su altri siti More sharing options...
walterword Inserita: 21 gennaio 2016 Segnala Share Inserita: 21 gennaio 2016 (modificato) 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: 21 gennaio 2016 da walterword Link al commento Condividi su altri siti More sharing options...
John_Fischetti Inserita: 21 gennaio 2016 Autore Segnala Share Inserita: 21 gennaio 2016 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 More sharing options...
frazzonie Inserita: 28 febbraio 2016 Segnala Share Inserita: 28 febbraio 2016 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 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