Sida 1 av 4
Kan man tidsmäta i PLC kod?
Postat: 8 juni 2016, 12:39:54
av Al_Bundy
Hej.
Jag har en sr04 distansmätare som är digital. Det första man gör är att ge den spänning och ström. Sedan finns det två pinnar.
In: Trig - den ska få en hög kort puls.
Ut: Echo - den ger en lång puls och längden puls ska föreställa avståndet mellan sensorn och objektet. Kort avstånd = kort puls. Långt avstånd = lång puls.
Då måste man mäta i koden när Echo blir hög tills den blir låg. Och här är snack om mikrosekunder och inte millisekunder. Kanske nanosekund förekommer också?
Då undrar jag hur man skulle göra det i PLC? Finns det tic och toc kommandon som räknar processorns tid?
Det kanske inte går i PLC?
Om ni undrar vad jag håller på med så är det learning by doing. Jag har igår byggt egen SPI algoritm som fungerar och nu tänker jag ge mig på något annat.
Re: Kan man tidsmäta i PLC kod?
Postat: 8 juni 2016, 12:46:48
av Klas-Kenny
Det beror väl helt på PLC'n.
Jag vet i alla fall att de Siemens S7 jag använt har hårdvarutimrar som fungerar fint. Osäker på upplösningen där dock, kolla dokumentationen i ditt fall..
Re: Kan man tidsmäta i PLC kod?
Postat: 8 juni 2016, 13:06:05
av sodjan
Du kan använda timers för generella fall. Det finns modeller med
"external gate" som kan räkna snabbare än processorn själv.
Man kan använda programvara för att räkna.
Man kan använd externa räknare som man sedan läser av från processorn.
> Kanske nanosekund förekommer också?
Varför fråga? Databladet är ju kanske inte väldigt tydligt (dåligt översatt),
men uppgifterna finns ju där i alla fall.
Om jag ser och räknar rätt så har du 34 cm per 1 ms pulsbredd. Så du har
relativt gott om tid att räkna ut pulsbredden, om du inte har väldigt korta avstånd.
Re: Kan man tidsmäta i PLC kod?
Postat: 8 juni 2016, 13:27:26
av Al_Bundy
sodjan skrev:Du kan använda timers för generella fall. Det finns modeller med
"external gate" som kan räkna snabbare än processorn själv.
Man kan använda programvara för att räkna.
Man kan använd externa räknare som man sedan läser av från processorn.
> Kanske nanosekund förekommer också?
Varför fråga? Databladet är ju kanske inte väldigt tydligt (dåligt översatt),
men uppgifterna finns ju där i alla fall.
Om jag ser och räknar rätt så har du 34 cm per 1 ms pulsbredd. Så du har
relativt gott om tid att räkna ut pulsbredden, om du inte har väldigt korta avstånd.
Vilka timers menar du då? Som jag vet så har bara structure text TON, TOM och TP.
Externa räknare som vadå? DS1307? Fast det är en RTC.
Re: Kan man tidsmäta i PLC kod?
Postat: 8 juni 2016, 13:29:43
av sodjan
Sorry, jag läste "PIC", inte "PLC"...

Och jo, jag såg Klas-Kenny's inlägg och undrade lite vad han yrande om...

