Min CS3Plus i "u-du"...

Her kan du debattere og stille spørgsmål til alt om elektronik og digitaldrift på modeljernbanen. Skal du have hjælp til en dekoder eller driller signalet? Stil dit spørsmål her.
Kresten
Stationsforstander
Indlæg: 94
Tilmeldt: 18 mar 2017, 07:06
Digital: Ja
Scale: H0 - 3-rail
Skinnesystem: Märklin C K

Min CS3Plus i "u-du"...

Indlæg af Kresten »

Jeg er begyndt at lege med den, og i begyndelsen gik det meget godt. Men...

Den har fået det med at "låse" bestemte taster. F.eks. låser den pludselig sporskiftetasterne, så jeg ikke kan skifte spor. Den "halvlåser" også Start/Stop-knappen, så den godt nok lyser op, når jeg trykker på den - men den ændrer ikke status. Alle andre taster og funktioner virker stadig fint, så vidt jeg kan se. Jeg kan ogås redigere, tilføje og slette artikler. Men altså ikke skifte dem.

Låsningen sker både direkte op skærmen og fra VNC. Det går i orden, når jeg genstarter - både direkte på skærmen og fra VNC.

Efter et stykke tid fandt jeg ud af, at det sker hver gang jeg "leger" med et script, hvor jeg sender en sporskifte-kommando fra min RPi. Det script virkede fint i et stykke tid - men nu går der altså et eller andet galt.

Som begynder hælder jeg til en "fejl-40", og har prøvet at finde et sted, hvor jeg kan re-IPL'e hele CS3 med ny SW (hvis jeg nu har fået ødelagt et eller andet). Det er ikke lykkedes mig at finde sådan en funktion. Findes den ?

Jeg har produceret en log, som vises som fil på backup-skærmen (selv om den truer med at indlæse loggen som styresystem). Men hvordan kommer jeg til at læse den ?

Er der nogen, der har et forslag - evt. til fejlsøgning ? Og nej, løsningen er IKKE at lade være med at sende CAN-kommandoer via nettet. Det skal den vel for *** kunne tåle - selv hvis jeg kvajer mig gevaldigt...!

På forhånd tak for alle gode ideer :-)
VH Kresten
moppe
Lokomotivfører
Indlæg: 4480
Tilmeldt: 30 jul 2011, 12:22
Digital: Ja
Scale: H0 - 2-rail
Geografisk sted: Hammel
Kontakt:

Re: Min CS3Plus i "u-du"...

Indlæg af moppe »

VNC?

Kan du ikke bare bruge webserveren?



Klaus
moppe
Lokomotivfører
Indlæg: 4480
Tilmeldt: 30 jul 2011, 12:22
Digital: Ja
Scale: H0 - 2-rail
Geografisk sted: Hammel
Kontakt:

Re: Min CS3Plus i "u-du"...

Indlæg af moppe »

For øvrigt, hvilken kommando sender du, der får den til at gå i stå?



Klaus
Kresten
Stationsforstander
Indlæg: 94
Tilmeldt: 18 mar 2017, 07:06
Digital: Ja
Scale: H0 - 3-rail
Skinnesystem: Märklin C K

Re: Min CS3Plus i "u-du"...

Indlæg af Kresten »

