Avatar billede elmoe Juniormester
21. august 2009 - 12:34 Der er 9 kommentarer og
1 løsning

Forskel på HyperTerminal og C#

Jeg skal styre noget elektronik via den serielle port. Hvis jeg sender en kommando via HyperTerminalen i Windows, kan jeg styre min elektronik, men så snart jeg sender den samme serielle kommando fra C#, så sker der ikke noget som helst med min elektronik. Min C# kode ser således ud:

SerialPort s = new SerialPort("COM1", 9600, Parity.None, 8, StopBits.One);
s.Open();
s.Write("$05EA");
s.Close();
s.Dispose();

Kan ikke se på hvilken måde HyperTerminalen skulle kunne være anderledes end min C# kode? Hvad kan der være galt siden jeg ikke kan styre elektronikken fra C#?
Avatar billede windcape Praktikant
21. august 2009 - 15:19 #1
$05EA ligner noget hex, er det meningen det skal sendes som ASCII tekst?
Avatar billede elmoe Juniormester
21. august 2009 - 16:09 #2
Det er ikke HEX. Det er kommandoen til elektronikmodulet. Den skal sendes som en streng.

Kan det være fordi jeg bruger RS485 til at transportere min data? Skal jeg så skrive den serielle kode på en anden måde, eller kan det ikke være det?
Avatar billede bitmatic Nybegynder
21. august 2009 - 16:15 #3
Mit gæt er at det er fordi du ikke sender en CR+LF til sidst i din C# version.
Det gør du når du bruger hyperterminal og trykker enter.

Prøv: s.Write("$05EA\r\n");
Avatar billede elmoe Juniormester
21. august 2009 - 16:33 #4
Det har jeg allerede prøvet og det virker heller ikke. Det er underligt at det virker upåklageligt i HyperTerminalen og ikke fra mit program. Jeg har også prøvet et andet terminalprogram som jeg plejer at bruge, men det virker heller ikke. Det er åbenbart kun HyperTerminalen der virker. Det er godt nok underligt! Jeg kan simpelthen ikke forstå hvad det kan være?
Avatar billede bitmatic Nybegynder
21. august 2009 - 16:56 #5
ok....

Mit næste forslag må så være, at lade være med at lukke porten med det samme efter du har skrevet. Det er ikke sikkert dataene er blevet skrevet ud på porten endnu, når du lukker den.

Prøv en simpel Thread.Sleep(1000) for at teste det.

Du kunne også eksperimentere med noget i stil med:

while (s.BytesToWrite != 0)
  Thread.Sleep(10);
Avatar billede elmoe Juniormester
21. august 2009 - 17:41 #6
Det virker desværre heller ikke :-(
Jeg tror ikke det er fordi den når at lukke porten. Det må være noget andet der er i vejen. Har snart prøvet alt uden held..
Avatar billede elmoe Juniormester
21. august 2009 - 17:44 #7
Hvad er forskellen på måden som HyperTerminalen sender på og så på den måde man sender på fra et C# program?

Hvis bare man kan finde ud af det, så kan det måske fortælle hvad der mangler i C# programmet, for det virker på samme måde som HyperTerminalen?
Avatar billede bitmatic Nybegynder
21. august 2009 - 22:00 #8
Jeg er ved at rende tør for forslag.... Mine sidste desperate forslag:
1. Prøv med s.Write(@"$05EA");
2. Prøv at lytte til et evt. svar fra hardware'en. Måske sender den en fejlmeddelelse tilbage.
3. Prøv at måle på ledningen, om der overhovedet bliver sendt noget.
Avatar billede elmoe Juniormester
23. august 2009 - 12:39 #9
Jeg har fundet løsningen på problemet. Der var ikke noget i vejen med den serielle forbindelse. Det var bare microcontrolleren som skulle konfigureres anderledes til at modtage data.

Mange tak for det ihærdige forsøg alligevel.
Avatar billede elmoe Juniormester
23. august 2009 - 12:40 #10
Trækker spørgsmålet tilbage.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester