Ausgelesene Daten der RS232 Schnittstelle, Variablen zuweisen

Im Unterforum Microcontroller - Beschreibung: Hardware - Software - Ideen - Projekte

Elektronik Forum Nicht eingeloggt       Einloggen       Registrieren




[Registrieren]      --     [FAQ]      --     [ Einen Link auf Ihrer Homepage zum Forum]      --     [ Themen kostenlos per RSS in ihre Homepage einbauen]      --     [Einloggen]

Suchen


Serverzeit: 22 12 2025  10:27:59      TV   VCR Aufnahme   TFT   CRT-Monitor   Netzteile   LED-FAQ   Oszilloskop-Schirmbilder            


Elektronik- und Elektroforum Forum Index   >>   Microcontroller        Microcontroller : Hardware - Software - Ideen - Projekte


Autor
Ausgelesene Daten der RS232 Schnittstelle, Variablen zuweisen

    







BID = 463344

Endhülse

Neu hier



Beiträge: 38
Wohnort: Nms
 

  


An die Programmierer unter Euch...

Ich habe meine C-Control über die Rs232 Schnittstelle mit meinen Pc verbunden.
Nun lese ich Daten (Schaltzustände) von der CControl aus, entweder über ein Terminal Programm oder über ein Programm das ich in VB6 angefangen habe zu programmieren... das Problem ist nun, das alle Daten die ich über z.B. Text1.text = mscomm1.input einlese als Paket(||0 -1 0 0 -1||) angezeigt wird .

Ich möchte aber: das jeder einzelne Zustand in einem separaten Textfeld angezeigt wird. UND diese Zuordnung ist mein Problem... wie verteile ich
den Inhalt von mscomm1.input auf mehrere Textfelder?

Links? Ratschläge? Wegweiser? Lösungen?

BID = 463404

DonComi

Inventar



Beiträge: 8604
Wohnort: Amerika

 

  

Hallo, ist zwar schon ewig her, seitdem ich in VB "programmiert" habe, aber erläutere mir bitte nochmals genau, was du machen möchtest bzw. was du exakt mit den Werten machen willst.

Willst du die verschiedenen Bytes im String auseinanderfriemeln? Das geht recht einfach mit left, right, mid oder der Umwandlung in ein Array.

Das Problem dürfte die Synchronisation sein, wo beginnen die Daten, wo enden sie? Wenn ggf. ein bestimmtes Byte dazu reserviert ist, Start- und Stop der Daten zu markieren könnte man dieses Byte nutzen, um den String auseinanderzunehmen.

Oder verstehe ich das richtig, dass nur -1 und 0 vorkommen?

Zudem kannst du auch einstellen, dass der Input-property exakt 1 Zeichen ließt. Dazu stellst du ein, dass der Puffer z.b. ein paar kB groß ist und dass ein Daten-Im-Puffer-Event ausgelöst werden soll, wenn min. 1 Zeichen im Eingangspuffer liegt: der Interrupt wird solange erneut aufgerufen, bis jedes einzelne Byte gelesen wurde und der Puffer leer ist.

_________________

BID = 463577

Endhülse

Neu hier



Beiträge: 38
Wohnort: Nms

Hallo.
Also: An der CControl liegen Schaltzustände an (Led an , Schalter ein usw) diese Zustände übertrage ich auf meinen Pc (Win XP).
Entweder ich übertrage sie als "Paket" dann kommt etwa so etwas an: ||0-1-100|| <- 5 Schaltzustände
oder ich sende die Schaltzustände einzeln (es kommt ||-1|| an).

Das eigentliche Problem liegt darin, das ich den gesendeten Werten eine Variable zuordnen möchte. Das mit Left, Right, usw hatte ich auch schon versucht. Aber der Wert ändert sich von 0 auf -1.

Ich kann auch Strings von der CControl schicken. Also wenn zB Led 1 an ist, könnte ich ein "Led1An" schicken. Das müßte ich dann im VB6 auswerten und in die entsprechende Variable schieben... das erscheint mir sehr aufwändig.

Was ich möchte: Ich möchte ein Datenpaket empfangen.
Von dem wird der erste Wert (0 oder -1) gelesen
und in das erste Textfeld geschrieben. Der zweite
Wert in das zweite Textfeld usw.


Ich hoffe ich konnte meine Gedanken kund tun.

BID = 463589

PhyMaLehrer

Schriftsteller



Beiträge: 911
Wohnort: Leipzig

Das Folgende ist sicher alles andere als elegant programmiert, aber wenn's funktioniert...:

Du hast also z. B. den String ||0-1-100||
Jetzt durchsuchst du diesen String mit mid von Zeichen 1 bis length(string). Wichtig sind nur die Zeichen 0 und -, und nur für diese zählst du einen "Index" mit.
Als erstes Zeichen erhältst du ein "|". Das ist uninteressant, gehe zum nächsten. Wieder ein uninteressantes "|", also zum nächsten. Jetzt kommt eine "0", die kommt in die Variable "Zeichen(1)". Nächstes Zeichen, Index ist jetzt 2. Das nächste Zeichen ist ein "-". "Zeichen(2)" ist also -1. Nächstes Zeichen, Index ist 3. Die jetzt folgende "1" ist insofern uninteressant, als sie schon durch das "-" erkannt wurde, also zum nächsten Zeichen usw.
Wenn sicher ist, daß der String stets mit "||" beginnt und endet, kannst du das Durchsuchen auch bei 3 beginnen und bei length(string) - 2 enden lassen.

