Strings von Multimeter VC 920 über µC in ProfiLab einlesen

Antworten
blackmamba
Beiträge: 7
Registriert: Montag 14. Dezember 2009, 09:50

Strings von Multimeter VC 920 über µC in ProfiLab einlesen

Beitrag von blackmamba » Freitag 28. Mai 2010, 07:02

Hallo zusammen,

ich bin sozusagen ProfiLab Neuling was RS232 angeht und habe auch gleich ein Problem.

Ich habe mir einen sogenannten Datenmultiplexer gebaut, der mir von sieben Voltkraft VC 920 die Messwerte einliest und über eine achte serielle Schnittstelle an den PC sendet. Das funktioniert soweit alles.
Jetzt würde ich das Ganze noch gerne mit ProfiLab erweitern...

Das ganze sieht folgendermaßen aus:

Controller liest String vom Messgerät in ein Array ein. Wenn dieser komplett empfangen wurde schreibt der µC ein Präfix davor z.B (0xF9) um die Messwerte später wieder den Eingangs-Schnittstellen zuordnen zu können und überträgt das Ganze in ein zweidimensionales Sende-Array.

Das Array besteht aus 7 Zeilen (eine pro serieller Schnittstelle) und 11 Spalten (1 Byte Präfix + 10 Bytes String)

Das Array wird wenn es voll ist an den PC übertragen...
...und hier fängt ProfiLab an :D

Jetzt würde ich gerne in PL das Array, was ja quasi als ein langer String empfangen wird, wieder in die sieben Einzelstrings zerlegen und zwei Y/t-Schreibern bzw. einem Messwertrecorder zuordnen.

Ich habe am Anfang jedes Teilstrings mein Präfix, das später auch abgeschnitten werden muss.
Für die sieben Eingangsschnittstellen "Seriell0" bis "Seriell6", habe ich die Präfixe "0xF9" bis "0XFF" und die letzten zwei Bytes, jedes Strings sind immer "0x0D" (Carriage Return) und "0x0A" (Line Feed).

Eine "Hex to Dec" Umwandlung habe ich schon fertig.
Mir geht es jetzt "nur" darum den empfangenen String in die sieben Einzelstrings aufzutrennen, die zur Wertermittlung unnötigen Bytes abzuschneiden und das ganze dann per Y/t-Schreiber und Messwertrecorder auszuwerten.

So, ich hoffe, ich habe Euch nicht mit dem langen Text erschlagen...

Ich bin für jeden Tip dankbar!!
Gruß Chris

abacom
Site Admin
Beiträge: 3917
Registriert: Dienstag 23. September 2008, 10:54
Kontaktdaten:

Re: Strings von Multimeter VC 920 über µC in ProfiLab einlesen

Beitrag von abacom » Freitag 28. Mai 2010, 07:50

Kurzum:

Code: Alles auswählen

[F9h] + [10 Bytes]+[0Dh]+[0Ah]
[FAh] + [10 Bytes]+[0Dh]+[0Ah]
[FBh] + [10 Bytes]+[0Dh]+[0Ah]
[FCh] + [10 Bytes]+[0Dh]+[0Ah]
[FDh] + [10 Bytes]+[0Dh]+[0Ah]
[FEh] + [10 Bytes]+[0Dh]+[0Ah]
[FFh] + [10 Bytes]+[0Dh]+[0Ah]
Korrekt? Bitte Beispiel ...\hardware\RS232\"GPS-Demo" anschauen!

Anderes Protokoll wäre einfacher, wie z.B:

Code: Alles auswählen

Print Wert1+";"+Wert2+";"+Wert3+";"+Wert4+";"+Wert5+";"+Wert6+";"+Wert7
Als EIN String mit PL einlesen und mit $Part in Kanäle zerlegen.
ABACOM support

blackmamba
Beiträge: 7
Registriert: Montag 14. Dezember 2009, 09:50

Re: Strings von Multimeter VC 920 über µC in ProfiLab einlesen

Beitrag von blackmamba » Freitag 28. Mai 2010, 09:07

Danke für die schnelle Antwort.
Ich werde mir das Beispiel gleich anschauen.

Das "0Dh" und "0Ah" ist schon in den 10 Bytes inbegriffen.
Das heist ich nehme den $Part-Baustein und als Trennzeichen dann das letzte Byte des eigentlichen Strings, in meinem Fall "0Ah"?



Gruß Chris

abacom
Site Admin
Beiträge: 3917
Registriert: Dienstag 23. September 2008, 10:54
Kontaktdaten:

Re: Strings von Multimeter VC 920 über µC in ProfiLab einlesen

Beitrag von abacom » Montag 31. Mai 2010, 08:11

