Autor Beitrag
Alux
Hält's aus hier
Beiträge: 13



BeitragVerfasst: Fr 09.07.10 02:09 
Auslesen von ComPort:

Ich versuchte erst von Hyperterminal zu Hyperterminal via 2 RS232 Konvertern zu kommunizieren. Dies gelang mir mit dem Basissystem Win 7 auf anhieb.
Mit VirtualBox 3.2.6 dauerte es etwas länger, bis ich darauf kam, dass ev die alten Konvertertypen von Win7 nicht mehr unterstützt werden. Zum Schluss kriegte ich auch das hin.

Als nächster Schritt wollte ich mit Hyperterminal ( 9600 8 N 1 ) Zeichen senden, über den RS232 Konverter ( Com3 ) die Zeichen in einem Fenster darstellen.

Fenster = RichTextBox1
( In diesem Forum fand ich die Möglichkeit mit MessageBox, welche auch funktioniert. Ich möchte die Ausgabe aber in RichTextBox machen und dies fortlaufend...)


Hier mein gescheiterter Versuch.



ausblenden Delphi-Prism-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
method MainForm.serialPort1_DataReceived(sender: System.Object; e: System.IO.Ports.SerialDataReceivedEventArgs);

var
    S: array of Byte;

begin
  array.Resize(var S,SerialPort1.ReadBufferSize);
  SerialPort1.Read(S,0,SerialPort1.BytesToRead);
  RichTextBox1.Text:= RichTextBox1.Text + S.ToString;
  //MessageBox.Show(serialPort1.ReadLine());
 
end;




Kann mir jemand sagen was ich falsch mache?
Wäre froh um jede Hilfe.
Danke im Voraus

Alux

Moderiert von user profile iconChristian S.: Delphi Prism-Tags hinzugefügt
Moderiert von user profile iconChristian S.: Topic aus Delphi Prism - Die Sprache verschoben am Fr 09.07.2010 um 09:01



Nachtrag:

Natürlich habe ich auch den Port geöffnet. Dies mache ich mit einem Button namens EIN.

Hier noch der Code:

ausblenden Delphi-Prism-Quelltext
1:
2:
3:
4:
5:
method MainForm.Button1_Click(sender: System.Object; e: System.EventArgs);
begin
  serialPort1.Open;
  Ein.BackColor:= BackColor.Red;
end;


Hoffe das sich noch der eine oder andere hier hin verirrt und vielleicht mir bei meiner Problemstellung weiterhelfen kann.
Ich wäre auf jeden Fall nicht böse darüber.

Alux 09.07.2010 22:00
Alux Threadstarter
Hält's aus hier
Beiträge: 13



BeitragVerfasst: Sa 10.07.10 18:56 
Hallo zusammen
Kann mir wirklich niemand weiter helfen?
Ich weiss RS232 ist nicht mehr innnn. Ich wäre trotzdem für jede Unterstützung froh. Die Einleitung im DelphiPrism umfasst leider keine RS-Schnittstellen.

Im Voraus besten Dank.
Alux

Moderiert von user profile iconKha: Komplettzitat entfernt
Christian S.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 20451
Erhaltene Danke: 2264

Win 10
C# (VS 2019)
BeitragVerfasst: Sa 10.07.10 19:04 
Hm, Du solltest vielleicht erstmal sagen, in wiefern der Versuch denn scheitert :-) Kommt eine Fehlermeldung (wenn ja, welche), tut sich einfach nix?

//edit: In einem Projekt von mir sieht es so aus:
ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
        internal void _Port_DataReceived(object sender, System.IO.Ports.SerialDataReceivedEventArgs e)
        {
            string data = null;
            try
            {
                data = _Port.ReadLine();
            }
            catch
            {
                data = _Port.ReadExisting();
            }
            if (!String.IsNullOrEmpty(data))
                HandleData(data);
        }

_________________
Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
Alux Threadstarter
Hält's aus hier
Beiträge: 13



BeitragVerfasst: Sa 10.07.10 19:54 
Besten Dank für Deine Antwort.
Nun der Fehler sieht so aus:
Kompilieren kann ich mein Programm. Sobald ich jedoch ein Buchstaben oder eine Zahl im Hyperterminal eingebe und es in meinem Fenster angezeigt werden sollte, hustet PRISM und verweisst auf die lezte Befehlszeile in meinem oben aufgeführten Programmteil:

RichTextBox1.Text:= RichTextBox1.Text + S.ToArray();

und sagt

Ungültiger threadübergreifender Vorgang: Der Zugriff auf das Steuerelement richTextBox1 erfolgte von einem anderen Thread als dem Thread, für den es erstellt wurde.

Siehe auch im Anhang
Gruss Alux

Moderiert von user profile iconChristian S.: Vollständiges Zitat des vorhergehenden Beitrags entfernt
Einloggen, um Attachments anzusehen!
Christian S.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 20451
Erhaltene Danke: 2264

