06. september 2007 - 13:33Der er
9 kommentarer og 1 løsning
Hente data fra tryktransducer
Hej kære eksperter
Jeg forsøger at hente data fra en tryktransducer, med følgende specifikationer: Baud Rate .... 9600 Start Bits .... 1 Data Bits .... 8 Stop Bits .... 1 Parity .... None Og for at få måleresultat: *00P1 <cr> Response: ?01CP=15.458 (for RS-232)
Er der en der har en stump kode ?
Jeg har prøvet følgende fra msdn2 men er i tvivl, hvorvidt jeg taster rigtigt ved
To løse forslag her 1 time efter jeg egentlig burde ligge og sove.
Når du læser "message" med Cosole.ReadLine. Er du så sikker på at <cr> ikke bliver smidt væk ? Og er du sikker på at serialPort.WriteLine sætter et <cr> i enden af det skrevne ? Prøv evt. at bruge Read og Write i stedet, og så selv styre hvor <cr> skal puttes/hentes
Er du sikker på at strengen bliver ASCII-encodet når du formaterer og skriver til porten med _serialPort.WriteLine(String.Format("<{0}>: {1}", name, message)); Prøv at oprette en temporær string-variabel der indeholder resultatet af String.Format("<{0}>: {1}", name, message) og se om det ser fornuftigt ud i et råt memory view.
1000 tak for jeres svar. Jeg har været på weekend og har først set dem nu.
Jeg har prøvet i nedenstående kode prøvet at indsætte event'en.
For at mere sikker på at sende det rigtige har jeg skrevet stengen ind i en tekstboks. Jeg skriver altså i tekstboksen *00P1 og får ?00P??0 retur
Hvorvidt jeg for <cr> sendes automatisk med ved writeLine ved jeg ikke, men jeg har også prøvet at tilføje dem efter stengen som det ses : serialPort1.WriteLine(textBox2.Text+(char)13); Hverken serialPort1.WriteLine(textBox2.Text+(char)13); eller serialPort1.WriteLine(textBox2.text); giver det rigtige svar.
Svaret skulle være ala : ?01CP=15.458, hvis trykket er 15.458. Så jeg må vel sende det forkerte?? DET SKAL NÆVNES AT JEG SAGTES KAN MODTAGE DATA FRA VBA (EXCEL).
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; using System.IO.Ports; // Denne linie skal tilføjes !!!!!!
namespace SerialTest { public partial class Form1 : Form { public Form1() { InitializeComponent();
// Dette er den hurtige løsning for at lave en hurtig test MEN // den kan gøre programmet ustabilt!!!!! CheckForIllegalCrossThreadCalls = false; }
private void Form1_Load(object sender, EventArgs e) { /* Initialiser com port */ if (serialPort1.IsOpen) { serialPort1.Close(); }
Bingo du har ret! Pariteten skulle være none og det gave pote !!! Nu for jeg følgende svar : ?01CP!-0.1548. Svaret skulle være ?01CP=0.1548. Lighedstegn er åbentbart blivet til !-.
Men ellers virker det! Tænk jeg synes også jeg havde prøvet none.
Startbit kan jeg dog ikke finde nogen property for. Hvor sættes den ? Og ved du hvad serialPort1.RtsEnable sættes for ?
Send et svar og du får point! Jeg lovede 200 ialt så jeg sender lige et spørgsmål til.
Michael
Den færdige kode er her:
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; using System.IO.Ports; // Denne linie skal tilføjes !!!!!!
namespace SerialTest { public partial class Form1 : Form { public Form1() { InitializeComponent();
// Dette er den hurtige løsning for at lave en hurtig test MEN // den kan gøre programmet ustabilt!!!!! CheckForIllegalCrossThreadCalls = false; }
private void Form1_Load(object sender, EventArgs e) { /* Initialiser com port */ if (serialPort1.IsOpen) { serialPort1.Close(); }
private void BtmSend_Click(object sender, EventArgs e) { //serialPort1.Write("*00P1 \r"); dette virker serialPort1.WriteLine("*00P1 \r"); // men det gør dette også, her kommer bare et linieskift efter svaret.
koppelgaard> Husk at lave en reference imellem hvert af de to spørgsmål. Forresten er det ikke nødvendigt at oprette et nyt spørgsmål med point hvis det gamle ikke er afsluttet; du kan tildele flere point under menupunktet Funktioner oppe i toppen ude i venstre side. :^)
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.