Loading...
 

OM32, OC32 and LichtOrgel


OC32 feedback command

Netherlands

Ik heb een "feedback" commando gevonden en getest.
In de doc geef je aan dat de parameters vrij zijn, maar dat het logisch is hier Pin nr en aspect no in te vullen.
(Zou handig zijn als dit in OC32Config als defaultwaarde wordt ingevuld ...)

Bij het uittesten is me echter opgevallen dat de reply direct als antwoord op het commando komt.
Leuk, maar de Ack geeft als aan dat het commando is ontvangen, dus ik zie hier geen toegevoegde waarde.

Wel toegevoegde waarde heeft dit in combinatie met het Mpx commando, waarmee je magneetartikelen kunt schakelen, net als met een PM32.
De PM32 geeft na ontvangst van een commando eerst gewoon een ack, pas als het commando geheel is uitgevoerd komt de reply, zodat het programma weet dat het magneetartikel is aangestuurd, en je ervan kunt uitgaan de de wissel is omgezet.
Dat gaat dus mis bij de OC32, de bevestiging komt direct na ontvangst van het commando, niet pas als het commando is uitgevoerd. Dat maakt het lastig voor de programmatuur uit te vogelen of een wissel al zou moeten zijn omgezet, of dat het commando nog in de wachtrrij staat.

Ik zie 2 oplossingen :
1. pas het Feedback commando aan, zodat de respons pas komt als het commando is uitgevoerd
2. Definieer een (nieuw) wait commando, waarmee je kan wachten totdat een voorgaand commando is uitgevoerd

in het laatste geval heb je per aspect 3 commando's nodig:
- Het mpx commando op de wissel om te zetten
- het wait-until-done commando
- het feedback commando

Ik denk dat dit laatst het fraaiste is, je hebt dan zelf de keuze tussen direct een feedback geven, of vertraagd, en je kunt ipv een feedback commando ook andere acties uitvoeren, zoals bv bij een overweg, waar je de lampen uit kunt doen zodra de bomen omhoog zijn.
Je kan dit wait commando ook laten toepassen icm met servo commando's.

Kort samengevat, een wait-until-done commando dat kan worden toegepast icm met een Mpx commando, een servo commando of misschien zelfs icm een puls commando zou zeer welkom zijn. (bij een puls wordt dan gewacht totdat de puls is afgelopen, of indien de glow tijd over is)

Idee moet nog verder worden uitgewerkt, maar voor mpx comando's is dit zeer wenselijk, omdat het stuurprogramma niet weet welke tijd er bij het mpx commando is ingevoerd, en je er dus van moet uitgaan dat de waarde in het programma juist is ....

Jos Bron, Utrecht

Netherlands

quote Ik heb een "feedback" commando gevonden en getest. /quote Bij welk commando van de OC32 heb je dat gevonden?

quote Leuk, maar de Ack geeft als aan dat het commando is ontvangen, dus ik zie hier geen toegevoegde waarde. /quote Wat betekent: Ack? Als dat "acknowledge" betekent, wordt het dan door een zender gegeven of een ontvanger van het commando? En als het door de ontvanger wordt gegeven, is het dan vóór of ná het verwerken van de opdracht?

quote … Mpx commando, … /quote Wat betekent "Mpx-commando"? Iets van "multiplex?

quote De PM32 geeft na ontvangst van een commando eerst gewoon een ack, pas als het commando geheel is uitgevoerd komt de reply, zodat het programma weet dat het magneetartikel is aangestuurd, en je ervan kunt uitgaan de de wissel is omgezet. /quote Wat heeft het hele verhaal over Ack en Mpx voor nut als je toch niet absoluut zeker bent van de uitvoering van een opdracht (= omzetting van het wissel)? Dan is het in feite toch domweg een sturing in plaats van een regeling?

quote Ik zie 2 oplossingen : … /quote Een derde oplossing is door terugmeldcontacten op bv. een servo te plaatsen. Beter is om een extra stang aan het wissel of een slagboom te bevestigen en daar de eindcontacten (= terugmeldcontacten) aan te koppelen. En de info daaruit te gebruiken voor verdere regeling van het systeem.

Netherlands

