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 Dieter, > > Prinzipiell solltest Du in VB nicht gleich nach senden der Daten > prüfen, ob bereits etwas angekommen ist. > Denn 100% ist das nie der Fall, da das VB-Programm schneller ausgeführt > wird, als über die RS232 gesendet wird. > Optimal ist das Arbeiten mit dem onComm-Ereignis. Das wäre das einfachste. > Wenn Du das nicht machen willst, so solltest Du eine Warte-Schleife > in Deine Routine einbauen. (Mit Abbruchbedingung für ein Timeout.) > > Zum Übertragen selbst kann ich nur empfehlen, die Daten Binär und nicht > im Klartext zu senden. > Es macht keinen Sinn, die Daten zuerst in Text umzuwandlen, und anschließen > wieder in Binärdaten. > > Zu Deinem C2-Code: > (Bitte benutze die Code-Tags beim posten von C2-Code.) > Ich weiß, daß es in C leider üblich, die geschweiften Klammern so unübersichtlich zu setzen, > jedoch rate ich jedem, sich an ungefär folgendes Format zu halten: > <code>thread xy > { > if Bedingung > { > ... > } > else > { > ... > } > ... > while Bedingung > { > } > }</code> > > Es ist übersichtlicher und erleichtert das Lesen sehr. > Zum code selbst. > Zu solltest, bevor Du hwcom.get() verwendest, immer auf Empfang prüfen. > Denn hwcom.get() wartet nicht, bis ein Byte empfangen wurde. > Auch <code>else if</code> sollte öfters verwendet werden. > Das spart bei größeren if-Abfragen Rechenzeit. > > Mein Vorschlag zusammen mit der Änderung des Datenformats auf Binärddaten > statt Klartext wäre folgender: > <code> > //--------------------------------------------------------------------------------------------------- > thread SerKom > //--------------------------------------------------------------------------------------------------- > { > int schalter; > string s; > byte command; > // wait hwcom.rxd() > wait hwcom.inbuffercnt()>1; // Mindestens zwei Byte im Puffer > command=hwcom.get(); > if command=='A' > {// Außentemperatur setzen -------------------------------------------- > ta=(hwcom.get() shl 8) or hwcom.get(); > } > else if command=='S' > {// Schalter und Led ein aus -------------------------------------------- > schalter=hwcom.get(); > stports.setLED((schalter%10)+1-10,schalter>=10); > if schalter%10 == 7 stports.LCDlight(schalter>=10); > else > if schalter%10 == 8 stports.setRel(1,schalter>=10); > else > if schalter%10 == 9 stports.setRel(2,schalter>=10); > } > else if command=='a' > {// Status AD0 zurückgeben ----------------------------------------- > hwcom.put('a'); // a als Erkennung für AD0 > hwcom.putint(tww); > } > else if command=='b' > {// Status AD1 zurückgeben ----------------------------------------- > hwcom.put('b'); // b als Erkennung für AD1 > hwcom.putint(twb); > } > }</code> > > In VB würde das Senden der Daten so aussehen: > <font face="Courier New" size=2> > temp=Int(Rs!weatherdata * 10) > if temp<0 then temp=temp+65536 ' Negative Werte > MSComm1.output = A + asc(temp/256)+ asc(temp AND 255); > > MSComm1.output = S + asc(wert); > </font> > Das Empfangen würde dementsprecehnd so aussehen: > <font face="Courier New" size=2> > If MSComm1.InBufferCount>2 Then > MSComm.inputlen=1 > a = MSComm1.Input > HighByte=asc(MSComm1.input) > LowByte=asc(MSComm1.input) > inValue= (HighByte*256) + LowByte > if inValue> 32767 then inValue = inValue - 65536 ' negative Werte > select case a > case 'a' > Schema.txtBox(9).Text= inValue > case 'b' > Schema.txtBox(13).Text= inValue > end select > End If > </font> > Das beste wäre, wenn das, wie gesagt, mit dem OnComm-Ereignis gemacht würde: > <font face="Courier New" size=2> > Private Sub MSComm1_OnComm() > On Error Resume Next > if MSComm.CommEvent = comEvReceive then > 'Empfangsroutinen > '... > end if > end Sub > </font> > > MfG André H. > > > > > Hallo, > > > > ich möchte mit der Station kommunizieren und dieses vom PC aus steuern. > > Ich möchte z.B. Daten aus meiner Wetterstation an die CC2 senden und Statusdaten von der CC2 empfangen > > Auf dem PC läuft ein VB Programm z.B. mit dem MsComm Steuerelement das folgende Befehle absetz: > > > > ' Sensordaten aus Station lesen -------------------------------------------------------------------------------------------- > > MSComm1.Output = "a" > > DoEvents > > MSComm1.Output = "b" > > ' Es sollen alle verfügbaren Daten abgerufen werden. > > ' Prüfen, ob Daten vorhanden sind. > > If MSComm1.InBufferCount Then > > ' Daten lesen. > > InString$ = MSComm1.Input > > ' Umwandeln und ausgeben > > x = InStr(1, InString, "AD0=") > > If x > 0 Then > > Schema.txtBox(9).Text = Val(Mid(InString, x + 4, 3)) / 10 > > End If > > x = InStr(1, InString, "AD1=") > > If x > 0 Then > > Schema.txtBox(13).Text = Val(Mid(InString, x + 4, 3)) / 10 > > End If > > End If > > > > ' Wetterdaten an Station übergeben --------------------------------------------------------------------------------------- > > cString = "A" + CStr(Int(Rs!weatherdata * 10)) + vbCrLf > > MSComm1.Output = cString > > > > > > Dazu habe ich auf der Station folgenden Tread geschrieben, der auch funktioniert: > > //--------------------------------------------------------------------------------------------------- > > thread SerKom{ > > //--------------------------------------------------------------------------------------------------- > > int schalter; > > string s; > > byte command; > > command=hwcom.get(); > > if command=='A'{ > > // Außentemperatur setzen -------------------------------------------- > > ta=hwcom.input(3); > > } > > else if command=='S' { > > // Schalter und Led ein aus -------------------------------------------- > > schalter=hwcom.input(2); > > if schalter>=10 { > > stports.setLED(schalter+1-10,True); > > if schalter == 17 stports.LCDlight(True); > > if schalter == 18 stports.setRel(1,True); > > if schalter == 19 stports.setRel(2,True); > > > > }else{ > > stports.setLED(schalter+1,False); > > if schalter == 7 stports.LCDlight(False); > > if schalter == 8 stports.setRel(1,False); > > if schalter == 9 stports.setRel(2,False); > > } > > } > > else if command=='a' { > > // Status AD0 zurückgeben ----------------------------------------- > > s="AD0="; > > str.putint(s,tww); > > hwcom.print(s); > > hwcom.ret(); > > } > > else if command=='b' { > > // Status AD1 zurückgeben ----------------------------------------- > > s="AD1="; > > str.putint(s,twb); > > hwcom.print(s); > > hwcom.ret(); > > } > > } // End Thread > > > > > > Habt Ihr dazu Anmerkungen oder Verbesserungen? > > > > Gruss Dieter > > > >
Dateianhang: (.gif, .png., .jpg, .zip, .rar)
max. 256kB
max. 256kB