Hallo Ich habe ein kleine Problem Ich bekomme von einem Gerät folgende daten gesendet: <02><0D> <0A> TT=563ms OTL=0mm CC=1 OI=17413<0D> <0A> 67868650<0D> <0A> 25IL 100% ST=0 RA=32 CL=_8 CS=__2 DIR=1 OD=120 FC=0<0D> <0A> <0D> <0A> <03> gibt es eine einfach möglichkeit nur die Position der zahl 67868650 (Barcode) auf einem LCD anzeigen zu lassen :-) wäre über hilfe sehr dankbar gruß Mario
Mario N. schrieb: > gibt es eine einfach möglichkeit nur die Position der zahl 67868650 > (Barcode) auf einem LCD anzeigen zu lassen :-) Wenn du die Stelle findest, wo eben diese Postion übermittelt wird: warum sollte das nicht möglich sein?
Was ist denn für die Position? Das wievielte Zeichen im Datensatz? Ist doch so schön verpackt, geht fast von alleine. Und wenn ich mich recht erinnere, hat doch gerade Basic rel. umfangreiche Stringfunktionen (braucht man hier aber eigentlich gar nicht). Such das zweite 0x0a.
es zählen doch nur die "normalen zeichen" als bit in einem String richtig ??
Bit? Alle Zeichen zählen, ausser 0x00, das wäre das stringende. Also auch 0x02,0x03,0x0d, 0x0a und 0x20.
Den Text etwas anders formatieren, und Du erkennst die Regelmäßigkeiten einfacher:
1 | Start <02> |
2 | Zeile 1 <0D><0A> |
3 | Zeile 2 TT=563ms OTL=0mm CC=1 OI=17413<0D><0A> |
4 | Zeile 3 67868650<0D><0A> |
5 | Zeile 4 25IL 100% ST=0 RA=32 CL=_8 CS=__2 DIR=1 OD=120 FC=0<0D><0A> |
6 | Zeile 5 <0D><0A> |
7 | Stop <03> |
Jede Zeile wird von der Zeichenfolge CR+LF (0d, 0a) abgeschlossen. Du willst den Inhalt der dritten Zeile auswerten.
das sehe ich ja leider brauche ich ein Beispiel wie ich da hin komme habe leider kein bespiel gefunden dazu :-( Start <02> Zeile 1 <0D><0A> Zeile 2 TT=563ms OTL=0mm CC=1 OI=17413<0D><0A> Zeile 3 67868650<0D><0A> Zeile 4 25IL 100% ST=0 RA=32 CL=_8 CS=__2 DIR=1 OD=120 FC=0<0D><0A> Zeile 5 <0D><0A> Stop <03> wie kann ich in dem String in die dritte Zeile springen zur Anzeige bzw auf das zweite CR LF warten und den rest ausgeben Ich habe das letzte mal vor 5 Jahren was mit Bascom gemacht darum bin ich im mom nicht mehr so ganz drinne Controller wird ein Attiny2313 und der Hardware UART wird verwendet wäre schön wenn jemand dazu ein paar Code schnipsel hätte wie ich da hinkomme
:
Bearbeitet durch User
Handbuch lesen führt zum Erfolg, google auch. Beides nicht Deine Stärke ;-( INPUT Der Befehl INPUT erwartet eine Zeichenfolge von der UART und schreibt diese in eine Variable. INPUT wartet so lange auf die Zeichenfolge bis CARRIAGE RETURN (CR) übermittelt wurde. Das Programm bleibt also stehen, bis CR über die UART rein kommt. Das ist ideal, wenn das Programm in der MainLoop nur kommuniziert. Es ist nicht ideal, wenn in der MainLoop auch noch andere Dinge erledigt werden sollten. Dafür gibt es andere Befehle wie INKEY oder ISCHARWAITING. Außerdem gibt es sogar die Möglichkeit, einen Interrupt auslösen zu lassen, wenn eine Zeichenfolge angekommen ist. Dieses Beispiel wartet bis eine mit CR abgeschlossene Zeichenfolge übermittelt wurde und schickt diese über die UART zurück: Dim Empfangen As String * 20 Do Input Empfangen Print "Empfangen: " ; Empfangen Loop End Mit CONFIG INPUT kann man einstellen, welches unsichtbare Zeichen oder welche unsichtbare Zeichenfolge einen Empfang abschließt.
traurig und hier noch die sekundengooglelösung. https://avrhelp.mcselec.com/index.html?configinput.htm
Das hab ich ja soweit verstanden aber ich möchte ja NUR das 2. CR LF haben also die Info danach nicht aber den Rest und ja ich habe bereits Google benutzt und gesucht aber das richtige dazu leider nicht gefunden
Beitrag #5901953 wurde von einem Moderator gelöscht.
Mario N. schrieb: > Das hab ich ja soweit verstanden aber ich möchte ja NUR das 2. CR LF > haben also die Info danach nicht aber den Rest > > und ja ich habe bereits Google benutzt und gesucht aber das richtige > dazu leider nicht gefunden Na sag mal, kannst Du nicht bis 2 zählen? Langsam haut es hier dem Fass den Boden aus. Sagt doch klar und deutlich: "Bitte schreibt mir doch einer den funktionierenden Fünfzeiler hier hin, ich habe meine Hausaufgaben nicht gemacht". Der Thread kann geschlossen werden.
NOCHMAL ICH BRAUCHE HILFE WIE ICH DEN 2. CR LF DIE INFO DANACH RAUSBEKOMME UND KEINE FERTIGEN CODE Google hab ich benutzt aber leider nichts gefunden aber ist ein Tolles Forum hier Ausser der Info vom Moderator Rufus war nichts wirklich hilfreich für mich bzw hat mich nichts weiter gebracht Dann säge Dir doch mit Midstring, bzw. Leftstring, Rightstring die Sachen aus dem empfangenen String heraus, dann hast Du doch, was Du brauchst. ???? ABER WIE ???? und an Na sag mal, kannst Du nicht bis 2 zählen? Langsam haut es hier dem Fass den Boden aus. Sagt doch klar und deutlich: "Bitte schreibt mir doch einer den funktionierenden Fünfzeiler hier hin, ich habe meine Hausaufgaben nicht gemacht". Der Thread kann geschlossen werden. EINFACH MAL LESEN BEVOR DU DUMM SCHREIBST !!!!!!!!!!!
Mario N. schrieb: > ???? ABER WIE ???? Ich würde ja beim Hersteller nachsehen und dort mal das Forum und die Hilfeseiten bemühen. Und das habe ich gefunden: https://avrhelp.mcselec.com/index.html?mid.htm
Karl M. schrieb: > Mario N. schrieb: >> ???? ABER WIE ???? > > Ich würde ja beim Hersteller nachsehen und dort mal das Forum und die > Hilfeseiten bemühen. > > Und das habe ich gefunden: > > https://avrhelp.mcselec.com/index.html?mid.htm hab ich gesehen aber wie kann ich dort eingeben das ich ab dem 2. CR anfangen will Dim S As String * 15 , Z As String * 15 S ="ABCDEFG" Z = Left(s , 5) Print Z 'ABCDE Z = Right(s , 3) : Print Z Z = Mid(s , 2 , 3) : Print Z End das möchte ich doch nur wissen sry wenn ich mich undeutlich ausgedrückt habe :-/ die Länge ist wie gesagt variabel dadurch nicht nach einer festen position nutzbar
Du hast selbst NICHTS beigetragen, was du wie und warum versucht hast und was daran nicht geklappt hat. Immer nur Gegreine nach ner fertigen Lösung. Die gibts aber i.a. nicht, wenn erkennbar ist dass der TO selbst nichts tut. Dazu kommt, dass es hier nur wenige Basic-Programmierer gibt. Die meisten müssten sich erst wieder in Syntax und vorhandene Funktionen einlesen - nur damit du es bequem hast. Ein array von 0 bis max. Ende durchzutickern, Zeichen zählen und anzuschauen. Falls es 0x0a ist auch dieses mit einem zweiten Zähler zählen. Falls du das zweite 0x0a findest bist du fertig. Dabei braucht man gar keine fertigen stringfunktionen (die anzuschauen und zu verstehen willst du ja offensichtlich nicht, machen letztendlich aber auch nichts anderes). Was programmierst du denn überhaupt, wenn du solch einfachste Algorithmen nicht siehst und umsetzen kannst? Es gibt viele Lösungswege, ich habe gerade gesehen dass es bei Bascom auch ne split-Funktion gibt.
Hallo, Dann würde ich eine Scanner, Tokeneiser, Parser schreiben, der mir die Zahlen im Format [0..9]+8 , wie "67868650" findet. Davor wären dann die Token TT, OTL, CC und OI mit ihren Werten <value>. Ich nutze extra die gefundenen Werte {<value>}, so kann man einfacher verstehen, was ich meine. Das "=" wird impliziert als Wertzuweisung für ein Token interpretiert. TT {563ms} ::= [0..9]+3"ms" OTL {0mm} ::= [0..9]+"mm" CC {1} ::= [0..9]+ OI {17413} ::= [0..9]+ XX {67868650} ::= [0..9]+8 ; eine 8 stellige Zahl! <0A>, <0D> kann man dem Token WhiteSpace (WS) zuordnen. Hier eine Token für Trennzeichen usw. WS ::= [<0A>,<0D>]+ ; das Zeichen CR und LF, evtl. noch weitere. TAB ::= [<08>] ; das Zeichen Tabulator SP ::= [<20>] ; das Zeichen Space Was nun unter: "25IL 100%" zu verstehen ist, d.h. welche Daten das sind, ist mir nicht klar. Deshalb das Token ??, das diesen Teilstring als Wert hat. Für den Rest kann man den Token-Ansatz weiter verfolgen: "ST=0 RA=32 CL=_8 CS=__2 DIR=1 OD=120 FC=0<0D>" Es kommen folgende weitere Token dazu: ST, RA, CL, CS, DIR, OD und FC. Ihre möglichen Werte ergeben sich aus dem Ausdrücken: ST {0} ::= [0..9]+ RA {32} ::= [0..9]+ CL {_8} ::= [_]*[0..9]+ ; mir ist nicht klar, ob das "_" optional ist, deshalb auch das [_]*, sonst wäre [_]+ richtig CS {__2} ::= [_]*[0..9]+ DIR {1} ::= [0..9]+ OD {120} ::= [0..9]+ FC {0} ::= [0..9]+ ID {<02>|<03>} ::= <[0][0..9]+>; ist so zu lesen, dass immer eine 0 vorangestellt sein muss. Mit deinem Beispiel ergeben sich die Token: "<02><0D> <0A> TT=563ms OTL=0mm CC=1 OI=17413<0D> <0A> 67868650<0D> <0A> 25IL 100% ST=0 RA=32 CL=_8 CS=__2 DIR=1 OD=120 FC=0<0D> <0A> <0D> <0A> <03>" Die gefundenen Token: ID WS TT OTL CC OI WS XX WS ?? ST RA CL CS DIR OD FC WS ID Somit sucht man in der Token-Liste nach dem ersten ID, dann weiter bis zum XX und liest den Wert aus XX.value. Wie man das einfach unter Bascom realisiert, kann ich der nicht erklären. Da Bascom in meinen Augen keine moderne Programmiersprache ist. Modern wäre, wenn man schreiben und der Compiler rechnen könnte: a = (a+1) *3 +7 /5
Er benötigt fertigen Code. Ist denn hier niemand dazu in der Lage? Bekommt er fertigen Code, wird er zukünftig seine Grundschulprobleme selber lösen können. Also bitte, was seid Ihr für schlechte Pädagogen.
Hä? schrieb: > Er benötigt fertigen Code. > Ist denn hier niemand dazu in der Lage? > Bekommt er fertigen Code, wird er zukünftig seine Grundschulprobleme > selber lösen können. Nach meiner Erfahrung nicht mit Bascom.
Mario N. schrieb: > Start <02> > Zeile 1 <0D><0A> > Zeile 2 TT=563ms OTL=0mm CC=1 OI=17413<0D><0A> > Zeile 3 67868650<0D><0A> > Zeile 4 25IL 100% ST=0 RA=32 CL=_8 CS=__2 DIR=1 OD=120 FC=0<0D><0A> > Zeile 5 <0D><0A> > Stop <03> > > wie kann ich in dem String in die dritte Zeile springen zur Anzeige bzw > auf das zweite CR LF warten und den rest ausgeben > Warum in die 3.Zeile springen? Und nicht sofort die Byte auswerten? In Assembler hab ich sowas gemacht. Kommt drauf an, ob BASCOM so schnell ist. Für so eine popelige Anzeige reichen 2400. > Ich habe das letzte mal vor 5 Jahren was mit Bascom gemacht darum bin > ich im mom nicht mehr so ganz drinne Ich habe das auch, aber sehr wenig damit gemacht. Man müßte nachsehen, ob es eingehende Daten nach CRLF separieren kann. Mal die Anwenderbeispiele durchforsten. Karl M. schrieb: > Hallo, > > Dann würde ich eine Scanner, Tokeneiser, Parser schreiben, > der mir die Zahlen im Format [0..9]+8 , wie "67868650" findet. ....... Man muß nicht mit Kanonen auf Spatzen schießen. Karl M. schrieb: > Da Bascom in meinen Augen keine moderne Programmiersprache ist. Was meinst du mit "modern"? Das ist Wischi Waschi, Nebel, unklar und undefiniert. Viele Leute erfreuen sich mit BASCOM und machen tolle Sachen damit. Ich finde sowieso, die Syntax hat sehr wenig mit Basic von 1985 zu tun.
1. Ich brauche keinen der mir einen Fertigen code schreibt 2. wollte ich nicht eine neue Programmiersprache erlernen wenn es nicht auch so geht 3. der sinn eines Forum ist doch das man fragen kann wenn man etwas nicht versteht um es zu verstehen 4. Danke an die die geholfen haben :-) macht weiter so jetzt kann der Thread geschlossen werden
Mit den Informationen kann auch Hänschen das nun programmieren. Wenn es läuft, zeig Deinen Code. Bisher ist da von Dir absolut NIX gekommen.
Hä? schrieb: > Mit den Informationen kann auch Hänschen das nun programmieren. > > Wenn es läuft, zeig Deinen Code. > > Bisher ist da von Dir absolut NIX gekommen. Ich habe ein paar ideen wie es klappen könnte auch in basom Ich werde sehen ob es sich so umsetzen lässt
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.