Het commando staat beschreven in de release notes.
Ook in OC32Config zit dit commando, je kan het eenvoudig selecteren als één van de opdrachten van een aspect commando.

Het Mpx commando is het commando voor de wisselaansturing via een matrix om een wissel aan te sturen, in OC32Config is dit het MxPulse commando, om lijnen te multiplexen. Zie ook de configuratie files voor wisselaansturing in een matrix.

Bij een PM32 dient de Ack als een bevestiging dat de puls om een wissel om te zetten is gegeven, Je kunt er dan van uit gaan dat, als er geen wisselstoring is, deze ook inderdaad is omgezet. Bij de OC32 met het MxPulse commando zou je hetzelfde willen, een bevestiging dat de puls om de wissel om te zetten is gegeven, en niet nog ergens in de wachtrij staat. Nu komt er een bevestiging dat het commando is ontvangen, wat wenselijk is, is een bevestiging dat de puls om de wissel om te zetten is gegeven, zo ben je compatibel met de PM32.

Welliswaar is het nog veiliger om met terugmeldings contacten te werken, dat geeft nog meer zekerheid, maar ook dat is maar relatief. Deze terugmeldscontacten zitten op de wisselmotor, als er een mechanisch defect is, geeft ook dit geen garantie dat de wissel is omgezet. Bovendien vraagt dit om extra inputs, waarmee de besparing gedaan door het multiplexen geheel teniet wordt gedaan. In de meeste gevallen is de bevestiging dat de wisselmotor is aangestuurd, en dat de wissel dus moet zijn omgezet, voldoende. Dat is nu met de OC32 (nog) niet mogelijk, met de PM32 is dit de standaard.

Waarom dit belangrijk is, het programma dat de wissels aanstuurt stuurt slechts een commando om de wissel om te zetten. bij een PM32 kan optioneel de pulsduur worden meegegeven, maar deze kan ook van te voren per wissel in de PM32 worden geconfigureerd. Het programma kan alleen maar weten of de wissel is aangestuurd door te wachten op de bevestiging van de PM32, tenzij je de pulsduur meegeeft en gaat uitrekenen wanneer de wissel is aangestuurd. Erg omslachtig, omdat je alle wissels na elkaar worden aangestuurd via een interne wachtrij.
Bij een OC32 is dit nog veel erger, je kan alleen maar via een configuratie programma de pulsduur per wissel vast programmeren onder een aspect programma. Het besturingsprogramma weet niet wat die waarden zijn, dus ook hier zou je dan dezelfde truck moeten uithalen, waarbij je er maar van moet uitgaan dat de tijden in het stuurprogramma overeenkomen met die in de OC32. Dat geeft veel afhankelijkheden, welke in één keer kunnen worden opgelost door vanuit de OC32 een bevestiging te geven dat de wissel de stuurpuls heeft ontvangen. Dan ben je compatible met de PM32.

Intern zet de OC32 de MxPulse command's in een wachtrij, deze commando's worden vervolgend na elkaar uitgevoerd. Door ook "Wait until Done" of het "Reply" commando in dezelfde wachtrij te zetten kan je de terugmelding dat de puls is gegeven nadat dit is gedaan, en ben je weer compatible met de PM32.
Misschien is het ook een optie om een vlag te zetten bij het McPuse commando om een reply te zenden na het omzetten. Deze reply zou dan het gegeven aspect commando kunnen terugzenden, het stuurprogramma weet dan dat het aspect commando waarin de Mxpulse staat is uitgevoerd.


Netherlands

Mijn vraag: Bij welk commando van de OC32 heb je dat gevonden?
Jouw antwoord: Het commando staat beschreven in de release notes.
Mijn (herhaalde) vraag: WELK commando? Er zijn maximaal 128 commado's. Daarvan zijn er 79 beschreven. Dus welke van de 79 commando's bedoel je?

Het ligt mogelijk aan jouw notatie in het eerste bericht: "feedback" commando. Die notatie is voor meerdere uitleggingen vatbaar. Eén daarvan is: Feedback-commando (code: 17). Een andere uitleg is: een commando dat overeenkomsten heeft met feedback, maar dat het eigenlijk net niet is. Jouw notatievorm duidt de 2e mogelijkheid aan.


Netherlands

