Avatar billede hyggesen Nybegynder
09. juli 2005 - 13:45 Der er 5 kommentarer og
1 løsning

Seriel kommunikation til ekstern enhed

Hej eksperter.

Jeg står med et meget fastfrosset problem, jeg skal have et C# program i framework 2.0 til at kommunikere med denne enhed http://www.impacinfrared.com/uploads/Datenblaetter_pdf/Pyrometer/in500e.pdf , mere specifik programmering på side 26.

Der et medfølgende program med denne enhed og den kommunikerer fint med enheden, men når jeg prøver med System.IO.Ports.SerialPort og metoden WriteLine(string) får jeg intet svar.

Jeg er for det første i tvivl om jeg overhovedet har koblet enheden korrekt til i mit C# program, for det andet er jeg ikke sikker på i hvilket format kommandoen skal skrives i og for det tredje er jeg ikke helt sikker på om kommandoerne er korrekte.

Jeg er helt ny på seriel kom. siden så bær over med mig :-)
Kode følger:
Avatar billede hyggesen Nybegynder
09. juli 2005 - 13:51 #1
SerialPort sp = new SerialPort("COM1", 19200);

private void button_Write_Click(object sender, EventArgs e)
        {
            if (sp.IsOpen)
            {
                try
                {
                    sp.WriteLine(this.textBox_Input.Text);
                }
                catch (Exception ex)
                {
                    MessageBox.Show("Der er opstået en fejl, og data blev ikke sendt!\r\n" + ex.Message, "Fejl ved data afsendelse!");
                }
            }
        }

        private void sp_DataReceived(object sender, SerialDataReceivedEventArgs e)
        {
            if (sp.IsOpen)
            {
                try
                {
                    this.textBox_Output.Text = sp.ReadLine();
                }
                catch (Exception ex)
                {
                    MessageBox.Show("Der er opstået en fejl, og data blev ikke modtaget!\r\n" + ex.Message, "Fejl ved data modtagelse!");
                }
            }
        }
Avatar billede hyggesen Nybegynder
09. juli 2005 - 14:06 #2
Ok...! Forkert manual/Dataskema..!
Enheden bruger en protocol med navnet Universal Pyrometer Protocol..!

Data overførsel sker ved ASCII format.(Ved ikke hvordan jeg er sikker på at programmet bruger dette format.)

Parametre: 8 data bits, 1 stop bit, even parity.(Er indstillet til dette i programmet)

Eksemplet på en kommando de bruger i manualen: "00em" + <CR>
Dette skulle returnere et 4 cifret decimaltal

CR = Carriage Return men skal der stå CR eller skal dette erstattes ?
Avatar billede nielle Nybegynder
09. juli 2005 - 14:38 #3
Jeg kan ikke hjælpe dig med det andet, men jeg kan da fortælle dig at CR står for "Carriage Return" og er ASCII-tegent 13 (http://www.lookuptables.com/). I C# skreives det som '\r':

"00em\r"
Avatar billede hyggesen Nybegynder
09. juli 2005 - 15:12 #4
Ved du hvad nielle, mere skulle der ikke til...!
CR eller #0D skulle bare erstattes med \r.
Tusinde tak for dit "svar"...!

Kan du ikke sende er svar så du kan få dine points...!
Avatar billede nielle Nybegynder
09. juli 2005 - 16:55 #5
Svar :^)
Avatar billede nielle Nybegynder
09. juli 2005 - 18:03 #6
Lidt forklaring af hvad det er der sker:

Når du sender noget til din eksterne enhed, skal der være et tegn eller en sekvens af tegn som fortæller at du nu er færdig med at sende. Akkurat lige som man siger ”Roger” over en radio for at indikere at det nu er op til den modsatte ende at svare.

Dette er en del af protokollen og i denne protokol er dette tegn altså CR. CR står som sagt for ”Carriage Return” og dette er faktisk de engelske navne for Enter-tasten. Når du sender:

"00em" + <CR>

- igennem porten så kan det altsås populært sagt fortolkes som:

”Skriv 00em og tryk på Enter-tasten”

- hvilket vel må siges at give en vis mening. :^)

(Dette er god nok lidt af en simplificering, for som regel vil Enter-tasten resultere i to tegn, CR og LF, men lad nu det ligge).

Som sagt er CR lig med ASCII tegn nr. 13. Hvis man skriver 13 i heksadecimal bliver det D, eller som det nogen gange også er skrevet 0D.

Da man tit har brug for CR, og dens følgesvend LF, så har man i diverse programmeringsprog en shorthand notation for disse: \r og \n. Disse går igen i C#, og det ovenstående skrives derfo sådan her:

"00em\r"

Jeg håber at det kastede lidt lys over de forskellige begreber og satte dem ind i den større sammenhæng? :^)
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