+1 500 000 produkter som erbjuds

6000 paket skickas varje dag

+300 000 kunder från 150 länder

Quick Buy Favoriter
Varukorg

Programmerbart relä easyE4 (del 3)

Datum för publicering: 18-03-2021 🕒 13 min lästid

Eaton EasyE4

Användning av programmerbart relä easyE4 för att bygga en personräknare i ett rum

I tidigare delar av materialet har vi redan bekantat oss med hur man skapar ett program för **easyE4 och överför det till reläet. Vi har också skapat användargränssnittet och testat dess funktion. Det återstår att skapa programvara för att hantera sensorer (ljusbarriärer), känna igen personens rörelseriktning och generera en impuls baserat på detta som ökar eller minskar räknarens status för det aktuella antalet personer i rummet. Baserat på detta kommer vi att styra arbetet med en tvåkammarsignal eller en ljus-, ventilationsbrytare etc.

Inom industriell automation hittar vi många exempel på lösningar för riktningsdetektorer. Vissa halvledartillverkare producerar integrerade kretsar som, när de är anslutna till en inkrementell encoder, ger utgångar som anger rotationsriktning och hastighet. En sådan encoder har två utgångar (A och B), där signal B är fasförskjuten i förhållande till signal A med ±90 grader. I princip skulle man kunna använda en sådan krets eller en diskret lösning (byggd av grindar och register), men man måste komma ihåg att trots liknande sekvenser på ingångarna till det programmerbara reläet kan människor bete sig på ett sätt som är svårt att förutsäga.

Låt oss påminna oss om bilderna 3 och 4 som publicerades i den första delen av artikeln. De visar sekvensen av signaler som förekommer vid utgångarna av ljusbarriärerna, och därmed vid ingångarna till det programmerbara reläet easyE4, när en person går in eller ut ur rummet. På båda bilderna visas en ideal situation där hela signalsekvensen inträffade, men under verkliga förhållanden behöver det inte vara så. En person som går in i sensor 1:s räckvidd kan ändra sig och dra sig tillbaka. De kan också dyka upp i sensor 2:s räckvidd utan att passera sensor 1, etc. Vår lösning bör vara motståndskraftig mot sådant beteende hos de räknade personerna och åtminstone inte stoppa räknarens funktion, utan återställa processen och reagera korrekt vid detektering av nästa person.

3_poziom

Sekvens av att blockera/avblockera sensorer som orsakar ökning av räknarens status

4_poziom

Sekvens av att blockera/avblockera sensorer som orsakar minskning av räknarens status

Den enklaste riktningsdetektorn kan göras med en D-typ flip-flop. Vi ansluter barriär 1 till informationsingången på en sådan flip-flop och barriär 2 till klockingången. Vi placerar barriärerna tillräckligt nära varandra så att objektet som rör sig från sensor 1:s sida först orsakar en logisk etta på informationsingången och sedan – medan 1 fortfarande är på D-ingången – en stigande flank på klockingången, vilket kopierar ettan från informationsingången till flip-floppens utgång. Vid rörelse från sensor 2:s sida kommer klockpulsen först, vilket kopierar en logisk nolla från D-ingången till Q-utgången. På detta sätt kan vi känna igen rörelseriktningen och styra räknarens räkneriktning. En separat fråga är att klockpulsen bör inträffa först när D-flip-floppens utgång är stabil. Man kan använda pulsen som uppträder vid D-flip-floppens klockingång, men man måste lägga till en fördröjningsväg för denna puls för att ta hänsyn till flip-floppens propagationstid. Låt oss nu titta på situationen där en person går in i sensor 1:s räckvidd och drar sig tillbaka. Detta borde inte vara ett problem eftersom pulsen bara uppträdde vid flip-floppens informationsingång och inte kommer att ändra dess utgångstillstånd. Situationen är värre från andra sidan eftersom en sådan in- och utgång från räckvidden kommer att identifieras som en fullständig cykel. Därför måste vår rörelseriktningsdetektor inte bara reagera på hela signalsekvensen utan också inte generera en plus/minus-impuls för räknaren om denna sekvens inte är fullständig, det vill säga om det inte finns pulser vid båda ingångarna till det programmerbara reläet, i detta fall används I01 och I02.