Hhmmm, war das jetzt einigermaßen verständlich

BID = 463591

DonComi

Inventar



Beiträge: 8604
Wohnort: Amerika

Moin, mach es folgendermaßen:

Du sendest ein Byte, indem alle Informationen drinstecken, jenachdem, ob ein Bit 1 ist, ist der entsprechende Pin 1 oder 0. Wie du die Infos ins Byte bekommst ist dir überlassen.

wenn Schalter1 an ist, dann setze Bit0 im Pufferbyte:
if(schalter=1) then puffer = puffer or 1

das machst du mit allen wichtigen Werten und dann wird das an den Rechner geschickt:

sendebinär puffer


Wenn du die Infos erneut schicken willst, vorher den Puffer wieder auf 0 stellen, einmal gesetzt 1 werden sonst niewieder 0.


Im Rechner machst du das dann, indem du jedes einzelne Bit auswertest:

dim led1
dim led2
dim schalter1
dim puffer as string *1

puffer = com_lesen()

'jetzt maskieren:

if puffer and 1 then led1 = "an" else "aus"
if puffer and 2 then led2 = "an" else "aus"
if puffer and 4 then schalter1 = "an" else "aus"

etc.

Edit: PhyMaLehrer
-1 wird auch benutzt, um zu sagen, dass ein Wert wahr (ungleich 0) ist. Das ist in Basic oft üblich. Ich interpretiere das also als -1 (in worten: minus 1) und nicht als das Zeichen "-" und "1".
Zudem weiß ich nicht, ob die Zeichen || überhaupt zum String gehören. Und wozu mehr Platzt benötigen, als notwendig?

Also, nicht das du mich falsch verstehst, deine Lösung funktioniert ebenso und ich will das niemandem ausreden

Edit: hm. vielleicht noch if puffer and 1 klammern, damit der kompiler nicht if (puffer = wahr) und (1 = wahr) daruas macht
if (puffer And 1) then ist sicherer.

[ Diese Nachricht wurde ge&auml;ndert von: DonComi am 12 Okt 2007 19:06 ]

[ Diese Nachricht wurde geändert von: DonComi am 12 Okt 2007 19:09 ]

BID = 463830

Endhülse

Neu hier



Beiträge: 38
Wohnort: Nms

Hi

Das klingt so simpel. Werde das dann mal (versuchen) umzusetzen.
Kann eine Weile dauern... wenig Zeit.
Ich werde mich melden wenn ich Erfolg hatte (und wenn ich kein Erfolg hatte)...
Danke für eure schnelle Hilfe

für weitere Tips bin ich empfänglich...

BID = 463842

DonComi

Inventar



Beiträge: 8604
Wohnort: Amerika

Was für weitere Tips?

Wenn es nicht sonderlich schnell gehen musst, dann kannst du natürlich auch Klartext senden ("LED 1 an") ("LED 2 aus") oä. und diesen Klartext am Rechner als solchen auswerten:

puffer = com.input

...
und per Select Case auswerten. Aber das macht aus verschiedenen Gründen keinen Sinn.

_________________

BID = 464119

Endhülse

Neu hier



Beiträge: 38
Wohnort: Nms

Hi da...

Habe es geschafft...
Hatte ein paar Probleme mit den der Synchronität.
Der Pc neigte dazu Messwerte zu überlesen... mit geschickt gesetzten Pausen lief es denn.

Ich habe mich für die Klartextversion entschieden. Mal sehen wie weit ich damit komme!?
Aber für die Übersichtlichkeit ist das nicht Schlecht (<- Klartext).

Danke für eure schnelle Hilfe!


Zurück zur Seite 0 im Unterforum          Vorheriges Thema Nächstes Thema 


Zum Ersatzteileshop


Bezeichnungen von Produkten, Abbildungen und Logos , die in diesem Forum oder im Shop verwendet werden, sind Eigentum des entsprechenden Herstellers oder Besitzers. Diese dienen lediglich zur Identifikation!
Impressum       Datenschutz       Copyright © Baldur Brock Fernsehtechnik und Versand Ersatzteile in Heilbronn Deutschland       

gerechnet auf die letzten 30 Tage haben wir 18 Beiträge im Durchschnitt pro Tag       heute wurden bisher 5 Beiträge verfasst
© x sparkkelsputz        Besucher : 187877664   Heute : 9989    Gestern : 15438    Online : 302        22.12.2025    10:27
17 Besucher in den letzten 60 Sekunden        alle 3.53 Sekunden ein neuer Besucher ---- logout ----viewtopic ---- logout ----
xcvb ycvb
0.0416111946106