Announcement

Collapse
No announcement yet.

MS Windows Borland C++ Builder V5 Serielle Schnittstelle

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • MS Windows Borland C++ Builder V5 Serielle Schnittstelle

    hallo,

    ich muss ein prog schreiben, was daten über die serielle schnittstelle
    leitet. es soll auf der einen seite daten von einem thermostaten
    (julabo) empfangen und auf der anderen seiten wieder daten zurück
    schicken.

    also mit hilfe diverser codes habe ich es hinbekommen, dass er
    erfolgreich ein port öffnet...

    nun meine fragen:
    - wie kann man software-seitig sicher gehen, daß auch wirklich ein gerät
    an diesem port ist? kann man das irgend wie prüfen?


    - wie genau müssen die daten aussehen, die ich sende?
    in der anleitung des thermostaten steht, die "übertragung der zeichen
    erfolgt gemäß din 66022 und din 66003, codetabelle 1".
    das sagt mir nicht wirklich was ....
    ich weiß nicht, ob ich die befehle in 'normalen' zeichen (a,b,c,..) oder
    in den hex-codes senden muss. ausserdem ist mir rätzelhaft, wie ich den
    string definieren muss (dword, char, ....)!?

    kann mir vielleicht irgend jemand helfen?

  • #2
    Salve!
    DIN 66022 - Deutsche Industrie Norm fuer Darstellung des 7-Bit-Code bei Datenuebertragung
    http://www.iwoxx.com/deutsch/product...elp/hs1040.htm

    Du mußt nur startbit stopbit und parity einstellen an deiner COM, damit beide sich verstehen.
    Ich empfehle dir die Classe von Harold Howe, bcbdev.com zu benutzen(ggf. anpassen)


    Ob COM angeschlossen ?
    GetCommModemStatus verwenden
    MS_CTS_ON The CTS (clear-to-send) signal is on.
    MS_DSR_ON The DSR (data-set-ready) signal is on.
    MS_RING_ON The ring indicator signal is on.
    MS_RLSD_ON The RLSD (receive-line-signal-detect) signal is on.

    // stat & MS_DSR_ON usw.

    unsigned long stat = 0;

    if( GetCommModemStatus( MRead->PORT->GetHandle(), &stat ) == 0 )
    // Fehler
    else
    dein code

    mfg
    fred
    Zuletzt editiert von Fred Nest; 19.08.2007, 16:25.

    Comment


    • #3
      hallo,
      den link kenne ich schon .... hilft mir erst mal nicht weiter... (oder ich sehe die lösung nicht )
      - wie genau müssen die daten aussehen, die ich sende?
      in der anleitung des thermostaten steht, die "übertragung der zeichen
      erfolgt gemäß din 66022 und din 66003, codetabelle 1".
      das sagt mir nicht wirklich was ....
      ich weiß nicht, ob ich die befehle in 'normalen' zeichen (a,b,c,..) oder
      in den hex-codes senden muss. ausserdem ist mir rätzelhaft, wie ich den
      string definieren muss (dword, char, ....)!?
      dies ist mein problem..... ich verstehe das einfach mit den daten nicht.

      ein befehl sieht zb. so aus:
      Code:
      in_pv_00
      muss ich da jetzt nur noch start-, stopp-bit und das 'enter' anfügen?
      (syntax: befehl_leerzeichen_parameter_endezeichen [quelle:manual])
      oder muss ich jedes zeichen, das ich schicken will in hex wandeln?
      Code:
      696E5F70765F3030200D
      der obrige befehl + space + endezeichen (enter) in hex .....
      sool das die lösung sein?

      Comment


      • #4
        BYTE arr[deine größe]; // hier kopierst du deine daten rein

        // dann senden
        // parity, stopbit usw. vorher einstellen den rest macht windows

        Beispiel aus der klasse von H.H.
        int TCommPort::WriteBuffer(BYTE *buffer, unsigned int ByteCount)
        {
        VerifyOpen();
        // alles löschen
        FlushCommPort();

        DWORD dummy;
        if( (ByteCount == 0) || (buffer == NULL))
        return 0;
        // writefile der api übernimmt alles
        if(!WriteFile(m_hCom,buffer,ByteCount,&dummy,NULL) )
        {
        setError(ECommError::WRITE_ERROR);
        return -1;
        }
        return dummy;
        }

        mfg
        Fred

        Comment

        Working...
        X