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
I dette særtema ser vi på, hvordan cloud og AI bliver fundamentet for virksomhedernes digitale forretning, og hvordan de nye muligheder for automatisering og forretningsværdi kan udnyttes uden at miste overblik, sikkerhed og menneskelig kontrol.
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.