Hej Klaus
Jeg bruger VNC fordi CS3 står lidt langt væk - kablet til min router. VNC bruger jeg kun til dels til at lege med CS3 og dels til at checke status, når jeg har fyret en kommando/besked af fra min RPi. Når alt går galt, letter jeg den nederste del af ryggen og vandrer hele vejen til CS3 (vistnok lis'som da vi fik remote-control til fjernsynet - det skal jo virke).

Den besked, jeg sender via TCP-socket, port 15731, er: '0x0 0x16 0x43 0x28 0x06 0x00 0x00 0x30 0x00 0x00 0x01 0x00 0x00':
- '0x16' siger sporskifte (i mit tilfælde)
- '0x06' er længden på beskeden
- '0x30" siger MM2 protokol
- '0x00" siger MM2 adresse 1
- '0x01" siger (vistnok) "thrown" - eller osse er det "closed"

Og hvor ´0x43' og '0x28' kommer fra, må Guderne vide. Men det virkede i et stykke tid... (jeg sniffede m. JMRI).

Og når det nu har virket hele mandagen, er det ... irriterende at det ikke virker om tirsdagen. Hvis du forstår, hvad jeg mener.

Jeg har oprettet 5 sporskifter på CS3 med MM adresse 1-2-3-4-5. Så startede jeg VNC til CS3 for at kunne se, hvad der skete på skærmen. Samtidig havde jeg JMRI message console kørende på min RPi for at følge med i de beskeder, som blev sendt frem og tilbage (CS3 broadcaster hele tiden - turde ikke slå det fra, for så kunne jeg da se, at den var i live).

Jeg har endnu ikke haft et rigtigt sporskifte tilsluttet for at se, om det skifter. Det burde vel være tilstrækkeligt at følge med på CS3 GUI. Jeg har kopieret ham her:

VH Kresten
Søren
Lokomotivfører
Indlæg: 5230
Tilmeldt: 30 jul 2011, 08:36
Digital: Ja
Scale: H0 - 2-rail
Skinnesystem: Flex
Geografisk sted: Malling
Kontakt:

Re: Min CS3Plus i "u-du"...

Indlæg af Søren »

Kresten skrev: 02 jun 2020, 21:10 Den besked, jeg sender via TCP-socket, port 15731, er: '0x0 0x16 0x43 0x28 0x06 0x00 0x00 0x30 0x00 0x00 0x01 0x00 0x00':
- '0x16' siger sporskifte (i mit tilfælde)
- '0x06' er længden på beskeden
- '0x30" siger MM2 protokol
- '0x00" siger MM2 adresse 1
- '0x01" siger (vistnok) "thrown" - eller osse er det "closed"
Prøv følgende:
0: 0x00 Prioritet
1: 0x16 Magnetartikel
2: 0x00 Response - Kommando (0) eller svar (1). Det er en kommando, så: 0.
3: 0x0300 Hash - Pakkenummer. (Du kan også prøve 0x4711). Hashen er noget med stationernes unikke id'er. Jeg er ikke 100 på den. Du kan også prøve at sætte den til 0. Det drejer sig om at forhindre kollisioner osv.
4: 0x06 Skift med default timeout (vælger du 8, kan du påvirke det med rum 11 og 12).
5: 0x00 Adresserum 1 - High
6: 0x00 Adresserum 2
7: 0x30 Adresserum 3 - Protokol (MM2)
8: 0x00 Adresserum 4 - Low
9: 0x00 - Sæt sporskifte til afvigende (Rød) (1 for ret).
10: 0x01 - Strøm (aktivér)
11: 0x00 - Sonderfunktion, Schaltzeit
12: 0x00 - Sonderfunktion, Schaltzeit

Din pakke skal være exact 13 bytes ellers bliver den smidt væk.

Så vidt jeg husker, skal du med MM2 måske sende en slukbefaling til sporskiftedekoderen, så skal du sende:

0: 0x00 Prioritet
1: 0x16 Magnetartikel
2: 0x00 Response - Kommando (0) eller svar (1). Det er en kommando, så: 0.
3: 0x0300 Hash - Pakkenummer. (Du kan også prøve 0x4711).
4: 0x06 Skift med default timeout (vælger du 8, kan du påvirke det med rum 11 og 12).
5: 0x00 Adresserum 1 - High
6: 0x00 Adresserum 2
7: 0x30 Adresserum 3 - Protokol (MM2)
8: 0x00 Adresserum 4 - Low
9: 0x00 - Sæt sporskifte til afvigende (Rød) (1 for ret).
10: 0x00 - Strøm (deaktivér)
11: 0x00 - Sonderfunktion, Schaltzeit
12: 0x00 - Sonderfunktion, Schaltzeit

Med venlig hilsen
Søren

2-skinne med CS3 Plus, tysk forbillede IV, V og VI | https://railway.zone/

Kresten
Stationsforstander
Indlæg: 94
Tilmeldt: 18 mar 2017, 07:06
Digital: Ja
Scale: H0 - 3-rail
Skinnesystem: Märklin C K

Re: Min CS3Plus i "u-du"...

Indlæg af Kresten »

Så fik jeg det til at virke.
En stor del af starten på CAN-besked (de første 29 bit) bruges ikke, når man kører via TCP. Normalt er CAN en mange-til-mange protokol, men i mit tilfælde (TCP-socket), er der jo kun "mig og min CS3". Så vidt jeg kan læse mig til (Märklins egen dokumentation er - mildest talt - mangelfuld!) erstattes de 29 bit "Meldingskennung" af de to første bytes (x00 og x16).

Jeg kan nu skifte et sporskifte med følgende kommando:
\x00\x16\x43\x28\x06\x00\x00\x30\x00\x01\x01\x00\x00, hvor:
1) x00: Første byte - altid x00
2) x16: Artikel (Sporskifte)
3+4) x43+x28: Jeg er i tvivl om, hvad det er. I Märklins CAN dokumentation bruger de x30+x00 i V1 og x47+x11 i V2. Men de gør opmærksom på, at det er "beispiele". Jeg vedhæfter min JMRI-sniffer fil, som optog hvad der skete, når jeg skiftede direkte på min CS3 - og der står hhv. 0x43 og 0x28 - så det brugte jeg. Mit bedste gæt er, at det identificerer afsender eller modtager, altså CS3 eller min RPi. I loggen kommer svaret som Artikel = x17 og identifikation x77 x7d.
5) x06: DLC, Længden af besked - 6 bytes (hvilket gør de to sidste overflødige, men der skal jo sendes 13 bytes - "paddes" med x00 x00)
6) x00: Skal vistnok ikke bruges - sæt til x00 (første byte i besked)
7) x00: Skal vistnok ikke bruges - sæt til x00
8) x30: Motorola adresse (x38 for DCC)
9) x00: Adresse på sporskifte (starter ved index=0, så adresse 1 = x00, adresse 2 = x01, osv.)
10) x01: Skift til ligeud (x00 = afvigende)
11) x01: Skal være x01 for at det virker
12) x00: Overflødig fordi DLC = x06, sæt til x00
13) x00: Overflødig fordi DLC = x06, sæt til x00

- og min CS3 låser ikke mere, når jeg sender kommandoer. Så nu skal jeg til at finde ud af hvordan jeg sender beskeder til mine lokomotiver. Dejligt at nætterne er lyse på denne årstid :-)

VH Kresten
Vedhæftede filer
monitorLog.rtf
(47.48 KiB) Downloadet 117 gange
moppe
Lokomotivfører
Indlæg: 4480
Tilmeldt: 30 jul 2011, 12:22
Digital: Ja
Scale: H0 - 2-rail
Geografisk sted: Hammel
Kontakt:

Re: Min CS3Plus i "u-du"...

Indlæg af moppe »

Hej Kresten

Jeg har været ved at grave lidt i dokumentationen, samt dine logfil.

Jeg syntes faktisk at dokumentationen er ret okay, men der mangler lidt.....
Du skriver du bruger TCP, men Märklin siger at de bruger UDP.


Vi starter med din logfil:

Stille sporskifte - tænd udgang (kommando sendes fra brugerflade/GUI på din CS):
[0x0, 0x16, 0x43, 0x28, 0x6, 0x0, 0x0, 0x30, 0x4, 0x0, 0x1, 0x0, 0x0]
msg (JMRI parser):
Priority 1, Stop/Go/Short Command: AccessorySet Thrown Request Message to MM Accessory Address 40x0, 0x0, 0x30, 0x4, 0x0, 0x1, 0x0, 0x0

Svar, nu er udgang tændt (fra GFP):
[0x0, 0x17, 0x77, 0x7d, 0x6, 0x0, 0x0, 0x30, 0x4, 0x0, 0x1, 0x0, 0x0]
rep (JMRI parser):
Priority 1, Stop/Go/Short Command: AccessorySet Thrown Reply to MM Accessory Address 40x0, 0x0, 0x30, 0x4, 0x0, 0x1, 0x0, 0x0



Stille sporskifte - sluk udgang (kommando sendes fra GUI på din CS):
[0x0, 0x16, 0x43, 0x28, 0x6, 0x0, 0x0, 0x30, 0x4, 0x0, 0x0, 0x0, 0x0]
msg (JMRI parser):
Priority 1, Stop/Go/Short Command: AccessorySet Thrown Request Message to MM Accessory Address 40x0, 0x0, 0x30, 0x4, 0x0, 0x0, 0x0, 0x0

Svar, nu er udgang slukket (fra GFP):
[0x0, 0x17, 0x77, 0x7d, 0x6, 0x0, 0x0, 0x30, 0x4, 0x0, 0x0, 0x0, 0x0]
rep (JMRI parser):
Priority 1, Stop/Go/Short Command: AccessorySet Thrown Reply to MM Accessory Address 40x0, 0x0, 0x30, 0x4, 0x0, 0x0, 0x0, 0x0


Hvis vi nu giver os til at kigge på kommandoerne er der et par ting der træder frem.
Først og fremmest (som der også står i dokumentationen) ændrer CAN sig en lille smule, når de bliver til UDP
Command og Response bliver lagt sammen og hash er delt ud på to bytes

For eksempel er 0x16 at stille sporskifte (kommando) og 0x17 svaret på at nu er sporskiftet stillet.

0x43 0x28 er "hash" fra brugerfladen på din CS3
0x77 0X7d er "hash" fra GFP

Hash er en beregning på den enkelte enheds UID. Den bruges til kollisionsstyring. Hvis en enhed modtager en pakke med samme UID (hash) som den selv har, er der noget galt og en eller anden skal skifte UID.
Hvis du giver dig til at sende med samme hash værdi som du har fundet i en logfil, vil det gå galt.