Als je OC32config (v3.0.1) opent kan je de aspects commando's programmeren.
Als je de rroplijst van de mogelijke commando's opent staat er als laatste command het mxpuls commando, en vlak daarboven het feedback commando.
Dat zijn de command's die ik bedoel. mxpulse zet de wissel, feedbeck stuurt een reply.


Netherlands

Waar kan ik OC32config (v3.0.1) vinden?
Waarmee moet ik het openen?
Wat betekent: rroplijst ?

Ik heb nl. iets gevonden: "OC32DeviceDefinitions Generic 2015/06/10" in OC32Devices.def (na veel downloaden, uitpakken en zoeken), maar onderaan staat:

"Dev","(1)Gen: Feedback"
"Pin",0,2,0,"(1)Gen: Feedback"
"Cfg",5,0,0,4,4
"PAM",1,1,1
"Asp",0,"Off"
"Ins",0,17,0,0,0,0
"Asp",1,"On"
"Ins",0,17,0,1,0,0
"End"


Dus graag een duidelijk (en leesbaar in Kladblok) bestand meesturen.


Netherlands

Om heel precies te zijn heb ik een screendump van Oc32Config meegestuurd.
in de gegenereerde config file staat dan:

"Pin",0,2,0,""
"Dev",0,""
"Cfg",0
"PAM",1,1,1
"Asp",0,""
"Ins",0,18,0,0,0,0
"Ins",1,17,0,0,0,0
"Ins",2,0,0,0,0,0

Het MxPuls commando is dus opdracht 18.
het Feedback commando is commando 17.

Probleem is dat het feedback commando onmiddellijk wordt uitgevoerd, en niet pas als het voorafgaande commando is voltooid. Je wilt het feedback commando hier gebruiken om, net als met de PM32, te weten wanneer het voorafgaande commando in het aspect commando is uitgevoerd, en niet, zoals nu het geval is, wanneer het aspect commando wordt gegeven.

Hiervoor heb ik een "Wacht" commando gesuggereerd, wat de uitvoering van een volgend commando binnen een aspect pas uitvoert als het voorgaande commando geheel is uitgevoerd. Iedere andere oplossing is uiteraard ook welkom, zolang het maar resulteert in een bevestiging dat het mxpulse commando is uitgevoerd. Practisch gezien komt het er op neer dat het Feedback commando niet direct wordt uitgevoerd, maar net als het MxPulse commando in de MXPulse wachtrij wordt gezet, en dus wordt uitgevoerd zodra het voorafgaande commando in deze wachtrij (het MxPuls commando) is uitgevoerd.
Een goed alternatief zou een extra parameter in het Feedback commando zijn.
Nu staat er in parameter 1 en 2 de te geven respons, parameter 3 wordt niet gebruikt. Je zou er aan kunnen denken dat met met parameter 3 = 0 alles blijft zoals nu, en de andere waarden reserveer je dan voor opties.

parameter = 0: Zoals nu, stuur de 2 geprogrammeerde bytes als respons
parameter = 1: Zet in wachtrij, stuur respons pas als aan de voorafgaande commando's in de wachtrij zijn uitgevoerd
Parameter = 2: Geef als respons een copie van het gegeven Aspect commando
(de waarden in de parameter 1 en 2 worden genegeerd)
Parameter = 3: Combinatie van 1 en 2


Als hint voor verbetering heb ik aangegeven dat het Feedback commando nu een respons van 2 bytes geeft, welke moeten worden geprogrammeerd.
In geval van een respons uit vanuit een aspect commando zou het beter zijn als het oorspronkelijke commando (, , ) wordt teruggestuurd, je hebt dan een situatie welke gelijk is aan die bij de PM32, het commando wordt pas teruggestuurd als het is uitgevoerd.

Bij de PM32 stuurt het programma een commando, wat met een Ack wordt bevestigd, en vervolgens worden er lege commando's verstuurd. Pas als het commando is uitgevoerd wordt het oorspronkelijke commando (in hetzelfde formaat als het gegeven commando) teruggestuurd, ter bevestiging dat dit is uitgevoerd. Precies dat is wat ik op één of andere manier ook met de OC32 wil bereiken, geef een bevestiging dat het commando (hier het aspect commando) geheel is uitgevoerd. Dat is hier met name voor het Pulse commando gedaan, maar zou eigenlijk voor ieder commando nuttig kunnen zijn.