Nein. COM -> String empfangen (Sync = $0D $0A) und dann -> $Part (Trennzeichen ";")
Ein solches Protokoll ist vergleichbar mit CSV-Textformat.
ABACOM support

blackmamba
Beiträge: 7
Registriert: Montag 14. Dezember 2009, 09:50

Re: Strings von Multimeter VC 920 über µC in ProfiLab einlesen

Beitrag von blackmamba » Freitag 25. Juni 2010, 06:37

Hi,

ich habe mir das GPS-Demo mal genauer angesehen und mein Programm entsprechend abgeändert, zumindest was die Kanalzuweisung angeht, jedoch trennt der $Part-Baustein nicht. Alle Werte kommen nur am Ausgang 1 raus.

Ich sende die Strings in folgender Reihenfolge:

char text1[] = {0xB0, 0xB0, 0x31, 0x38, 0x38, 0xB0, 0xB6, 0xB0, 0xB0, 0x0D, 0x0A};
char text2[] = {0xB0, 0xB0, 0x31, 0x32, 0x34, 0xB0, 0xB6, 0xB0, 0xB0, 0x0D, 0x0A};
char text3[] = {0xB0, 0xB0, 0x32, 0x35, 0x37, 0xB0, 0xB6, 0xB0, 0xB0, 0x0D, 0x0A};
char text4[] = {0xB0, 0xB0, 0x31, 0x32, 0x31, 0xB0, 0xB6, 0xB0, 0xB0, 0x0D, 0x0A};
char text5[] = {0xB0, 0xB0, 0x31, 0x36, 0x39, 0xB0, 0xB6, 0xB0, 0xB0, 0x0D, 0x0A};
char text6[] = {0xB0, 0xB0, 0x31, 0x33, 0x32, 0xB0, 0xB6, 0xB0, 0xB0, 0x0D, 0x0A};
char text7[] = {0xB0, 0xB0, 0x33, 0x38, 0x36, 0xB0, 0xB6, 0xB0, 0xB0, 0x0D, 0x0A};

Synchronisiert wird auf "$0D $0A" und als Trennzeichen im $Part habe ich "," und ";" versuche, beides jedoch ohne erfolg.

Im Anhang finde Ihr das bisherige ProfiLab-Programm.
Wäre super wenn sich das mal der ein oder andere anschauen könnte.

Das der Rest des Programms noch nicht perfekt ist weis ich, es wäre mir schon viel Wert wenn die Kanalaufteilung funktionieren würde.


Vielen Dank schonmal!
Gruß Chris
Dateianhänge
Datenmultiplexer_RS232.prj
(21.41 KiB) 376-mal heruntergeladen

abacom
Site Admin
Beiträge: 3917
Registriert: Dienstag 23. September 2008, 10:54
Kontaktdaten:

Re: Strings von Multimeter VC 920 über µC in ProfiLab einlesen

Beitrag von abacom » Freitag 25. Juni 2010, 07:39

...jedoch trennt der $Part-Baustein nicht...
Dafür muss das Trennzeichen natürlich auf in den Daten vorkommen!

Code: Alles auswählen

Print Wert1+";"+Wert2+";"+Wert3+";"+Wert4+";"+Wert5+";"+Wert6+";"+Wert7
ABACOM support

blackmamba
Beiträge: 7
Registriert: Montag 14. Dezember 2009, 09:50

Re: Strings von Multimeter VC 920 über µC in ProfiLab einlesen

Beitrag von blackmamba » Freitag 25. Juni 2010, 11:23

Das heisst, ich müsste quasi am Ende jedes Strings den ich vom µC aus sende noch ein ";" mitschicken?

tmm
Beiträge: 392
Registriert: Montag 23. Februar 2009, 06:38

Re: Strings von Multimeter VC 920 über µC in ProfiLab einlesen

Beitrag von tmm » Freitag 25. Juni 2010, 11:33

Hallo,

User KAKTUS hat mir mal dieses

http://www.der-hammer.info/terminal/

Terminal-Programm empfohlen; damit siehst du alle Zeichen, die die Schnittstelle bekommt.
Mein Problem konnt ich damals damit sehr schnell lösen.
Probier es mal aus.

Gruß MM

blackmamba
Beiträge: 7
Registriert: Montag 14. Dezember 2009, 09:50

Re: Strings von Multimeter VC 920 über µC in ProfiLab einlesen

Beitrag von blackmamba » Freitag 25. Juni 2010, 12:27

Hi MM,

das Programm habe ich schon länger in Benutzung, trotzdem Danke.
Was an meiner Schnittstelle ankommt weis ich ja, das habe ich ja schon in meinem ersten thread geschildert.