Vid implementering av en rörelseriktningsdetektor antogs det att den skulle ha två klockutgångar, som liknar knapparna "höger"/"vänster" eller "upp"/"ner" som används i detta program, kommer att generera klockpulser vid två separata utgångar. En av dessa utgångar kommer att orsaka en ökning av räknarens status, och den andra en minskning. Genereringen av signalen för räknarblocket kommer att hanteras av logiska grindar placerade i samma nätverk som räknaren. Dessutom kommer detektorn att vara okänslig för eventuell "flimmer" av signalen vid dess ingångar. Plus/minus-signalen kommer endast att genereras när sekvensen är uppfylld:

  • Ökning av räknarens status: impuls på I01 –> impuls på I02.
  • Minskning av räknarens status: impuls på I02 –> impuls på I01.

Den bästa metoden för att skydda sig mot "flimmer" av signalen vid ingången är att använda en RS-flip-flop. Den har fördelen att när spänning appliceras på inställningsingången (SET) eller återställningsingången (RESET) förblir flip-floppen i ett stabilt tillstånd, oavsett om den logiska nivån vid SET-ingången ändras eller inte. I den föreslagna rörelseriktningsdetektorn används RS-flip-floppar vid båda ingångarna till easyE4-reläet (I01, I02). De ställs in med en hög spänningsnivå vid den relevanta ingången och förblir inställda tills de återställs.

Det skulle vara bäst om återställningsimpulsen för båda RS-flip-flopparna var räknarens ingångsimpuls, eftersom dess mottagning skulle innebära att rörelseriktningsdetekteringscykeln avslutades korrekt, detektorn genererade en impuls för räknaren och är redo för nästa signalserie. Men den räknade personen kan gå in i räckvidden för en av sensorerna eller mellan dem, och i en sådan situation kommer endast en av signalerna att visas vid reläets ingång, inte de två som krävs för korrekt detektion. Hur återställer man då ingångsflip-flopparna och vilken av dem? Det verkar bäst att återställa båda, helt enkelt efter en inte alltför lång tid avsedd för hela cykeln. En sådan tid i programvara eller hårdvarulösningar kallas timeout eller på svenska – tidsgräns.

RS-vippa – definiera användarmodul

En av fördelarna med att programmera med hjälp av funktionsblockdiagram (FBD) är möjligheten att definiera användarblock. Tack vare detta kan man inte bara definiera egna block och använda dem flera gånger i olika scheman, utan också använda de som skapats av kollegor, hårdvarutillverkare, tillgängliga på internetforum och andra. För våra behov och som en övning kommer vi att skapa ett sådant användarblock som innehåller en enkel RS-flip-flop byggd av två NAND-grindar. Dess schema visas i bild 1. I vår applikation behöver vi en flip-flop som triggas av en hög nivå, så vi kommer att lägga till inverterare (NOT-grindar) vid dess ingångar.

RS-vippa byggd av NAND-grindar Bild 1. RS-vippa byggd av NAND-grindar

För att skapa en användarmodul väljer vi från menyn Program –> Skapa användarmodul. Man kan också använda genvägsikonen eller (symbolen för en grind med en stjärna i menyraden) eller högerklicka på Användarmoduler, nedanför listan över tillverkarens moduler. När menyalternativet anropas visas ett fönster som på bild 2. Vi skriver in namnet på vår modul (t.ex. RS) och – vilket är mycket viktigt – antalet och typen av ingångar/utgångar. Nu räcker det med 1 binär utgång och 2 utgångar.

Användarmodulens egenskapsfönster Bild 2. Användarmodulens egenskapsfönster

Den användarmodul vi skapar kommer endast att bestå av några få element: två grindar, kontakter vid ingången och spolar vid utgången. Vi måste också använda en markör för att koppla ingången till utgången. För ett så litet antal komponenter räcker det med ett enda nätverk.

Det skulle vara bekvämare att dra anslutningarna på det sätt som visas i schemat, men det är inte möjligt. Elementen placeras av programvaran ett efter ett, så vi måste planera deras "platta" placering. Det är bäst att börja placera användarblocken från utgångselementet NAND. Till en av dess ingångar ansluter vi utgången från det andra NAND-elementet och en kontakt. Till den första NAND-ingången ansluter vi två kontakter. Det återstår att dra utgången – till den andra NAND-grinden i ordningen ansluter vi två spolar. Nu tar vi hand om egenskaperna hos de enskilda kontakterna och spolarna:

  1. Kontakter vid ingången (första NAND-elementet från vänster):
  • Typ: Ingångar och utgångar samt binära markörer; Kommentar: SET; Logiktyp: Öppnande; Argument: I
    • Ingång; Nummer: 1.
  • Typ: Ingångar och utgångar samt binära markörer; Logiktyp: Slutande; Argument: M – Markör; Nummer: 1.
  1. Kontakter vid utgången (andra NAND-elementet):
  • Typ: Utgångar och binära markörer; Kommentar: Q; Spolfunktion: Vanlig inverterad spole; Argument: Q
    • Utgång; Nummer: 1.
  • Typ: Utgångar och binära markörer; Spolfunktion: vanlig spole; Argument: M – Markör; Nummer: 1.

Det återstår att ställa in egenskaperna för kontakten som leder nollställningssignalen RESET: Typ: Ingångar och utgångar samt binära markörer; Kommentar: RESET; Logiktyp: Öppnande; Argument: I – Ingång; Nummer: 2.

Den funktionsmodul vi skapat bör se ut som på bild 3.

Funktionsmodul för RS-vippa Bild 3. Funktionsmodul för RS-vippa

Vi klickar på fliken med namnet på den modul vi skapat och väljer Stäng. Utvecklingsmiljön frågar om vi vill spara modulen på disken – vi bekräftar och ger modulen det valda namnet. Från och med nu är den definition vi skapat tillgänglig i listan över moduler och redo att användas.

Möjligheten att definiera moduler är ett fantastiskt verktyg. Med det kan man skapa ett bibliotek med färdiga lösningar som avsevärt förenklar skapandet av nya program och kan också underlätta arbetet för vårt team eller våra kollegor. Man kan också dela upp arbetet inom teamet – låt varje person skapa och testa ett valt element, som sedan kombineras till en sammanhängande helhet. I fallet med en enkel applikation och easyE4-styrenheten från Eaton är detta inte nödvändigt, men det är en bra vana i arbetet som kan vara användbar vid mer komplexa projekt.

Riktningsdetektor

För att förstå hur riktningsdetektorn fungerar är det värt att öppna programmet som finns i de extra materialen till artikeln. Det är möjligt att inkludera bilder av alla beskrivna nätverk, men det är bekvämare att granska dem (och kopplingarna mellan dem) under läsning på skärmen i easySoft 7-utvecklingsmiljön. Vid tveksamheter eller om beskrivningen blir lång kan man starta simulatorn och observera hur programmet beter sig under klickning. Särskilt eftersom det inte är lätt att beskriva funktionen hos enskilda nätverk (ibland innehållande en enda grind) utan att koppla dem till varandra.

Ladda ner programmet

Schemat för riktningsdetektorn börjar med nätverk nummer 0010. Från nätverk nummer 0010 till 0016 finns logiska element som ansvarar för hanteringen av ingång I01, medan från 0017 till slutet, till nätverk 0023, finns element som hanterar ingång I02. Båda delarna är symmetriska och är baserade på en kvadraturdetektor med en D-typ flip-flop. Eftersom kvadraturdetektorer arbetar med signaler som är fasförskjutna med 90 grader, och denna i personräknaren måste reagera på sekvenserna "ingen – I01 – ingen – I02 – ingen" eller "ingen – I02 – ingen – I01 – ingen", har RS-flip-floppar lagts till för att lagra ingångstillstånden, skydda mot flimmer av spänningen vid ingångarna och skapa den fasförskjutning som krävs i kvadraturdetektorn.

Till båda flip-flopparna har timers lagts till som mäter tidsgränsen för operationen, genererar en återställningsimpuls för ingångs- och utgångs-RS-flip-flopparna och grindar som blockerar ingångsimpulserna tills flip-flopparna återställs, det vill säga tills de är redo för nästa detektionscykel. De enskilda elementen placeras och kopplas i scheman på samma sätt som tidigare beskrivits och det är ingen mening att göra det igen. Det är bäst att analysera detektorns funktion med hjälp av simulatorn som startas med knappen Simulering. Tyvärr måste schemat i easySoft 7 delas upp i små nätverk och därför är det svårt att analysera. Därför är det bäst för nyfikna personer som vill fördjupa sig i ämnet att skriva ut de enskilda nätverken och rita ett schema bestående av logiska grindar. Då blir det lätt att urskilja D-flip-floppens element och separera dem från de tillagda funktionerna för blockering och återställning av flip-flopparna.

Minneslagring av räknarens status vid strömavbrott

Ur användarens synvinkel är det bekvämt att inte behöva ange inställningarna igen vid strömavbrott, utan bara eventuellt korrigera det aktuella visningsvärdet. I den beskrivna applikationen måste vi därför lagra och återställa innehållet i två räknare – dessa är modulerna C01 och C02.

