![]() |
ComPort mit Interface-Doku - Dezibelmessgerät - Async Pro
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo,
ich bin gerade dabei, mit Async Pro folgendes zu implementieren: Abfragen der aktuellen Lautstärke Dazu habe ich eine InterfaceDoku. Das Ganze läuft über USB, Com3. Nu habe ich erst fast 2 Jahre englisch, und 2. versteh ich das nicht ganz. Die Doku ist angehängt. Ich bin soweit, das ich vor jedem Befehl ein $A5 senden muss, und der mit $A5$0D für 2 Bytes und $A5$06 für 3 Bytes zurücksendet. Klappt aber nicht ganz. Kann mir jemand Hilfe geben? Marius |
Re: ComPort mit Interface-Doku - Dezibelmessgerät - Async Pr
Ich kenne das Teil zwar nicht, aber was soll nicht richtig gehen?
Was passiert denn, wenn man A5h und dann 1Bh sendet? Kommt da keine Antwort oder kommen wirre Zeichen? Ich würde das erste Testen mit einem Terminalprogramm (Bsp. Terminal v1.9b, in Google suchen, Super Teil) machen und wenn das läuft, dann das Ganze in Delphi um setzen. |
Re: ComPort mit Interface-Doku - Dezibelmessgerät - Async Pr
Liste der Anhänge anzeigen (Anzahl: 1)
Hi,
ich arbeite seit Jahren mit asychpro. Funktioniert alles einwandfrei (wenn es auch ein zwei Macken gibt). Ich kann dir leider nur helfen, wenn du ein Stück Code postest. Wie sendest du? Vor allem wie empfängst du? Siehe Anhang, dort ist sowohl empfangen als auch senden realisiert. Thread Serielle Schnittstelle überwachen.(weiss leider nicht wie man einen Link auf ein Thema erstellt) Viele Grüsse |
Re: ComPort mit Interface-Doku - Dezibelmessgerät - Async Pr
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo,
dort kommt nur wirres zeugs raus. ich habe ein Stückchen Code angehangen. Dort wird das übertragene Stück geparst, also erstes Byte #$A5 usw. Edit: Bin schon etwas weiter. Nur mit Async Pro habe ich Probleme, weil ich nur Bruchstücke bekomme :( und ich weiß nicht wie ich das parsen soll. Auszug:
Code:
Jede neue Zeile ist einmal onTriggerAvail aufgerufen.
A551A50CA51B00A506024125A540A50EA511A50D0353A50CA51B00A506024125A540A50EA511A50D0353A50CA51B00A506024125A540A50EA511A50D
0352A50CA51B 00 A506024125 A540A5 0EA511 A5 0D0352A5 0B 00A5 060241 25A519A5 02A50F A51A A5 0D0351 A50CA51B 00 A50602 4125A540 A50EA511 A5 0D0351A5 0CA51B 00 A506024125 A540A50E A511 A5 0D0350A5 0C A51B 00A506 024125A540 A50EA511 A5 0D0349A50C A51B 00 A506024125 A540A5 0EA511 A5 0D0349A50CA5 1B 00A5 060241 25A540A5 0EA511 A5 0D0349A5 0CA51B 00A5 06024125A540A50E A511 A5 0D0348A50C A5 1B00A5 06024125A5 40A50EA511 A5 0D0347 A50CA51B 00A50602 4125A540A50E A511 A50D0346 A50CA51B 00A5 06024125 A540 A50EA511 A5 0D0345A50B 00A506 024125A519 A502 A50FA51A A5 0D0345A50C A51B 00A5 06024125 A540A50E A511 A5 0D0344A50CA5 1B 00A506 024125A5 40A5 0EA511 A5 0D0343A50C A51B 00A506 0241 25A540A50EA511 A5 0D0343A50C A51B 00 A506024125 A540A50EA5 11 A5 0D0343A50C A51B 00A5 060241 26A540A50EA5 11 A5 0D0342A50CA5 1B 00A506024126 A540A50EA5 11 A5 0D0341A50C A51B 00A506 024126A5 40A50EA511 A5 0D0342A50C A51B 00A50602 4126A540 A50EA511 A5 0D0345A50C A51B 00A5 06024126A5 40A50EA5 11 A5 0D0346A50B 00A5 06024126A519 A502A50FA5 1A A5 0D0345A50C A51B 00A5 06024126 A540A50EA5 11 A5 0D0345A50C A51B 00A506 024126A5 40A50EA511 A5 0D0344A50C A51B 00A5 06024126 A540A50EA5 11 A5 0D0343A50CA5 1B 00A506 024126A5 40A50EA5 11 A5 0D0343A50C A51B 00A5 06024126 A540A50EA5 11 A5 0D0345A50C A51B 00A506 024126 A540A50EA511 A5 0D0345A5 0CA51B 00A506 024126A5 40A50EA511 A5 0D0345A5 0CA51B 00A506 024126A5 40A50EA511 A5 0D0345A5 0CA51B 00 A506024126 A540A50EA5 11 A5 0D0345A50B 00 A506024126 A519A502A50FA5 1A A5 0D0347A5 0CA51B Marius |
Re: ComPort mit Interface-Doku - Dezibelmessgerät - Async Pr
Hallo Marius,
ich nutze ein anderes Objekt zum Auslesen vom Comport. Dies ist aber kostenpflichtig (TMS Software). Es könnte sein, dass das Ereignis "TriggerAvail" schon ausgelöst wird, aber noch nicht alle Zeichen da sind. Dann ist aber "Count" schon festgelegt. Entweder Du wartest noch eine kurze Zeit und dann rufst Du die Daten ab oder Du liest die Daten in ein globales Objekt ein und wartest, bis dort 2 oder 3 Zeichen drin sind. Auf jeden Fall solltest Du "Data2" vorab leer machen. Probiere dies doch mal mit dem Terminalprogramm aus, was ich letztens erwähnt hatte. Dann siehst Du wirklich, wann die Daten kommen
Delphi-Quellcode:
procedure TfrmMain.pegelTriggerAvail(CP: TObject; Count: Word);
var Data: String; data2:String; d:Char; I: Integer; begin { OnTriggerAvail; Read the data } for I:= 0 to Count-1 do begin d:=pegel.GetChar; Data2 := Data2 + IntToHex(Word(d),2) + sLineBreak; Data := Data + d; end; parse(Data); //memData.lines.Add(data2); end; Wenn man die Daten einmal sortiert, dann sieht es doch schon ganz gut aus (siehe unten). Dies bestärkt meine Vermutung, dass Du immer den Empfangsstring löschen mußt, bevor Du Daten sendest und dann die Daten in ein gloabes Array schreibst. Wie es aussieht, kommt der Event schon, wenn noch nicht alle Daten da sind. A551 A50C A51B00 A506024125 A540 A50E A511 A50D0353 A50C A51B00 A506024125 A540 A50E A511 A50D0353 A50C A51B00 A506024125 A540 A50E A511 A50D0352 A50C A51B00 A506024125 A540 A50E A511 A50D0352 A50B00 A506024125 A519 A502 A50F |
Re: ComPort mit Interface-Doku - Dezibelmessgerät - Async Pr
Hallo,
(Achso, ich brauche garkeine Daten zu senden) naja, es geht ja ziemlich schnell, Baudrate:9600, und die Zeitangabe wird nur angezeigt, wenn ich es auf String statt Hex einstelle. Da scheinen die Stücke kleiner zu sein... Marius |
Re: ComPort mit Interface-Doku - Dezibelmessgerät - Async Pr
So wie Du schreibst, kommen die Daten von alleine?
Da nimm doch ein größeres Array und schreib einfach die Daten rein. Dann suchst Du nach "A5", das scheint ja das Startbyte zu sein und nimmst die Daten, bis wieder "A5" auftaucht. Alles was dazwischen ist, mußt Du dann auswerten. Das kannst Du auch in der Empfangsroutine machen. Du kannst aber nicht immer hoffen, dass, wenn das Event angetriggert ist, dann auch der komplette Inhalt einer Auswertung drin ist. Es kann sein, dass das Event so schnell ist, dass nur 2 Bytes "reingerutscht" sind. Beim nächsten Event kommt dann der Rest. |
Re: ComPort mit Interface-Doku - Dezibelmessgerät - Async Pr
Hallo,
allerdings was ist, wenn in den Daten auch ein A5 vorkommt? Marius |
Re: ComPort mit Interface-Doku - Dezibelmessgerät - Async Pr
Dann kannst Du nur den vorhandenen String analysieren, ob die Länge für dieses Objekt erreicht ist. Es scheint ja nicht immer die gleiche Länge zu sein.
Wenn das erste Byte immer "A5" ist, dann sollte das 2. Byte eine Aussage dafür sein, wie lang der String wird. Dann könnte man mit "case Data[2] of" eine Abfrage machen, wieviel Bytes noch kommen.
Delphi-Quellcode:
Dies nur alles theoretisch. Vorher mußt Du noch abprüfen, ob Du auf Data[2] zugreifen darfst. Ansonsten gibts einen Fehler. Wenn Länge <2, dann nichts auswerten.
case Data[2] of
#$0C, #$0E, #$11, #$40, #$51 : length:=2; #$1B : length:=3; #$0D : length:=4; #$06 : length:=5; Hoffentlich hilft Dir das weiter. |
Re: ComPort mit Interface-Doku - Dezibelmessgerät - Async Pr
Hallo MSSSSM,
bei Asyn Pro gibt es die Komponente ApdDataPacket dort ist es möglich einen Start- und End-String zu hinterlegen, währe ein Versuch wert. Bis bald Chemiker |
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:49 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz