tnnplc Inserito: 17 aprile Segnala Share Inserito: 17 aprile Salve a tutti, a titolo didattico ho seguito l'esercizio CRONOMETRO IN SCL e come suggerito come esercitazione voglio modificare il progetto per conteggiare anche i millisecondi... Dovrei usare il merker di clock a 1000Hz ma il PLC usato arriva fino a max 10Hz... come posso fare? Posso cambiare il PLC con uno che supporti questa frequenza? Grazie 😁 Link al commento Condividi su altri siti More sharing options...
dina_supertramp Inserita: 17 aprile Segnala Share Inserita: 17 aprile (modificato) I merker di clock dei sistemi 300-400-1200-1500 sono quelli che vedi, non cambiano al cambiare del modello di CPU. Sono 8 bit, vanno da 0.5Hz fino a 10Hz Merker di sistema e di clock - SIMATIC S7 Sistema di automazione S7-1200 - ID: 109759862 - Industry Support Siemens I merker di clock cambiano di stato in modo asincrono rispetto al ciclo della CPU. Esempio: La tua CPU a un ciclo di 1s (cosa inverosimile, valore usato solo per spiegare) e usi all'interno del codice il merker di clock da 2Hz, in un ciclo di scansione del PLC (1s) vedrai il merker accendersi 2 volte. Se vuoi proseguire con l'esempio, mantenendo la peculiarità del merker di clock, allora ti devi creare un bit asincrono rispetto al ciclo del PLC che "lampeggia" a 1000Hz. Visto che siamo in fase "didattica" mi sembra di capire, ti do solo lo spunto...vedi se riesci, sennò siamo qui... Devi sfruttare gli OB "Cyclic Interrupt" ... Modificato: 17 aprile da dina_supertramp Link al commento Condividi su altri siti More sharing options...
dina_supertramp Inserita: 17 aprile Segnala Share Inserita: 17 aprile (modificato) OB chiamato una sola volta ogni "tot" tempo da te definito , al cui interno scriverai la mezza riga di codice che inverte lo stato del bit ad ogni richiamo. M0.0 M0.0 | \ |------( ) Quando andrai ad interrogare quel bit nel programma lo vedrai lampeggiare con la frequenza di richiamo dell'OB d'interrupt. Ora, tu vuoi contare i millisecondi, quindi il valore minimo che devi misurare è 1msec. Ergo, richiamare l'OB d'interrupt ogni millisecondo vuol dire “uccidere” la CPU... Modificato: 17 aprile da dina_supertramp Link al commento Condividi su altri siti More sharing options...
batta Inserita: 17 aprile Segnala Share Inserita: 17 aprile Assurdo voler far eseguire ad un PLC task da 1 ms. Che poi, a cosa serve, se il PLC gira, per esempio, in 10 ms? Link al commento Condividi su altri siti More sharing options...
dina_supertramp Inserita: 17 aprile Segnala Share Inserita: 17 aprile 3 minuti fa, batta ha scritto: Assurdo voler far eseguire ad un PLC task da 1 ms. Che poi, a cosa serve, se il PLC gira, per esempio, in 10 ms? Condivido Mi sono dilungato nella spiegazione solo per passargli il concetto degli OB d'interrupt, senza soffermarmi sul tempo di richiamo "assurdo" di 1msec @tnnplc E' consuetudine usare gli OB d'interrupt per crearsi dei clock come anche usarli per allarmi a tempo o richiamo di funzioni PID o di Motion (nota che per quest'ultime ci sono gli appositi OB Servo nel caso di CPU Siemens 1500), ma devi considerare il tempo ciclo del PLC per intero, interrupt compresi. In breve, la regola che puoi adottare per gli OB di interrupt è questa: Il tempo di richiamo dell'interrupt deve essere maggiore del tempo ciclo plc misurato più lungo. Quali blocchi organizzativi si possono utilizzare in STEP 7 (TIA Portal)? - ID: 40654862 - Industry Support Siemens Personalmente non ho mai usato OB d'interrupt con richiami minori di 150msec Questo valore non è fisso varia in base a cosa devi fare (tipo di applicazione e relativi tempi di reazione) e con cosa lo devi fare (tipo di controllore e relative performance) Link al commento Condividi su altri siti More sharing options...
Livio Orsini Inserita: 17 aprile Segnala Share Inserita: 17 aprile 58 minuti fa, dina_supertramp ha scritto: Il tempo di richiamo dell'interrupt deve essere maggiore del tempo ciclo plc misurato più lungo. Non necessariamente. Dipende dalla durata della routine di servizio dell'interrupt. Ad esempio, con una vecchia 224, son riuscito a far funzionare una funzione richiamata ogni 5ms e che durava circa 1ms. Il tempo di ciclo aumentava a 3 volte (togliendo la funzione da interrupt il tempo di ciclo era di circa 12ms inserendo la funzione superava i 30ms), ma tutto funzionava egregiamente. L'unica cosa che potrebbe portare a malfunzionamenti è la durata del programma ad alta priorità. E un concetto comune ai sistemi operativi RTOS, anche se i tempi sono di 3 ordini inferiori. Lo puoi verificare anche sul PC se lanci un programma ad alta priorità piuttosto pesante ti accorgi che gli altri programmi, compreso l'aggiornamento dello schermo, rallentano pesantemente. 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