Tillverkaren av utvecklingsmiljön har kallat egenskapen att lagra och återställa modulers eller markörers status remanens. För att läsa mer om det är det värt att använda menyn "Hjälp" som är tillgänglig genom att klicka på "?" i menyraden (man kan också trycka på F1). I fliken "Sök" ska man skriva in ordet "remanens". Man kan också använda den användarhandbok som finns tillgänglig i samma meny.

För remanenta bytes, det vill säga de som återställs efter att strömmen slås på, är 400 bytes minne avsatt. Det är förmodligen en separat integrerad krets eller en del av processorns minne, strömförsörjd av en separat källa, t.ex. en superkondensator eller ett batteri. Som det står i hjälpen för räknarmodulen "C", kräver lagring/återställning av dess status 4 bytes minne, så två räknare får lätt plats i 400 bytes.

För att aktivera lagring/återställning av räknarens innehåll klickar man på knappen "Projekt" som finns i det nedre vänstra hörnet. Sedan väljer man fliken "Systeminställningar". Det tredje fältet från vänster är "Remanens" (bild 4). Vid denna tidpunkt är det värt att notera värdet i fältet "Ledigt:" – i exemplet är värdet 400 bytes. Varje räknarmodul "C" kräver 4 bytes.

Remanensfält Bild 4. Remanensfält

För den beskrivna applikationen är innehållet i räknarmodulerna C01 och C02 viktigt, så i värdefältet bredvid "C" skriver vi "01", och i nästa "02", som på bild 5. De andra fälten, såsom moduler för snabbräknare "CH", inkrementell räknarmodul "CI", datamodul "DB" och tidsrelämodul "T" ignorerar vi. Vid denna tidpunkt kommer vi inte heller att hantera markörer (MW, MB, MD). Det är lätt att se att efter korrekt inmatning av intervallet har värdet "Ledigt" minskat med 8 bytes, vilket är så mycket som krävs för att lagra två räknarmoduler.

Remanensfält efter att ha angett inställningar för räknarna C01 och C02 Bild 5. Remanensfält efter att ha angett inställningar för räknarna C01 och C02

Simulering av räknarens funktion med easySoft 7

easySoft 7-utvecklingsmiljön har en inbyggd simulator som gör det möjligt att kontrollera programmets funktion, se ingångarnas och utgångarnas status och de logiska nivåerna som förekommer i de enskilda elementen i FBD-schemat. Användningen av simulatorn ger oss möjlighet att testa programmets funktion och hitta fel, även om det av uppenbara skäl inte kommer att vara exakt samma arbetsförhållanden som vår applikation kommer att möta i verkligheten. Nu kommer vi att använda simulatorn för att kontrollera personräknarens funktion.

Simulatorn startas genom att klicka på knappen "Simulering" som finns till vänster, längst ner i easySoft 7-fönstret. När vi simulerar räknarens funktion kommer vi att lämna de flesta parametrarna som de är och vi kommer inte heller att ställa in några fällor, men simulatorn har mycket intressanta funktioner som är svåra att hitta i jämförbara konkurrerande produkter. Förutom att ställa in fällor tillåter den till exempel användning av ett virtuellt oscilloskop som visar vågformerna för valda signaler. Låt oss prova dess möjligheter när vi kontrollerar det program vi skapat.

När vi har öppnat programmet "Licznik osób v11.e70" klickar vi på knappen "Simulering", och sedan expanderar vi listan Display ovanför den och klickar på Argumentfönster + oscilloskop. Till höger visas ett tomt Argumentfönster + oscilloskop. Vi klickar på stjärnsymbolen (*) i kolumnen Argument och skriver M05. Bredvid, i kolumnen Kommentar, bör meddelandet IMPULSER UPP visas. Klicka i kolumnen Oscilloskop för att visa en bock och som om det vore en kanal för en logikanalysator i oscilloskopfönstret. På samma sätt lägger vi till: M04 (IMPULSER NER), I01 (INGÅNG 1) och I02 (INGÅNG 2). Vi bör få resultatet som på bild 4.

Oscilloskopskärm efter konfiguration Bild 6. Oscilloskopskärm efter konfiguration

Vi startar simulatorn genom att trycka på F9 eller välja från menyn Simulering –> Starta. Från menyn väljer vi Oscilloskop –> Starta registrering (eller använder den relevanta ikonen i verktygsfältet – en kvadrat med en röd cirkel). Till vänster på skärmen bör vi ha expanderat listan Display. Vi klickar på Display + knappar. I den nedre delen av fönstret visas arbetsytan för vår räknarapp och här ställer vi in värdet TILLÅTET till större än 0 med hjälp av knapparna höger/vänster, till exempel 5, som på bild 5. Nu klickar vi på Display –> Digital ingång, och sedan i tur och ordning, två gånger i rutan bredvid 1:INGÅNG 1 och 2:INGÅNG 2.