Da wurde mir gesagt ich solle auf $0D $0A Synchronisieren und dann als Trennzeichen ";" benutzen.
Das habe ich gemacht, jedoch geht es nicht.

Jetzt heisst es das geht nicht, weil das Trennzeichen ja im String vorhanden sein muss, was ja eigentlich logisch ist.

Theoretisch könnte ich ja dann auch $0A als Trennzeichen benutzen, oder?
Das brauche ich nachher zur auswertung eh nicht mehr.

Wäre nett wenn mir jemand konkret sagt wo ich was ändern sollte.
Muss ich schon im µC etwas hinzufügen, oder liegt der Fehler im ProfiLab?

Das mit dem anderen (CSV-ähnlichen) Format habe ich zur Kenntniss genommen, jedoch weis ich nicht wie ich es umsetzen soll.


Gruß Chris

tmm
Beiträge: 392
Registriert: Montag 23. Februar 2009, 06:38

Re: Strings von Multimeter VC 920 über µC in ProfiLab einlesen

Beitrag von tmm » Freitag 25. Juni 2010, 15:41

Hallo,

ich habe in deinem Programm rumgefummelt und den String zum Zerlegen vorher addiert. --> der §Part -bausten zerlegt den String wie vorgesehen.

Sieh dir das in der angefügten Datei mal an.

Das Problem liegt an einer anderen Stelle (aus den Makros kommt auch nichts raus :-(

Gruß MM
Dateianhänge
Datenmultiplexer_RS232_test.prj
(23.58 KiB) 355-mal heruntergeladen

blackmamba
Beiträge: 7
Registriert: Montag 14. Dezember 2009, 09:50

Re: Strings von Multimeter VC 920 über µC in ProfiLab einlesen

Beitrag von blackmamba » Freitag 25. Juni 2010, 19:41

Hi,

vielen Dank für die Hilfe.
Jetzt weis ich zumindest das ich noch irgendwie den ";" in meine vom Mikrocontroller gesendete Stringkette einbauen muss.

Allerdings empfängt ProfiLab die Strings so:
0xB0, 0xB0, 0x31, 0x38, 0x38, 0xB0, 0xB6, 0xB0, 0xB0, 0x0D, 0x0A

nicht so:
char text1[] = {0xB0, 0xB0, 0x31, 0x38, 0x38, 0xB0, 0xB6, 0xB0, 0xB0, 0x0D, 0x0A};

Was aber nichts zur Sache tut, ist nur ein kleiner Hinweis.
Du hast schon recht, ich muss auf jedenfall nochmal die Makros überarbeiten.
Getrennt wird ja richtig, sofern sich am Ende des jeweiligen Strings ein ";" befindet.

Ich denke das Problem könnte jetzt noch darin liegen das ich mir im jeweiligen Makro erstmal die richtigen Zeichen herauskopieren muss und umwandeln muss bevor ich sie in einem Display für Zahlen anzeigen kann.


EDIT:
------------------------------------------------
Was ich noch vergessen habe zu erwähnen:

Wenn ich jedoch mein bisheriges PL-Programm so lasse und die Stringkette auf einen festen Kanal schicke (natürlich mit entsprechenden Warteschleifen zwischen den Strings), ohne $Part dazwischen, dann zeigt es die Werte in dem entsprechendem Display richtig und mit Kommazahl an.
Wenn ich die Warteschleifen weglasse funktioniert es auch, nur kann man die zutreffenden Zahlen halt nicht mehr entziffern, da die Zahl im Display aufgrund der 9600BAUD zu schnell wechselt.

abacom
Site Admin
Beiträge: 3917
Registriert: Dienstag 23. September 2008, 10:54
Kontaktdaten:

Re: Strings von Multimeter VC 920 über µC in ProfiLab einlesen

Beitrag von abacom » Montag 28. Juni 2010, 08:16

Das heisst, ich müsste quasi am Ende jedes Strings den ich vom µC aus sende noch ein ";" mitschicken?
Genau so ist es!

"Wert1" Semikolon "Wert2" Semikolon "Wertn" $0d $0a

Das abschliessende $0d $0a entsteht - je nach Programmiersprache - z.B. bei einem BASIC-Print-Befehl automatisch.
ABACOM support

blackmamba
Beiträge: 7
Registriert: Montag 14. Dezember 2009, 09:50

Re: Strings von Multimeter VC 920 über µC in ProfiLab einlesen

Beitrag von blackmamba » Montag 28. Juni 2010, 08:44

OK, danke für die Info.
Das $0D $0A wird automasisch von den Messgeräten mit eingelesen und dann mit an PL geschickt.


Gruß Chris

Antworten

Zurück zu „Thema RS232“