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

Re: Wieder rs232 Datenübernahme aus VB6 Kategorie: Programmierung (von André H. - 25.09.2004 16:09)
Als Antwort auf Wieder rs232 Datenübernahme aus VB6 von BeGu2 - 23.09.2004 19:29
Ich nutze:
C-Control II Unit, C164CI-ControllerBoard, CC2-Application-Board, CC2-StarterBoard, CC2-ReglerBoard, OSOPT V3.0
Hallo BeGu2,

> ich sitze geraume Zeit an einer simplen Datenübernahme
> aus Visual Basic 6.
> Ich habe mich irgendwie verrannt.
> 3 Werte sind zu übergeben.
> Sie können unterschiedlich lang sein (3-5 Stellen).
> In VB6 lese ich die Werte aus einem Formular und übergebe sie als
> String ...
>
> MSComm4.Output = Tg.Text + "-" + Df.Text + "-" + VDruck.Text + "-" + vbCr
>
> ...
>
> in der CC2 behandele ich die Werte wie folgt:
>
>
>   if hwcom.rxd()                    // Datenübernahme von VB6
>    {
>      hwcom.inputstr(s,0);           // String 3 Werte mit '-'-Trennzeichen
>      strx.split(s,t,'-');           // WERTE trennen
>      a=t[0];
>      b=t[1];
>      c=t[2];
>      Tg = get_int_of_string(a);     // Umwandlung in Integer
>      Df = get_int_of_string(b);     // Funktionen aus dem Forum
>      VDruck = get_int_of_string(c);
>    }// if hwcom.rxd()
>    
> Ich habe das Gefühl, dass es einfacher geht.

Auf jeden Fall muÃ? Du, wenn Du mit hwcom.inputstr() arbeiten willst, CR + LF senden und
nicht nur CR. (Also vbCrLf statt vbCr)
Warum willst Du Werte aus VB unbedingt als String senden ??
Das Einlesen von Werten als String hat z.B. nur bei Verwendung von Terminal-Programmen
einen Sinn.
Wenn man selbst ein Proggie am PC schreibt, welches die Kommunikation übernimmt,
ist es besser die Werte direkt zu senden.
Natürlich mu� man hier dann Zahlen, die grö�er als der Bytebereich sind,
entsprechend zerlegen

In Deinem Fall sind es 3 Integerwerte, also 6 Byte.
In VB sähe dies dann in etwa so aus:

sub sendWord(wert)
 wert=format(wert,"0")
 MSComm.output= Chr(wert &H100&) & Chr(wert and &HFF&)
end sub
...
 sendWord Tg.Text
 sendWord Df.Text
 sendWord VDruck.Text

CC2-seitig mu� das ganze dann ungefähr so aussehen:

 byte data[6];
 byte recbytescnt;
 ...
 wait hwcom.rxd();
 recbytescnt=hwcom.receive(data,6,250);
 if recbytescnt==6
  {
   Tg=(data[0] shl 8) or data[1];
   Df=(data[2] shl 8) or data[3];
   VDruck=(data[4] shl 8) or data[5];
  }
  else
  {
   // ungültiger Datenrahmen, zu wenige Bytes empfangen
  }


MfG André H.



Antworten bitte nur ins Forum!
Fragen per EMail auf Forum-Postings werden nicht beantwortet!

Das macht meine Heizung gerade


    Antwort schreiben


Antworten: