Zur Übersicht - INFO - Neueste 50 Beiträge - Neuer Beitrag - Suchen - FAQ - Zum CC1-Forum - Zum CC-Pro-Forum

Wichtig: Bevor Du wegen einem Problem mit der CC2 postest, stelle sicher, daß Du
die neueste OS-Version, die neuseste Compiler-DLL und die neuesten Modulversionen benutzt!
Beachte, daß sich auf der CD zur CC2-Unit/Station auch jetzt noch die ältesten Dateien befinden!
Es gelten folgende Anleitung und Regeln: Regeln CC2Net.de-Forum
Zurück zum Artikel  (Blaue Felder sind Pflichtfelder)


Name:   UserID: 
 E-Mail:
Kategorie
Betreff
Homepage:
Link-Titel:
Link-URL:
Cookie für Name, UserID, E-Mail, Homepage-URL setzen
(Erspart die Neueingabe bei Beiträgen und Antworten)
(Zum Löschen des Cookies hier klicken)
Ich nutze:
C-Control II Unit
C164CI-Controllerboard
C-Control II Station
CCRP5 mit CC2-Unit (Conrad Roboter)
CC2-Application-Board
CC2-StarterBoard
CC2-ReglerBoard
eigenes Board
original OS     OSOPT_V2     OSOPT V3.0 OSOPT V3.1

Kommentar:
Einfügen von HTML im Kommentar:

Link einfügen: <a href="LINKURL" target="_blank">LINKTITEL</a>
Bild einfügen: <img src="BILDURL">
Text formatieren: <b>fetter Text</b>  <i>kursiver Text</i> <u>unterstrichener Text</u>
Kombinationen sind auch möglich z.B.: <b><i>fetter & kursiver Text</i></b>
C2 Quellcode formatieren: <code>Quellcode</code>
ASM Quellcode formatieren: <asm>Quellcode</asm>
(Innerhalb eines Quellcodeabschnitts ist kein html möglich.)
Wichtig: Bitte mache Zeilenumbrüche, bevor Du am rechten Rand des Eingabefeldes ankommst !  

> Hallo ACU, > > Wie Rene schon schreibt, findest Du das meiste in strx.c2 . > Jedoch solltest du Dir zuerst Gedanken über die Struktur des Protokolls machen: > > 1. Wie werden die Daten übertragen ? > Sollen die Eingaben über ein Terminalprogramm erfolgen, oder willst Du ein eigenes > PC-Proggie schreiben, welches die Kommunikation übernimmt ? > > 2. Wie sicher soll es sein ? > Bei einem relativ sicherem Protokoll sollte man im Datenrahmen die Länge dessen > und auch eine Prüfsumme (Modulo 256) mit rein. > Auch ein Senden von einem ACK bzw. NACK zum Bestätigen bzw. nicht Bestätigen > des Empfangs sichert eine korrekte Übertragung > > 3. Ein definiertes Anfangszeichen hilft, falsche/unvollständige Datenrahmen zu erkennen. > Es wird hier oft gern mit ESC-Sequenzen gearbeitet. D.h. jeder Datensatz wird mit > einem ESC-Zeichen eingeleitet. (ASCII 27) > > Prinzipiell kann ich den Tip geben, die Übermittlung von Werten so einfach, wie > möglich zu machen. > Wenn Du am PC ein eigenes Programm für die COM schreibst, wäre es > alles andere als Sinnvoll, Daten in Klartext zu übermitteln. > Besser wäre es einzelne Kommadobytes zu definieren. > Dies können Buchstaben sein, aber auch beliebige (Byte-)Werte. > diese können zu Kommandosequenzen zusammengefasst werden. > Auch Parameter, die z.B. in Variablen gespeichert werden sollen, sollten > Besser als Byte-Werte, statt als Text übermittelt werden. > also Statt "255" (0x32 0x35 0x35) überträgst Du liefer ein Byte mit dem Wert 0xFF. > Bei Wertbereichen größer Byte verwendest Du einfach Hi-Byte und Lo-Byte und > zerlegst diese auf PC-Seite: > <font face="Courier New" size=2> HiByte= wert\256 > LoByte=wert and 255</font> > > In der CC2 kannst Du dies einfach wieder zusammensetzen: > <code>Wert= (HiByte shl 8) or LoByte;</code> > > Der angenehme Nebeneffekt, wenn man so überträgt, ist, daß die Komunikation > um einiges schneller geht, als wenn Du Strings mit Klartext benutzt. > > Um noch Anregungen zu geben, wie solche Datenrahmen aussehen können, > verweise ich gerne auf die Ansteuerung der Electronic Assemble Displays der KIT-Reihe > bzw. jetzt auch auf das eDIP. > In den Datenblättern kann man sehr schön sehen, wie dort mit kommandosequenzen > gearbeitet wird. Dies kann man sehr gut für eine CC2-PC-kommunikation ableiten. > > Ich würde hier allerdings nichtmehr mit Strings arbeiten, sondern eher mit > normalen Bytearrays, oder sogar die Zeichen einzeln aus dem Puffer einlesen. > So wäre es am einfachsten. > > Wenn Du aber lieber doch mit Klartext arbeiten möchtest, > mußt Du eben mit dem Modul strx.c2 arbeiten. > Um auf Deine geplante Struktur einzugehen: > Das Aufteilen in zwei Anweisungsstrukturen mittels des ersten zeichens ist sehr einfach: > Lies dieses mit einem einfachen hwcom.get() ein und werte es aus. > Danach liest Du erst den String ein. > Der Vorteil ist hier, daß Du nicht extra das erste Zeichen isolieren und entfernen mußt: > <code>... > c=hwcom.get(); > if c=='A' Anfrage(); > else if c=='B' Befehl(); > ...</code> > Dir bleibt dann noch das Einlesen des Strings und das Auswerten: > <code>function Befehl() > {string eingabe,kommando,s; > int value;byte sep; > hwcom.inputstr(eingabe,0); // Eingabe muß mit CRLF abgeschlossen werden ! > s="="; > sep=strx.InStr(0,eingabe,s,str.length(eingabe),1); > strx.left(eingabe,kommando,sep-1); > sep=str.len(eingabe)-sep; > strx.right(eingabe,s,sep+1); > value=strx.getNum(s); > //... > // Ab hier Auswertung des Kommandos > //... > }</code> > > Alternativ kann man das Kommando vom Wert auch so trennen, > was von der Bearbeitungszeit ca. gleich schnell sein sollte: > <code>function getSepPos(byte s[]) returns byte > {byte i; > for i=0 ... s[31]-1 if s[i]=='=' return i; // Position des Trennzeichens > return 30; // kein Trennzeichen > } > > function Befehl() > {string eingabe,kommando,s; > int value;byte sep; > hwcom.inputstr(eingabe,0); // Eingabe muß mit CRLF abgeschlossen werden ! > s="="; > sep=getSep(eingabe); > strx.left(eingabe,kommando,sep-1); > sep=str.len(eingabe)-sep; > strx.right(eingabe,s,sep+1); > value=strx.getNum(s); > //... > // Ab hier Auswertung des Kommandos > //... > }</code> > > > > > Es wäre schön, wenn ihr die Befehle gut erklären könntet, da > > ich mit den anderen Beispielen, die ich im Forum gefunden habe (zum Beispiel: > > ... > > leider nichts anfangen kann. > > Schreibe einmal dazu, was Du an diesem gefundenem Beispiel nicht verstehst bzw. > was dort unklar ist. > Es ist nämlich ein sehr einfaches Beispiel für ein Interface via Terminalproggie. > Es unterscheidet im Prinzip zwischen "Portzustand ändern" (P) und Port abfragen (G). > Danach wird die Portnummer eingegeben. Hier 0 bis 7 für die Ports P1H.0 -.7 (Ports 8 bis 15) > Anschließend wird bei komanndo P mit den Worten "EIN", "AUS" oder "DEACT" bestimmt, > was mit den Ports angestellt werden soll. > Die Eingabe am Terminal könnte dann z.B. ao aussehen: > P0 ein > P1 deact > P6=aus > G4 > > Wichtig ist, daß die Eingaben mit Enter abgeschlossen werden. > Ob zwischen einem "P0" und dem Wort nun ein Leerzeichen steht oder nicht bzw. > andere Zeichen dawischen sind, spielt keine Rolle. > Es wird lediglich geprüft, ob eines der Wörter vorkommt. > Man könnte sogar mehrere Wörter angeben. > P0 EIN AUS > erzeugt z.B. einen kurzen Impuls an P0. > > Wenn Du zu Diesem Beispiel noch fragen hastm dann schreibe Sie am besten genau zu > den Zeilen, dessen Bedeutung unklar ist. > Ich glaube, das ist sinnvoller, als daß ich jede Programmzeile großartig kommentieren muß. > > MfG André H.
Dateianhang: (.gif, .png., .jpg, .zip, .rar)
max. 256kB
max. 256kB