Win 10
C# (VS 2019)
BeitragVerfasst: Sa 10.07.10 20:05 
Ah, mit der Fehlermeldung kann man doch was anfangen :-)

Wenn Du aus einem anderen Thread auf den Thread der GUI zugreifen willst, musst Du das über die Invoke-Methode kapseln, sodass sicher gestellt ist, dass der Code im GUI-Thread ausgeführt wird:
ausblenden Delphi-Prism-Quelltext
1:
2:
3:
  Invoke(method begin
    RichTextBox1.Text:= RichTextBox1.Text + S.ToArray(); 
end);


//edit: Wieso eigentlich ToArray? :gruebel:

_________________
Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
Alux Threadstarter
Hält's aus hier
Beiträge: 13



BeitragVerfasst: Sa 10.07.10 21:12 
user profile iconChristian S. hat folgendes geschrieben Zum zitierten Posting springen:
Ah, mit der Fehlermeldung kann man doch was anfangen :-)

Wenn Du aus einem anderen Thread auf den Thread der GUI zugreifen willst, musst Du das über die Invoke-Methode kapseln, sodass sicher gestellt ist, dass der Code im GUI-Thread ausgeführt wird:
ausblenden Delphi-Prism-Quelltext
1:
2:
3:
  Invoke(method begin
    RichTextBox1.Text:= RichTextBox1.Text + S.ToArray(); 
end);


//edit: Wieso eigentlich ToArray? :gruebel:
Du bist gut!!! Danke. Nun stürzt das Ding nicht mehr ab.
Das mit dem ToArray ist mein Fehler. Ich hatte gestern Abend noch so allerlei probiert und habe es nicht mehr auf ToString zurück korrigiert.
Auf jeden Fall kann ich nun senden. Das eine Problem besteht aber noch. Anstatt ein a oder e oder sonst ein Zeichen bringt er mir im TextBox - Feld jeweils nur ein -> System.Byte[] (siehe auch im Anhang)

Alux
Einloggen, um Attachments anzusehen!
Christian S.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 20451
Erhaltene Danke: 2264

Win 10
C# (VS 2019)
BeitragVerfasst: Sa 10.07.10 21:26 
Vorweg: Bitte hänge Bilder auch als Bilddateien an, das ist einfacher anzugucken als ein PDF :-)

Was die Ausgabe angeht, musst Du bei der Konvertierung eines Byte-Arrays in einen String wohl selber Hand anlegen (Da könnte die BitCoverter-Klasse hilfreich sein). Oder Du schaust Dir mal die anderen Methoden des SerialPorts an, einige liefern direkt einen String zurück.

_________________
Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
Alux Threadstarter
Hält's aus hier
Beiträge: 13



BeitragVerfasst: Mi 14.07.10 00:20 
user profile iconChristian S. hat folgendes geschrieben Zum zitierten Posting springen:
Vorweg: Bitte hänge Bilder auch als Bilddateien an, das ist einfacher anzugucken als ein PDF :-)

Was die Ausgabe angeht, musst Du bei der Konvertierung eines Byte-Arrays in einen String wohl selber Hand anlegen (Da könnte die BitCoverter-Klasse hilfreich sein). Oder Du schaust Dir mal die anderen Methoden des SerialPorts an, einige liefern direkt einen String zurück.


So, hier eine variante wie man Daten vom SerialPort auslesen kann...
Es wäre wirklich schön wenn es eine richtige Bediehnungsanleitung/Buch.. von PRISM geben würde!!!


ausblenden Delphi-Prism-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
method MainForm.serialPort1_DataReceived(sender: System.Object; e: System.IO.Ports.SerialDataReceivedEventArgs);

var
    S: array[0..4095of Byte;

begin
  
  if SerialPort1.BytesToRead > 0 then
    begin
      var Count: Integer := SerialPort1.BytesToRead;
      SerialPort1.Read(S, 0, Count);
      Invoke(method begin
        TextBox1.Text := TextBox1.Text + System.Text.Encoding.UTF7.GetString(S, 0, Count);
        end);
    end;
end;



( Die Schnittstelle muss aber erst noch mit dem Befehl serialPort1.open(); geöffnet werden )
( Für UTF7 kann auch zB UTF8 oder ASCII verwendet werden )
Danke für die Hilfe.

Alux

Moderiert von user profile iconChristian S.: Prism-Tags hinzugefügt
Christian S.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 20451
Erhaltene Danke: 2264

Win 10
C# (VS 2019)
BeitragVerfasst: Mi 14.07.10 08:15 
user profile iconAlux hat folgendes geschrieben Zum zitierten Posting springen:
Es wäre wirklich schön wenn es eine richtige Bediehnungsanleitung/Buch.. von PRISM geben würde!!!
Für die Syntax kannst Du im PrismWiki von CodeGear nachgucken, und die Anleitung fürs Framework ist natürlich 100% dieselbe wie für C#: MSDN Library.

_________________
Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".