Strings ueber USB/RS232

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

Strings ueber USB/RS232

Beitrag von abacom » Dienstag 14. Oktober 2008, 12:44

Karl_B



Anmeldungsdatum: 09.07.2006
Beiträge: 47

Verfasst am: 17.09.2006 16:58 Titel: Strings ueber USB/RS232

--------------------------------------------------------------------------------

Hi,

habe heute mal etwas Zeit gefunden mit den neuen String-Funktionen zu experimentieren. Als "Sender" einen Mikrokontroller der einen Text ueber USB/RS232 zum PLE auf dem PC alle 5s sendet.

In PLE ganz einfach Taktgeber 100ms - COM-String-Empfaenger - String-Anzeige. Einstellungen 19200 Bd. - 8N1.

Test mit Hyperterm, die empfangenen Strings werden so dargestellt, wie sie gesendet werden.

Mit PLE - funktioniert soweit auch ganz gut. Hat zumindest bei mir einen "Schoenheitsfehler". Nach Empfang des ersten "sauberen" String bekommt jeder weitere empfangene String ein kleines quadratisches Kaestchen im Fenster der String-Anzeige vorangestellt. Was bedeutet dieses? Bekommt man dieses irgendwie weg? In der Hilfe finde ich keinen Hinweis oder ich uebersehe diese immer - (Brille ist neu).

Gruesse Karl

Nach oben


Mike D



Anmeldungsdatum: 03.07.2006
Beiträge: 236

Verfasst am: 17.09.2006 19:36 Titel:

--------------------------------------------------------------------------------

Hi Karl,
ich vermute dein Mikro sendet als Zeilenende CR LF.
'COM-String empfangen' hat als Synchronzeichenkette defaultmäßig aber nur $0D eingestellt, d.h. das LF wird als 1. Zeichen des nächsten Strings genommen und als Sonderzeichen mit dem Kästchen dargestellt.
Versuch also mal wie im grauen Beispieltext $0D $10 als Synchronzeichenkette einzustellen.

Mike

Nach oben


Karl_B



Anmeldungsdatum: 09.07.2006
Beiträge: 47

Verfasst am: 17.09.2006 19:49 Titel:

--------------------------------------------------------------------------------

Hi Mike D,

danke fuer den Hinweis. Mit $0D $0A funktioniert es.
Haette selber drauf kommen muessen, aber manchmal hat man wirklich ein Brett vorm Kopf.

mfg Karl

Nach oben


tlampart



Anmeldungsdatum: 06.02.2008
Beiträge: 20
Wohnort: Hülben
Verfasst am: 23.04.2008 22:51 Titel: Können die Daten auch im Binaerformat gesendet werden

--------------------------------------------------------------------------------

Vorgabe, die Bytes aus einer Date müssen gewandelt werden, dazu würde ich die ROM-Funktion hernehmen.

Nun ist das byte im Format, im muss dann in Abhängigkeit der HalbNibbles (2 Bit) ein Bitmuster Binaer "0000000000000000" oder Binaer "0000111100001111" und so weiter anlegen

Mein Ansatz ist das gewandelte Byte mit dem Schieberegister zu shiften und dann mit der Stringformatirung zu senden, ich hab es mit einem Schnittstellenmonitor verifiziert, ich sende aber Ascii 30 => "0" oder Ascii 31 => "1" das ist das falsche Format, wie kommich in Binaermode...

wie einfach wäre es mit dem bei der Wunschliste vorgescvhlagenen InlineBasicinterpreter

vielen Dank für Eure Vorschläge.

SensorPeople
_________________
Sensor People

Nach oben


Mike D



Anmeldungsdatum: 03.07.2006
Beiträge: 236

Verfasst am: 24.04.2008 08:18 Titel:

--------------------------------------------------------------------------------

ist es eigentlich so schwer Fragen so zu formulieren, dass man gleich versteht was gemeint ist und sie nicht erst aufwändig dechifrieren und analysieren muss.

Mike

Nach oben


tlampart



Anmeldungsdatum: 06.02.2008
Beiträge: 20
Wohnort: Hülben
Verfasst am: 24.04.2008 09:22 Titel:

--------------------------------------------------------------------------------

Also nochmals in Prosa:

Problem ist einen String in ein andres Format zu wandeln.

Ich habe einen Binaeres Muster, welches in Ascii zum Beispiel "TEST" ( als Hexcode 0x54 0x45 0x53 0x54) ergeben würde.
(binaer: 01010100, 01000101, 01010011, 01010100)
Nimm nur 1 Zeichen, das "T" (hex 0x54m bin 01010100)

1. Schritt:
Hier wird nun mit der ROM-Funktion jedes Byte gespiegelt, somit ergibt sich: (binaer: 01010100 <-> 00101010)
|____|
(Diese Wandlung war easy: ich habeinfach in VBA (Excel) eine for-next-schleife geschrieben und die zellen geswippt)

excel-script:

Sub main()
Dim ii As Variant

For i = 1 To 255
Cells(i, 1) = i
Cells(i, 2) = Hex(Cells(i, 1))

