CS3 Guide - Hvis-makro (IF-macro)
-
- Lokomotivfører
- Indlæg: 5230
- Tilmeldt: 30 jul 2011, 08:36
- Digital: Ja
- Scale: H0 - 2-rail
- Skinnesystem: Flex
- Geografisk sted: Malling
- Kontakt:
CS3 Guide - Hvis-makro (IF-macro)
Kræver CS3 version 1.4.1. Husk at opdatere din CS3, hvis du ikke allerede har gjort det.
Hvis / If
Betingelser er meget almindelige når du programmerer en computer.
En betingelse kan være enten sand eller falsk: Enten er betingelsen opfyldt eller også er den ikke opfyldt.
Betingelser forekommer oftest på formen:
Hvis (en betingelse er opfyldt) så (gør en bestemt ting) ellers (gør noget andet).
CS3 har hid til understøttet betingelser i form af "Hvis en betingelse er opfyldt, så fortsæt hændelsesforløbet".
Med Hvis-makroen understøttes mere avancerede betingelser, der kan ændre hændelsesforløbet, hvis det modsatte er gældende.
Hvorfor
Betingelser er meget brugbare og simplificerer automatikken. Tidligere skulle du oprette flere hændelsesforløb der håndterede både den positive betingelse og den negative betingelse. De skulle begge aktiveres (f.eks. af en S88 kontakt) for herefter at kunne bestemme udfaldet. Den hændelse, hvis betingelse ikke er opfyldt, vil stå som fejlet ind til den skal vurderes igen. Dette er som sådan ikke et problem for CS3, men det er ikke særlig brugervenligt.
Med Hvis-makroen behøver du ikke længere tænke på det.
Hvordan
Når du opretter en hændelse kan du trykke på knappen "Tilføj" og vælge "Hvis-makro".
Hvis du vælger "Hvis-makro" oprettes der en makro, som håndterer selve betingelsen. En makro ligner en hændelse, men kan kun aktiveres af andre hændelser. Du kan ikke manuelt aktivere den.
Ved at holde fingeren nede på makroen kan du åbne den og se indholdet. Du kan også åbne makroen fra listen af hændelser.
Som du kan se er der tre kasser: Hvis (repræsenteret ved "?") og "Så (THEN)" og "Ellers" (Else). Hvis betingelsen under "?" er opfyldt, udføres den opgave du lægger i "THEN" og hvis ikke, så udføres opgaven i "ELSE".
Nu er det egentligt blot at udfylde makroen.
I nedenstående eksempel tager mit indkørselssignal højde for om et sporskifte er afvigende eller ret. Det betyder at jeg trækker sporskiftet ind i "?"-kassen. Sporskiftet og den valgte stilling er nu betingelsen.
Herefter trækker jeg signalet ind i "THEN" og "ELSE". Her sætter jeg de rette stillinger, så det viser korrekt signalbillede afhængig af sporskiftets stilling.
Det betyder at hvis sporskiftet er ret, så sættes der én grøn. Hvis sporskiftet er afvigende, så sættes der en grøn og en gul (kør langsomt).
Reflektioner
Du kan bruge Hvis-makroen til rigtig mange ting og det begrænser sig ikke til ovenstående. Du kan også lægge andre hændelser ind på pladserne THEN og ELSE og dermed opnå meget avanceret automatik.
Værd at vide
Husk at CS3 ikke er begrænset til Märklin, men en fuld DCC central og fungerer selvfølgelig også med 2-skinne og alle skalaer (H0, N, TT osv.). Hvis du er interesseret i CS3 til dit 2-skinne anlæg, og har spørgsmål i den forbindelse, så skriv endelig og spørg.
Med venlig hilsen
Søren
2-skinne med CS3 Plus, tysk forbillede IV, V og VI | https://railway.zone/
-
- Stationsforstander
- Indlæg: 50
- Tilmeldt: 28 nov 2018, 22:33
- Digital: Ja
- Scale: H0 - 2-rail
- Skinnesystem: Märklin C
Re: CS3 Guide - Hvis-makro (IF-macro)
-
- Stationsforstander
- Indlæg: 50
- Tilmeldt: 28 nov 2018, 22:33
- Digital: Ja
- Scale: H0 - 2-rail
- Skinnesystem: Märklin C
Re: CS3 Guide - Hvis-makro (IF-macro)
-
- Lokomotivfører
- Indlæg: 5230
- Tilmeldt: 30 jul 2011, 08:36
- Digital: Ja
- Scale: H0 - 2-rail
- Skinnesystem: Flex
- Geografisk sted: Malling
- Kontakt:
Re: CS3 Guide - Hvis-makro (IF-macro)
Med venlig hilsen
Søren
2-skinne med CS3 Plus, tysk forbillede IV, V og VI | https://railway.zone/
-
- Stationsforstander
- Indlæg: 50
- Tilmeldt: 28 nov 2018, 22:33
- Digital: Ja
- Scale: H0 - 2-rail
- Skinnesystem: Märklin C
Re: CS3 Guide - Hvis-makro (IF-macro)
I forbindelse med ankomst af et tog til en banegård, hvortil der ankommer flere forskellige tog med forskellige kørselsmønstre på dette spor, skal toget efter udkørsel dirigeres til et andet spor via 2 sporskifte (kaldet W13 og W12). På banegården har jeg på sporet et kontaktspor (24995) og et udkørselsignal (76494) med tilhørende vippekontakt (24994) og endvidere 2 indkørselsignaler (76493) med samling ved sporskifte. De to udgående sporskifte styres herunder af signalet Indkørsel N4 (76493), som dog ikke er relateret til banegården men et signal på hovedstrækningen til banegården..
Ved passage af udkørselsignal er hændelsen forårsaget af vippekontakten (24994) automatisk:
Udkørsel (rød) / IF13: Indkørsel N4(gul/grøn); Then: AND13: W13 (grøn) - W12 (grøn); Else: AND8: W13 (rød) - W12 (rød) / Indkørsel N4 (grøn)
Det accepteres bare ikke. Men hvis jeg programmerer følgende, er det fint (i automatisk mode):
Udkørsel (rød) / IF24: Indkørsel N4 (grøn/gul); Then: W13 (grøn); Else: W13 (rød) / IF25: Indkørsel N4 (grøn/gul); Then: W12 (grøn); Else: W12 (rød) / Indkørsel N4 (grøn).
Hvad er forklaringen på ovennævnte, hvor W13 og W12 ikke initieres gennem AND men kun ved to IF-funktioner?
-
- Lokomotivfører
- Indlæg: 5230
- Tilmeldt: 30 jul 2011, 08:36
- Digital: Ja
- Scale: H0 - 2-rail
- Skinnesystem: Flex
- Geografisk sted: Malling
- Kontakt:
Re: CS3 Guide - Hvis-makro (IF-macro)
Med venlig hilsen
Søren
2-skinne med CS3 Plus, tysk forbillede IV, V og VI | https://railway.zone/
-
- Lokomotivfører
- Indlæg: 5230
- Tilmeldt: 30 jul 2011, 08:36
- Digital: Ja
- Scale: H0 - 2-rail
- Skinnesystem: Flex
- Geografisk sted: Malling
- Kontakt:
Re: CS3 Guide - Hvis-makro (IF-macro)
Jeg skal lige forstå hvad du forstår ved AND. Jeg får fornemmelsen at du forventer at AND makroen sætter W13 og W12. Du får lige en forklaring på hvordan det skal forstås, og så kan du se om det er der problemet ligger.
Opsummering på nedenstående: Hvis du smider AND-makroerne væk, putter indholdet i to almindelige hændelser og kalder dem fra THEN og ELSE i stedet, så tror jeg det virker.
Forklaring
AND (og OR) makroerne er en mulighed for at have såkaldte AND gates (eller OR gates) i hændelser. Det betyder at AND-makroerne vurderer status på alle elementer i deres indhold og returnerer enten sand eller falsk til den kaldende makro. Du kan tænke en gate som en bro du skal passere for at få lov til at komme videre. Hvis du ikke opfylder de rette betingelser får du ikke lov.
Her er et eksempel på en AND makro, du kan se at der er et lille spørgsmålstegn over hvert element. Da det er en AND makro betyder det, at makroen returnerer sand, hvis alle betingelserne er opfyldte. S1 OG S2 er røde = Sand. Hvis bare ét element afviger fra det viste er makroen falsk.
Hvis jeg kalder makroen ovenfor fra en hændelse, får jeg følgende i min hændelse: Bemærk spørgsmålstegnet over "AND" makroen. Dette betyder at hændelsen vurderer resultatet af AND makroen inden den fortsætter. Hvis makroen returnerer falsk, så kan hændelsen standses og ikke fortsætte. I ovenstående hændelse skal resultatet af AND makroen være sandt, før hændelsen stiller togvejen ind i spor 1.
Spørgsmålstegnet indikerer at elementet i hændelsen er en gate for hændelsens videre forløb. En AND-makro er en avanceret gate. Du kan også have et spørgsmålstegn på et sporskifte, så er det sporskiftets stilling der afgør om hændelsen fortsætter eller ej. Du kan betragte spørgsmålstegnet som et spørgsmål der starter med "Hvis":
HVIS (AND 1 er sand) SÅ fortsætter hændelsen
Enten gør vi det, eller også gør vi det ikke.
Omvendt kan du også undersøge det negerede resultat (NOT AND eller NAND). NOT kan du tænke på som "Hvis ikke". I princippet betyder det, at hændelsen fortsætter hvis det omvendte af resultatet er tilfældet.
HVIS (IKKE AND 1 er sand) SÅ fortsætter hændelsen
Du indstiller dette i makroens egenskaber.
Bemærk at makroen i udgangspunktet er sat op sådan, at den "venter" på at resultatet opnås når AND makroen kaldes og betingelsen ikke er opfyldt (altså AND-makroen returnerede "falsk").
Det har den konsekvens, at hvis hændelsen bliver aktiveret og betingelsen ikke er opfyldt, så sidder hændelsen klar i starthullet ind til betingelsen bliver opfyldt og så fortsætter den.
Dette er ikke altid ønskværdigt (især ikke ved togveje(!)). Du kan ændre dette til, at hændelsen afbrydes hvis ikke resultatet af din AND er det du ønsker. Her vælger du "Fortsæt" i egenskaberne for makroen under "Betingelse".
"Fortsæt" skal forstås sådan, at hvis betingelsen er opfyldt (altså sand) så fortsætter vi. Det er lidt selvmodsigende, da det alternative valg er "Vente", og skal forstås sådan at "Hvis betingelsen IKKE er opfyldt, så venter vi". Det er lidt forvirrende, men du vænner dig til det.
Det værste ville være en togvej der stiller sig timer efter den blev kaldt, fordi betingelsen først her er opfyldt. Det kan hurtigt blive ærgerligt.
Konklusion
AND- og OR-makroerne er "ganske almindelig" boolsk algebra i din CS3. Det er ekstremt kraftfuldt i forhold til automatik. Du kan læse mere om teorien her (og lad dig ikke slå ud af, at det kan være svært at forstå, hvis man ikke lige kender det):
https://en.wikipedia.org/wiki/Boolean_algebra
AND gate:
https://en.wikipedia.org/wiki/AND_gate
NAND gate:
https://en.wikipedia.org/wiki/NAND_gate
En AND-makro stiller altså ikke værdien af de elementer den indeholder, den vurderer deres status og returnerer det samlede resultat til den kaldende makro, som så kan bruge det til at vurdere det videre forløb. En AND makro i en IF-makro vil blot give IF-makroen information om sand eller falsk, og ikke gøre andet. Der vil derfor ikke ske noget, når en AND makro er i en IF-makro.
IF-makroen vil blot kalde AND-makroen som returnerer enten sand eller falsk, hvortil IF-makroen vil tænke "Nå?" og ikke foretage sig yderligere.
Derfor: Opret to hændelser i stedet for dine AND-makroer, der gør det du ønsker skal ske og smid dem i THEN og ELSE. Så virker det.
Hvad med OR?
OR fungerer på samme måde, men er en OR gate. Hvis vi tager eksemplet ovenfor er udtrykket i en OR makro sandt hvis S1 ELLER S2 er røde. Er både S1 og S2 grønne så er betingelserne for OR gaten ikke opfyldt, og resultatet er derfor falsk.
Jamen? Hvad kan jeg så bruge det til?
Gates er afsindig kraftfulde til avanceret automatik. Du kan bygge hændelser, der benytter gates til at vurdere om en togvej skal sættes.
Det kan f.eks. være et udtryk der kontrollerer, at der ikke er besatte spor på tværs af en togvej. Så kan CS3'eren foretage alternative handlinger, hvis betingelserne for togvejen ikke er opfyldte. Det kan f.eks. være at tænde en advarselslampe eller afspille en lyd.
Hvis man bruger CS3'eren til at bygge en fysisk pult med trykknapper, så åbnes der mange muligheder for at bygge det præcis som det fungerer i virkeligheden.
Tips og ideer
Husk på at det står dig frit for at omdøbe AND-makroen til noget mere sigende end "AND 1". Du kan passende kalde den noget der giver mening for dens brug.
Husk også på, at AND-makroer kan genbruges i andre hændelser. De er ikke bundet til den hændelse, hvor de først blev oprettet. Det betyder, at hvis du f.eks. har en AND makro der kontrollerer en betingelse, som du benytter flere steder, så kan du nøjes med den ene AND-makro.
Både for tiden brugt, men mest for overskuelighedens skyld, så kan det godt betale sig at kigge lidt på at dele dine hændelser og makroer op i små afgrænsede opgaver med hver deres ansvar, og så benytte en anden hændelse til at kombinere dem. Dermed opnår du en stor fleksibilitet i styringen af dit anlæg. Læs evt. mere her: https://en.wikipedia.org/wiki/Single-re ... _principle
Med venlig hilsen
Søren
2-skinne med CS3 Plus, tysk forbillede IV, V og VI | https://railway.zone/
-
- Stationsforstander
- Indlæg: 50
- Tilmeldt: 28 nov 2018, 22:33
- Digital: Ja
- Scale: H0 - 2-rail
- Skinnesystem: Märklin C
Re: CS3 Guide - Hvis-makro (IF-macro)
Som jeg ser det, har du forstået min udfordring. Men tak for for hjælpen.
-
- Stationsforstander
- Indlæg: 50
- Tilmeldt: 28 nov 2018, 22:33
- Digital: Ja
- Scale: H0 - 2-rail
- Skinnesystem: Märklin C
Re: CS3 Guide - Hvis-makro (IF-macro)
Hej Søren, Jeg fik aldrig fulgt helt op på problemet. Jeg forstod, at flere elementer, som indgår i eksempelvis AND, skaber problemer. Ved anvendelse af FSxx løses imidlertid problemet. Så hvis jeg ønsker at indstille flere end to elementer samtidig, for eksempel 2 sporskifte kombineret med et signal, er løsningen tilsyneladende ikke AND med gennem FSxx. Giver dette mening?