Søren har stort set pillet det resterende fra hinanden, men jeg repeterer lige:

0x6 = 6 efterfølgende bytes bruges
De to næste 0x0 er de to første bytes i adresserne, de er altid 0 (der er rigeligt med adresser i de to næste bytes)
0x30 er både adresse og protokol i en byte. MM1/2 sporskifte protokol starter med 30
0x4 er laveste byte i adressen, altså adresse 4
Til sammen bygger de to bytes adressen 3004. MM1/2 er adresserne 3000 til 33FF (1024 muligheder)

0x0 er hvilken udgang der stillet (rød eller grøn udgang på dekoderen)
0x1 (og 0x0 i efterfølgende kommandosæt) er et spørgsmål om tænd/sluk af den fysiske udgang, hvilket er nødvendigt for simple MM dekodere.

De sidste to 0x0 er "fyldbrød" for at få 13 bytes i alt.

Hvis jeg sad med din "udfordring", ville jeg sætte en MS2 (eller flere) til min CS3 og kigge på hvad der er i forskel, når mobilstationerne, eller GUI sætter forskellige sporskifte.



Klaus



Klaus
ErikL
Lokomotivfører
Indlæg: 520
Tilmeldt: 12 feb 2015, 19:45
Digital: Ja
Scale: N
Skinnesystem: Minitrix

Re: Min CS3Plus i "u-du"...

Indlæg af ErikL »

Hej

Normalt vil man implementere en kontrolværdi som du skriver Klaus, den bruges også tit til at sikre at en pakke ikke kommer før en anden.

Hvis man har flere veje i nettet kan pakke 1 “overhale” pakke 2, det kan være skidt for modtager hvis det er en sekvens, der afsenders opgave at kontrollere om der er en response efter en command, hvis der ikke er det fremsendes command igen. Da UDP ikke er Sessions orienteret kan pakker tabes.

Så man skal normalt se et længere flow for at sikre at man implementere korrekt, eller se et flow diagram.

Mvh Erik
-----------------------------
Mini TRIX
Z21 + Digikeijs tilbagemeldinger mm. Qdecoder til signaler.
TrainController Gold

Søren
Lokomotivfører
Indlæg: 5230
Tilmeldt: 30 jul 2011, 08:36
Digital: Ja
Scale: H0 - 2-rail
Skinnesystem: Flex
Geografisk sted: Malling
Kontakt:

Re: Min CS3Plus i "u-du"...

Indlæg af Søren »

Jf. dokumentationen, så kan hash værdien double som rækkefølge på pakken, og startende med 0x0300 og efterfølgende 0x0301 osv. Dermed kan du tilkendegive en rækkefølge overfor systemet.

Softwaren bør også sende kritiske kommandoer igen, hvis den ikke modtager en kvittering.

Med venlig hilsen
Søren

2-skinne med CS3 Plus, tysk forbillede IV, V og VI | https://railway.zone/

Kresten
Stationsforstander
Indlæg: 94
Tilmeldt: 18 mar 2017, 07:06
Digital: Ja
Scale: H0 - 3-rail
Skinnesystem: Märklin C K

Re: Min CS3Plus i "u-du"...

Indlæg af Kresten »

Ja, det er også nogenlunde sådan, jeg har "oversat" meddelelserne fra min log.

Jeg så godt i dokumentationen, at Märklin anvender UDP - men i så fald får jeg ikke svaret tilbage fra CS3. Så jeg fortsætter med TCP.

Jeg har desværre ikke nogen MS2, men tænkte på at teste med en anden PC med JMRI - om ikke andet, så for at få bedre styr på denne "hash". Det er klart, at den identificerer afsender og modtager - men jeg forstår ikke, at man/jeg tilsyneladende har brug for at "sniffe" for at finde brugbare værdier. Man burde vel kunne finde eller beregne den/m et eller andet sted ?
Jeg har også set, at Märklin skriver om kollissionsstyring - men eftersom CAN er en CSMA/CD-type protokol, foregår "CD-delen" efter mine begreber på et noget lavere niveau i netværksstakken.

Nå - i bund og grund handler det om, at jeg vil sende en specifik kommando til et specifikt lokomotiv (dekoder) baseret på et Railcom-feedback fra mit DCC4PC-modul. Og det kan jeg nu på CS3Plus - desværre er min ECoS 2 vist ved at være "over-the-hill" og udsender et meget forvrænget DCC (er det PWM?)-signal, som jeg ikke mere kan bruge. Har skrevet til ESU-support og spurgt dem til råds, men der er vist Corona-forsinkelse på svaret... så går det hurtigere her på Baneforum. Tak for det :-)

VH Kresten
Besvar