Cells(i, 4) = Right(Format(Dez2Bin(Cells(i, 1)), WorksheetFunction.Rept("00000000", CInt(Len(Dez2Bin(Cells(i, 1))) / 4) + 1)),
Next i
End Sub

Sub change_it()
For i = 1 To 256
For o = 1 To 8
Cells(i, 5) = Mid(Cells(i, 4), o, 1) & Cells(i, 5)
Next o
Next i
End Sub
(das nur nebenbei, bevor ich jedes Bit einzeln drehen muss...es wären dann immerhin 2048 Bit, da kann schon ein Fehler unterlaufen)

2. Schritt:
Diese Binaer gewandelten Zeichen sollen in halnibbles (2 Bit) gesplittet werden, so weit kannst Du mir noch folgen oder ?
also aus 00101010 wird dann 00, 10, 10, 10
DIes würde ich mit einem Schieberegister realisieren.

3. Schritt:
diese Bitmuster werden nun mit dem Multiplexer mit anderen Daten füllen, so soll aus dem Bitmuster "00" z.B. 0000000000000000
"01" z.B. 0000000011111111
"01" z.B. 0000000011111111
"01" z.B. 0000000011111111
werden.

4.Schritt: auf RS232 oder RS485 rausschreiben.
und hier ergibt sich nun die eigentliche Schwierigkeit, ich bekomme über die serielle Schnittstelle über die ich das Muster rauschschieben möchte nur "schnöde" Asciizeichen, da die "0" als hex 30 und die 1 als hex 31 interpretiert wird. Wäre ja o.k. aber ich will keine Asciizeichen sondern Binaerzeichen. (die 1 soll als 1 interpretiert werden.)


(vermutlich muss ich die Daten im Multiplexer anders hinterlegen.
die Binaerdaten bereits in Hex codiert....)

Also schriotte 1-3 zum besseren Verständniss, und Schritt 4 mein kleiner Hilfeschrei, ob mir nun jemand helfen kannst und will ?

Gruß, SensorPeople
_________________
Sensor People

Nach oben


Mike D



Anmeldungsdatum: 03.07.2006
Beiträge: 236

Verfasst am: 24.04.2008 10:33 Titel:

--------------------------------------------------------------------------------

das müsste doch mit $Character gehen

Nach oben


tlampart



Anmeldungsdatum: 06.02.2008
Beiträge: 20
Wohnort: Hülben
Verfasst am: 24.04.2008 10:48 Titel:

--------------------------------------------------------------------------------

Ich werd es mal bei Gelegenheit probieren (glaub aber es geht nicht, da hier lediglich eine Typwandlung Hex in Dez stattfindet, aber wer weiß

Ich habe es nun in meiner Verzweiflung mit einem Arb (arbitrary waveform generator: ein etwas besserer Frequenzgenerator) realisiert.
Hab die Zeichen in Excel (VBA) gewandelt und dann in ein File geschrieben dieses dann per Terminalprogramm an den Arb übertragen.

sehr unkomportabel, aber es geht, PLE wäre hier ideal. Eventuell hat Abacom eine Lösung

gruß und danke.
_________________
Sensor People

Nach oben


abacom
Site Admin


Anmeldungsdatum: 30.06.2006
Beiträge: 898

Verfasst am: 02.05.2008 22:39 Titel:

--------------------------------------------------------------------------------

Es gilt ASCII("0") = 48dez oder auch ASCII("0") - 48 = 0

=> CHR( ASCII("0") - 48 ) = CHR(0) sollte die Lösung des Problems sein.

Anders herum wird aus einem CHR(0) durch

CHR( ASCII( chr(0) ) + 48 )="0"

wieder das Zeichen "0".

Nach oben


LED



Anmeldungsdatum: 15.02.2008
Beiträge: 54

Verfasst am: 06.05.2008 09:06 Titel:

--------------------------------------------------------------------------------

Die Antwort hat gesessen!

Danke fuer den Tipp, und gruesse aus Thailand, kann trotz Urlaub nicht von PL lassen

Nach oben


tlampart



Anmeldungsdatum: 06.02.2008
Beiträge: 20
Wohnort: Hülben
Verfasst am: 06.05.2008 11:56 Titel: @ Abacom

--------------------------------------------------------------------------------

Hallo Abacom,

danke für die Formel, (auch LED vielen Dank für die bedeutsame Bemerkung, welche mir wirklich weiterhilft )

ich bin mir im Klaren, dass ASCII-NUL auch Hex, bzw Dez 0 bedeutet.
und dass 30hex die "0" ist, und 41hex das "A" oder 61 das "a" usw.
Dass 48dez 30hex und damit wieder "0" bedeutet. usw. usf.

Also danke für die Formel.

Meine Frage war ob ich die Formel oder die o.beschriebene Aufgabe mit Hilfe der universellen Formel lösen kann.
Wie muss hier die Formel angewandt werden, oder geht es nicht mit der "Formel Allgemein" ? dann müßte ich eine DLL schreiben, und ich habe lediglich ein VB-Compiler, dazu würde mir eine in VB portierte Vorlage fehlen.

vielen Dank und wie immer PLE ein Super Produkt.
[/b]
_________________
Sensor People

Nach oben


abacom
Site Admin


Anmeldungsdatum: 30.06.2006
Beiträge: 898

Verfasst am: 13.05.2008 20:12 Titel:

--------------------------------------------------------------------------------

"Formel universell" dürfte hier vollkommen fehl am Platz sein (da es im wesentlichen und Stringverabeitung geht) und dient nur der Berechnung mathematischer (numerischer) Ausdrücke.
ABACOM support

Antworten

Zurück zu „Thema RS232“