Loading...
 

Dinamo


USB Bug in RM-U 1.00 -> opgelost (was: Vreemd gedrag)

Netherlands

Leon,

Ik schrijf mijn eigen control sw voor de trein.
Ik zie een vreemd verschijnsel die ik maar niet opgelost krijg. Het kan aan mijn eigen sw liggen, maar mischien ken jij het in doe ik iets fout met het aansturen van de Dinamo.
Ik laat een lok rondjes draaien op een test ovaaltje en na 5 - 10 minuten lijken er wel opeens verkeerde detector events te komen.
Ik heb even een trace ingebouwd en wat blijkt: na die 5-10 minuten wordt een detector ineens 4 secondes later gemeld dan die is opgetreden en deze zelfde tijdverschuiving gebeurt voor alle andere volgende detectors, er wordt geen detector gemist, alleen maar erg laat gemeld.

Is dit bekend?

Gr,

Koos

Netherlands

Hallo Koos,

Als dit bekend zou zijn zouden honderden gebruikers er last van moeten hebben.
Het lijkt me waarschijnlijker dat jouw software niet snel genoeg communiceert met Dinamo waardoor de bezetmelders te laat worden ontvangen. Hoe vaak stuur je een null-datagram?

Mvg,
Leon


Netherlands

Hoi Leon,

Ik stuur een null-datagram elke 50 ms.
Ik ga verder zoeken. Ik ga het programma PortMon eens zetten naast mijn eigen trace, kijken of die 50ms cycle wordt onderbroken.
Verder kan ik nog RS232 i.p.v. USB proberen.

Bedankt.

Koos


Netherlands

Hallo Koos,

En zet je bij elk null-datagram ook het toggle-bit om?

Verder kun je ook eens testen met andere software, bv het DinamoUsers testprogramma. Het is in elk geval een controle of je systeem wel normaal werkt. Is dat zo, dan is de kans aanzienlijk dat je het aan jouw kant moet zoeken.

Mvg,
Leon


Netherlands

Hoi Leon,

Ja het toggle-bit "toggled". Communicatie gaat fout na een aantal minuten, tot dan gaat alles normaal. In ieder geval treed altijd dezelfde fout op. Ik zal eens testen met DinamoUsers maar dat wordt morgen of anders pas volgende week. Ik hou je op de hoogte.

Koos


Netherlands

Hallo Leon,

Vanmiddag getest met het DinamoUsers testprogramma en mijn eigen programma. Bij de eerste test met het test programma 3 blokken een snelheid laten gegeven, waarbij de vertraging op 0 was gezet. De lok 15 minuten rondjes laten draaien, geen problemen met de bezetmelders. Daarna mijn eigen sw, echter de Dinamo niet uitgeschakeld, nu geen problemen met mijn sw. Een initialisatie issue? Verdere analyses geeft voorzichtig aan dat mijn sw (of Dinamo?) fout gaat als het test programma werd gerunned met de vertraging wel aan.
Ik geef, zover ik mij herinner, de vertraging niet mee met het commando "Snelheid analoog" of anders staat het altijd op 0.

Volgende week meer testen.

Gr,

Koos


Netherlands

Hallo Koos,

Met uitspraken als "verdere analyse geeft voorzichting aan" en "voor zover ik mij herinner" kan ik eerlijk gezegd weinig. Als je niet weet welke commando's je eigen software stuurt, dan lijkt het me handig dat je dat eerst met zekerheid vast stelt. Als het probleem op de een of andere manier reproduceerbaar is, beschrijf dan exact hoe het reproduceerbaar is en als je dat doet met je eigen software (die ik niet heb) welke commando's je dan stuurt. Alleen op deze manier kan ik ooit achterhalen of er een probleem in Dinamo zit.

Mvg,
Leon


Netherlands

Hallo Leon,

Sorry, met wat ik schreef. Ik was er zelf ook ongelukkig over, daarom ben ik weer de treinkamer ingedoken. Ik gebruik het command "Snelheid analoog met polariteit" en ik gaf de massatraagheid parameter niet mee. Ondertussen geef ik de waarde 0 mee, maar dit heeft het probleem niet opgelost. Het probleem is reproduceerbaar, echter het treed soms na 5 seconden na de start op, een andere keer treed het pas na 10 minuten op. Het enige wat zeker is dat detector events te laat worden gemeld door de driver.
Ik merk dat dit alles geen trigger bij jou geeft, ik blijf wel zoeken.

Gr,
Koos


Netherlands

Hallo Leon,

Het probleem is gelocaliseerd. Allereerst heb ik in de afgelopen tijd de foutkans gereduceerd door alle datagrammen byte voor byte te sturen i.v.p. via 1 opdracht naar de seriele poort (en dan via de USB driver naar Dinamo). Ook resette ik de opdracht (50 ms tack) voor een null-diagram nadat ik Dinamo een opdracht had gegeven.
De fout trad nog steeds op, echter ik moest vaak lange tijd wachten. Vandaag kwam ik erachter dat ik op alle mogelijke foutsituaties breakpoints had gezet behalve op een, nl de test voor de 0 op bit 7 van de Address Byte. En inderdaad hier trad de fout op, ik handelde deze fout niet goed af. Ik heb de sw aangepast. Ik ben niet helemaal zeker of het goed is, op dit moment treed de fout niet meer op (lok loopt al 1.5 uur) en het lijkt daarom een externe storing te zijn (breakpunt staat nog er op).


