Název: Jak v Mosaicu počítat počet sepnutí výstupu? Přispěvatel: MrPeter 20.12.2021, 21:49 Chtěl bych v Mosaicu počítat počet sepnutí digitálního výstupu (heatingRelay1) - počítat náběžné hrany signálu. Mám v funkční blok v ST a v něm tento kód:
Kód: VAR Jenže do proměnné counterHeating Relay1 se přičte 1 vždy při zapnutí i vypnutí výstupu. Je to triviální funkce, ale už mě nějak nenapadá, co přehlížím? Existuje v Mosaicu přímo nějaký blok/funkce na počítání motohodin. Pro případ, že bych chtěl monitorovat celkovou dobu např. běhu čerpadla? Název: Re: Jak v Mosaicu počítat počet sepnutí výstupu? Přispěvatel: Tomáš Martinek 23.01.2022, 01:07 Jsem jen hobby programátor, ale řekl bych, že vám v kódu chybí právě to vyhodnocení náběžné hrany...
... nechce se mi hledat, jak je to v ST, ale zkoušel jsem to v CFC s R_TRIG pro vyhodnocení hrany a ADD navýšení čítače a funguje to - obrázek tu bohužel z nějakého důvodu nelze přiložit :-\ Název: Re: Jak v Mosaicu počítat počet sepnutí výstupu? Přispěvatel: Tomáš Martinek 23.01.2022, 01:18 Ještě bych to napsal jinak... není potřeba držet proměnnou lastHeatingRel ay1 a porovnávat s aktuálním stavem, pokud vyhodnotíte právě tu náběhovou hranu.
Nechce se mi to teď zkoušet, ale možná by pomohlo nepracovat přímo s proměnnou heatingRelay1, ale definovat si lokální vstupní proměnou POU a to právě jako BOOL_R_EDGE a čítač podmínit pouze touto proměnnou... Název: Re: Jak v Mosaicu počítat počet sepnutí výstupu? Přispěvatel: Juraj Rojko 23.01.2022, 11:30 Ten kód je v pořádku, detekce hrany tam je. R_TRIG nebo BOOL_R_EDGE se použít dá, ale v principu to dělá to samé (porovnává s předchozí hodnotou). Chyba bude někde v těch třech tečkách - t.j. v tom, co zde není uvedeno. Nicméně Peter na to už asi za ten měsíc přišel.
Název: Re: Jak v Mosaicu počítat počet sepnutí výstupu? Přispěvatel: MrPeter 15.02.2022, 21:32 Ne, ne, ještě jsem na to nepřišel. Neměl jsem zatím moc času to zkoušet. Hodnotu si zatím dělím dvěma :D Ale přijdu na to... Čím víc používám Mosaic, tím víc oceňuji TIA portal (bohužel).
Každopádně v simulátoru mi to funguje a v reálném PLC to nejde. Ty tři tečky v ukázce už nijak s touto částí programu nepracují. Jediná věc, která se jinde v programu mění je proměnná "heatingRelay1", která je vlastně název přímo digitálního výstupu. |