Re: Kan man tidsmäta i PLC kod?
Postat: 8 juni 2016, 13:40:30
av Al_Bundy
Klas-Kenny skrev:Det beror väl helt på PLC'n.
Jag vet i alla fall att de Siemens S7 jag använt har hårdvarutimrar som fungerar fint. Osäker på upplösningen där dock, kolla dokumentationen i ditt fall..
Okej. Om det beror på PLCn så kanske man ska ha en extern räknare ?
Jag kör Codesys.
Re: Kan man tidsmäta i PLC kod?
Postat: 8 juni 2016, 14:04:39
av TomasL
Codesys är ju ingen PLC utan programvara, en PLC är kombinationen av hårdvara och mjukvara.
Huruvida olika funktioner stöds beror på både hårdvaran och mjukvaran, så du får studera hur olika saker är implementerade in hårdvaru/mjukvaru kombination.
Re: Kan man tidsmäta i PLC kod?
Postat: 8 juni 2016, 14:44:59
av milsson
Du borde säga att du kör codesys runtime för raspberry pi. Tänk på att det är en runtime som körs ovanpå linux och INTE är något RT-system.
Re: Kan man tidsmäta i PLC kod?
Postat: 8 juni 2016, 16:11:32
av sodjan
Just det ja, då är det ju ingen PLC (så som de flesta känner till det) alls...
Re: Kan man tidsmäta i PLC kod?
Postat: 8 juni 2016, 17:20:45
av Al_Bundy
Så hur fungerar Codesys Runtime?
Re: Kan man tidsmäta i PLC kod?
Postat: 8 juni 2016, 17:23:34
av lillahuset
Det borde väl du veta som kör Codesys.
Re: Kan man tidsmäta i PLC kod?
Postat: 8 juni 2016, 17:27:51
av TomasL
Du skriver ditt program i codesys språk, det kompileras till byte-kod.
I din Raspi har du någon linuxversion installerad, Codesys runtime körs i dit Linux-system som vilket annat program som helst.
Dvs anropar Linux-kärnan för att till exempel komma åt hårdvara osv.
När du laddar in din Capplikation så läser codesys-runtime filen och tolkar bytekoden och kör din applikation, som om det vore ett helt normalt program.
Dock eftersom du kör i ett Linux-system så kan du inte få RT-egenskaper, då linuxkärnan inte är konstruerad för detta.
Linuxkärnan kör flera processer samtidigt, vilket inte är möjligt i ett RT system (i princip), eftersom RT per definition kräver hårdvaru åtkomst utan fördröjning.
Nu vet jag inte hur ofta linuxkärnan växlar men det är så pass långsamt så du kan förvänta dig en hel del fördröjningar.
Re: Kan man tidsmäta i PLC kod?
Postat: 8 juni 2016, 17:57:07
av H.O
Jag har inte labbat med Raspberry över huvud taget men jag har sneglat på den ihop med Codesys. De anger 50-400us jitter men jag har inte hittat något om upplösning på timers eller vad cykeltiden är (om den är statisk) etc. Men jag har inte letat mer än ett par minuter just nu. 400us jitter på en 1ms mjukvarutimer känns ju inte så himla kul - och mindre än 1ms undrar jag om det finns utan specifikt hårdvarustöd (och det kansks finns i hallonpajjen, jag vet inte).
Det verkar finnas en del RT-kärnor till Raspberry, det kanske kan vara värt att kolla upp.
Re: Kan man tidsmäta i PLC kod?
Postat: 8 juni 2016, 18:01:18
av lillahuset
För många år sedan gjorde jag något liknande som jag kopplade till en printerport på en PC. Ett par räknare och lite strölogik var allt som behövdes.
Re: Kan man tidsmäta i PLC kod?
Postat: 8 juni 2016, 19:00:36
av Al_Bundy
TomasL skrev:Du skriver ditt program i codesys språk, det kompileras till byte-kod.
I din Raspi har du någon linuxversion installerad, Codesys runtime körs i dit Linux-system som vilket annat program som helst.
Dvs anropar Linux-kärnan för att till exempel komma åt hårdvara osv.
När du laddar in din Capplikation så läser codesys-runtime filen och tolkar bytekoden och kör din applikation, som om det vore ett helt normalt program.
Dock eftersom du kör i ett Linux-system så kan du inte få RT-egenskaper, då linuxkärnan inte är konstruerad för detta.
Linuxkärnan kör flera processer samtidigt, vilket inte är möjligt i ett RT system (i princip), eftersom RT per definition kräver hårdvaru åtkomst utan fördröjning.
Nu vet jag inte hur ofta linuxkärnan växlar men det är så pass långsamt så du kan förvänta dig en hel del fördröjningar.
Okej. Tackar. Då har jag verkligen fått en djup förklaring varför jag inte kan mäta tid i koden