Netherlands

Hallo Leon,

Na bijna 2uur trad er toch nog een fout op.
De analyse laat zien: als reaktie op een null-diagram komt:
0A (Hex waardes) D0 8B F7. Dit is een switch event. Wordt weer gevolgd door een null-diagram: 08 F8. Hierna komt er van de RM terug: F7, hier staat bit 7 fout. De nieuwe sw gaat nu de RM uitlezen tot dat een timeout volgt. Ik lees gedurende 1 secondes alleen maar F7 uit, ploseling gevolgd door 9B 0A D0 8B 9B, dan volgt de timeout, het null-diagram wordt herhaald en alles gaat weer normaal.
Kun je hier iets mee?

Gr,

Koos


Netherlands

Hallo Koos,

Welke versie (firmware) RM-U heb jij?

Mvg,
Leon


Netherlands

Hallo Leon,

RMU 1.0 2009/01/13

Gr,
Koos


Netherlands

Hallo Koos,

Ik heb een mogelijke fout gevonden in de USB transmit routine. Ik kan daaruit niet echt goed verklaren dat je de data ontvangt die je ontvangt, maar wel dat er een kans is dat het fout kan gaan als precies tussen 2 instructies een bepaalde interrupt optreedt.
Overigens zou de fout dan evengoed moeten optreden als er geen trein rijdt. Het Dinamo systeem aan laten staan en blijven communiceren via USB moet genoeg zijn.
Kun jij de fout reproduceren, in de zin dat je kunt zien dat het mis gaat als je maar lang genoeg wacht? In dat geval stuur ik jou een nieuwe RM-U firmware en wil ik je vragen om te kijken of dat het probleem oplost.

Mvg,
Leon


Netherlands

Hallo Leon,

Bedankt voor het bekijken van je sw. Ik had al USB willen omzeilen, maar ik heb niet de juiste RS232 kabel beschikbaar.

Om ca. 15:00 kan ik de treinkamer induiken, en zal ik weer een breakpoint op de fout zetten, en inderdaad geen trein laten draaien (alleen null-dagrams).
Die F7 die steeds terugkomt lijkts wel de checksum van de laatst verstuurde null-diagram.

Gr,
Koos


Netherlands

Hallo Koos,

De F7 die je ontvangt is 1 minder dan het laatste door jouw software gestuurde byte (checksum F8).
Je ontvangt waarschijnlijk 64 keer een F7.
Als dat klopt is het inderdaad de fout die ik vermoed.

Mvg,
Leon


Netherlands

Hallo Leon,

Ik heb de logging er nog eens op na gekeken en het zijn er inderdaad 64.
Snel gevonden. Moet ik nog testen aan mijn kant? Kan ik een work around aan mijn kant maken?

Gr,
Koos


Netherlands

Hallo Leon,

Zojuist de test gedaan waar jij om vroeg. In 8 minuten was het raak. Inderdaad weer 64 keer 1 minder dan de laatste checksum.

Gr,
Koos


Netherlands

Hallo Koos,

Met goede informatie kom je snel to-the-point ;-)
Nee, verder testen heeft geen zin. Ik weet 99,99% zeker wat de fout is en hoe ik hem kan oplossen. 5 Minuten werk (max).

Als je doet wat het protocol voorschrijft (als je wacht op een nieuw bericht alle bytes die geen header-byte zijn (dus bit 7 = 1) negeren en doorlezen tot er een byte komt met bit 7 = 0 of een time-out optreedt) heb je je work-around. De fout kan in sommige gevallen echter vervelende neveneffecten hebben. Het is dus goed dat je dit gevonden hebt en ik moet het zowiezo oplossen. Communiceren via RS232 zou geen probleem moeten opleveren.

Behalve het herstellen van deze fout wil ik nog een kleine wijziging aanbrengen voor een andere gebruiker. Dat is iets meer werk dan 5 minuten en dat wil ik graag meteen meenemen. Ik verwacht je uiterlijk woensdag een update te kunnen sturen.

Mvg,
Leon


Netherlands

Hallo Leon,

Ik heb zojuist meer dan 1 uur Dinamo en mijn sw laten draaien met RM-U 1.01.
Er zijn geen kommunikatie problemen meer opgetreden.

Bedankt voor je snelle oplossing. De oude processor gaat retour.

Gr,
Koos


Netherlands

Hallo Koos,

Dank voor de test, mooi dat het is opgelost.
Misschien wil jij de communicatie nog wat langer laten draaien, als dat geen ernstige aanslag op je energierekening is tenminste. Een vorige keer trad de fout ook pas na 2 uur op, schreef je. Als ik verder niets van je hoor neem ik aan dat je niets vreemd meer tegenkomt.

Ik heb trouwens het onderwerp van dit geheel even aangepast om het beter traceerbaar te maken.

Mvg,
Leon


Netherlands

Hallo Leon,


Vandaag heeft de test 6 uur gedraaid, geen probleem opgetreden.
Komende week zal ik nog wat uren draaien. Ik kom alleen terug als alsnog een foutje in de communicatie optreedt, iets wat ik eerlijk gezegd niet verwacht.

Gr,
Koos


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