Räknarskärm under simulering Bild 7. Räknarskärm under simulering (med det tillåtna antalet personer i rummet angivet).

Oscilloskopets arbetsresultat visas på bild 6. Det visar att den första impulsen inträffar vid ingång I01 och den nästa vid I02. Samtidigt med den stigande flanken vid I02 genereras en impuls vid utgången M05:IMPULSER UPP, vilket orsakar en ökning med ett av räknarens AKTUELLT status och visar detta värde på displayen. Att ge impulser i omvänd ordning orsakar generering av en impuls vid utgången M04:IMPULSER NER och minskar räknarens AKTUELLT status. Till oscilloskopskärmen kan man också lägga till t.ex. utgångar och observera hur de nivåer som förekommer på dem ändras i takt med impulserna vid I01 och I02, men i denna situation verkar det snarare vara överflödig information. Utgångarnas status kan lika gärna observeras genom att klicka på Display –> Digitala utgångar.

Vågformer vid räknarens ingångar/utgångar Bild 8. Vågformer vid räknarens ingångar/utgångar under simulering

Tack vare oscilloskopet kan man märka att nästa person kommer att detekteras först efter den inställda tidsgränsen för operationen (här är det 2,5 sekunder), så om barriärerna är placerade nära varandra kan denna tid förkortas. Man kan också observera att i den sekvens av impulser där räknaren fungerar korrekt kan de också överlappa varandra. Detta är för att barriärerna skulle kunna monteras för nära varandra. Efter att ha kontrollerat programmets funktion är det bara att överföra det till easyE4-styrenheten, ansluta signalerna från sensorsingångarna och ansluta signalen. På bild 7 visas den färdiga applikationen placerad i en plastlåda, vanligtvis använd för bostadsfördelningar. Bredvid styrenheten, under en öppningsbar lucka, monterades en återställningsknapp.

Personräknare Bild 9. Personräknare byggd med det programmerbara reläet easyE4

easyE4-styrenhet – sammanfattning

I tre artiklar har vi förberett en personräknarapplikation. Den kan användas på två sätt: antingen för att signalera överskridandet av det tillåtna antalet personer i ett rum, infört på grund av säkerhetskrav, eller för att slå på/av belysning eller ventilation i ett rum där de bara ska fungera när någon är där. I enheten har remanensfunktionen använts, så programvaran fungerar på ett sådant sätt att räknarblocken som innehåller inställningar och aktuell status lagras i icke-flyktigt minne och återställs när strömmen slås på. Vid strömavbrott behöver man därför inte ställa in räknarens parametrar igen – vid behov räcker det att räkna personerna i rummet och korrigera visningen.

Trots detta är easyE4-styrenheten ett stort steg framåt jämfört med äldre produkter. Det redan mycket bra utvecklingsmiljön easySoft 7 kommer med all säkerhet att förbättras ytterligare.

Tidigare dominerade styrenheter avsedda för specifika tillämpningar i olika applikationer. Nu, med exemplet easyE4 är det lätt att se att det inte är värt att bygga dem baserat på tillgängliga mikrokontroller. För ett relativt lågt pris får vi en styrenhet med en snabb processor, i ett robust hölje för montering på skena, med inbyggd display och tangentbord. Den kan enkelt integreras i ett nätverk och kommunicera med omgivningen, utöka dess funktionalitet och – vilket är mycket viktigt i alla professionella tillämpningar – den är kompatibel med många harmoniserade standarder, inklusive för industriella miljöer. Vi kan därför vara säkra på att vi levererar en enhet till användaren vars kärna har testats i ett certifierat laboratorium och som också stöds av tillverkarens varumärke och rykte.

Transfer Multisort Elektronik (TME) är en av världens största globala distributörer av elektroniska komponenter, elektrotekniska delar, verkstadsutrustning och industriell automation. Katalogen innehåller över 1 500 000 produkter från 1 300 ledande tillverkare. TME:s moderna logistikcenter i Łódź och Rzgów (Polen), med en total yta på över 40 000 m², skickar nästan 6 000 paket dagligen till kunder i mer än 150 länder.

TME investerar också i utvecklingen av kunskap och färdigheter hos unga ingenjörer och elektronikentusiaster genom TME Education-projektet och stödjer teknikgemenskapen genom att organisera TechMasterEvent-serien, som främjar innovation och erfarenhetsutbyte.

rightColumnPicture rightColumnPicture

LÄS ÄVEN