Netherlands

Jos,

Ik begrijp best wat je wilt, maar dat kan niet op de manier die je beschrijft.
Het feedback commando is primair bedoeld om de verandering op een Input Pin te rapporteren. Verder kun jer nog andere dingen mee doen als dat zo uitkomt.
De uitvoering van MX is een totaal onafhankelijk achtergrondproces en heeft geen enkele relatie met uitvoering van Aspect instructies. Terugkoppeling daarvan zal daarom apart geprogrammeerd moeten worden.
Het nut ervan is m.i. beperkt. Als je echt wilt weten of de wissel goed ligt moet je een echte feedback maken op een aparte Pin zoals Martin suggereerde.
Overigens schrijf je dat je de Feedback "ontdekt" hebt, maar volgens mij staat dat gewoon beschreven in de uitgebreide configuratie handleiding. Kan dat nu alleen ff niet controleren.

Mvg Leon

Netherlands

Klopt, staat summier beschreven in de release notes, heb het daar ook gevonden. UIteraard kan je terugkoppelen via een aparte pin, maar dan verlies je geheel het voordeel van het multiplexen. Je kan dan beter een PM32 nemen, dan detecteer je wel geen hardware storingen, maar je hebt in ieder geval een terugmelding wanneer de wissel omgezet zou moeten zijn. dat is nu dus met de OC32 niet mogelijk, tenzij je weer extra pinnen voor de terugmelding gaat gebruiken, en de wissels voorziet van een terugmeldcontact. Dat is geen echt alternatief voor de PM32. Daarmee kan je nu makkelijk 32 wissels aanturen (in motor modus), wil je dit met OC32's doen, dan heb je 2 OC32's nodig, wat veel duurder is.
Snap dat de mxpuls afhandeling een apart proces is, maar het zou toch mogelijk moeten zijn om in dit process een terugmelding in te bouwen wanneer een puls commando uit de wachtrij is uitgevoerd,

Ik heb overigens geen uitgebreide interface specs meer kunnen vinden in de galerij op de dinamo user site. Alleen een verouderde, waar het MxPuls en commando nog niet in staat beschreven. (wel hoe te configureren binnen een Aspect). Is er een up-to-date interface spec beschikbaar ? Zelfde geldt voor de PM32, er staat wel in de release notes dat er parameters en versie nummer kan worden uitgelezen, maar de specs hoe ontbreken. Heb het meeste inmiddels al wel uitgeplozen met een sniffer op de rs485 lijn, maar een document zou handig zijn. Doel is dat ik de modules wil kunnen aansturen vanuit een arduino, voor een eenvoudige demobaan, zonder van allerlei programma's gebruik te maken. Met een paar drukknoppen kan ik dan een bepaalde route starten en wat andere zaken aansturen, zoals een eenvoudige pendelbaan met wat verborgen opstelsporen. De Pm32 en/of de OC2 wil ik direct kunnen aansturen, en in een later stadium ook één of 2 TMH of TM44 units,


Netherlands

Je schrijft: Om heel precies te zijn heb ik een screendump van Oc32Config meegestuurd.
Wie heeft het betreffende DEF- (of DAT-)bestand samengesteld?

Het lijkt er op dat je de betreffende pin als uitgang en als ingang wil gaan gebruiken. Zoiets lijkt mij niet direct mogelijk. De input-opdrachten gebruik ik niet in combinatie met andere opdrachten die onder de Aspecten hangen. Zie mijn bijdrage van 2018-07-08, 23.37 uur.


Netherlands

Martin,

heb ook al een respons van Leon zelf gekregen, die weet precies waar het over gaat. Probleem is dat het MxPuls commando in de achtergrond wordt uitgevoerd, in tegenstelling tot de andere commando's welke direct worden uitgevoerd.
Ik heb geen input pin nodig. Wat betreft het dat bestand, als je de commado's invoert zoals in de screendump staat, kan je vervolgens OC32Config dit naar een .dat bestand laten wegschrijven. Dat is ook de methode om te kunnen achterhalen wat de commando codes zijn, kijk in het gegenereerde .dat bestand.
Zelf heb ik in Visual C++ een programmaatje geschreven waarin in alle verkeer op de rs485 lijn kan monitoren, en kan filteren op device type, adres en op type commando. Zo zie je precies wat er over de lijn gaat, en door na het geven van een bepaald commando vanuit b.v. Itrain of OC32Config zie je precies wat de codes zijn die over de lijn worden gestuurd. Vervolgend pas ik het C++ programma aan of dit in als commentaar bij op ket uitvoervenster te zetten.
Werkt voor alle apparaten, ook voor de TM51/TM44. Hoewel er veel commando's zijn beschreven in de documentatie is deze verre van compleet wat betreft de laatste updates. Echter met het sniffer programma blijft er geen bitje verborgen .....
Aansluiten is erg eenvoudig, zet een extra rs485 converter op de lijn, en gebruik deze als invoer voor het sniffer programma. Werkt fantastisch, maar is nog wel volop in ontwikkeling. Helpt mij erg goed om zelf software te maken om de boel aan te sturen voor een demo pendelbaantje, draaiend op een simpele arduino.


Netherlands

Jos,

Je schrijft een leuk verhaal, maar er staat geen antwoord op mijn vraag in. Net als jij ben ik ook bezig op het programmeervlak. Ik doe dat al bijna 30 jaar in Turbo Pascal, machinetaal (Z80, 8085, 80486) en Excel. Veelal modelspoor-gericht.


Netherlands

Welke vraag ? Ik heb je precies de command's gegeven, compleet met de bijbehorende code, en heb aangegeven dat ik het dat filtje heb laten aanmaken door OC32 config, Ik heb géén voorgeprogrammeerde devices gebruikt, en wil geen terugmeld ingangen gebruiken, alleen de bevestiging dat het MxPuls commando is uitgevoerd, en de wissel dus zou moeten zijn omgezet. Dus geen volledige terugmelding, dat gebruik je met een PM32 ook niet.
Leo heeft al uithgelegd dat dit niet eenvoudig is, omdat het MXpuls commando in de achtergrond wordt uitgevoerd, en er (nog) geen voorziening is voor een terugmelding. De Feedback wordt onmiddelijk uitgevoerd, en is hier dus niet voor geschikt, dat vereist een aanpassing de OC32 software om een respons functie in te bouwen, welke net als het MxPuls commando, in dezelfde achtergondtaak wordt meegenomen.
Het is dus gewaan afwachten of dit ooit in de OC32 software zal worden ingebouwd ....

Zelf programmeer ik op de PC ik Visual C++, en daarnaast microprocessoren, zowel de Amtel AtTiny als de AtMega in assembler, evenals de Pic14/16 als de Pic18 chips. Heb deze ook in microC en MicroPascal geprogrammeerd als ik snel iets nodig had, maar prefereer assembler. Op dit moment gebruik ik arduino's met een ATMega, welke ik soms voor een klein programmatje met de arduino compiler programmeer, maar ik prefereer de Amtel Studio, welke ik dat via de bootloader en de seriele poort, of via de SPI interface met een UBasp programmeer. Voor de Pic's heb ik een PicKit3 en MPLab.


Netherlands

Dit was mijn vraag: Wie heeft het betreffende DEF- (of DAT-)bestand samengesteld?
Jouw laatste antwoord: … en heb aangegeven dat ik het dat filtje heb laten aanmaken door OC32 config,

Dus jij bent de auteur. Dan is het nog maar de vraag of de combinatie van een MxPuls-commando (output) en het Feedback-commando (input) ooit werkend is te krijgen. Je zou dan o.a. veel meer moeten weten over de initialisatie van de input-en outputpoorten in de OC32.

De door jou gewenste combinatie vergt een aanpassing in de mogelijkheden van de OC32 en met name van het MxPuls-commando. Het uitlezen van het uiteindelijke resultaat van de MxPuls vergt hoogstwaarschijnlijk een nieuw feedback-commando in de OC32. Er zijn nog meer dan 40 opdracht-nummers vrij. Ik laat het verder maar aan Leon over.


 
Dutch (Nederlands, nl)English British (British English, en-uk)German (Deutsch, de)