Home
English
Informationen
Downloads
Buchtipps
Autor
Links

Zugriff auf die serielle Schnittstelle mit dem BCB 6.0

Hier finden sie ein Beispiel , wie sie mit dem BCB 6.0 über die COM1 die Display- daten aus einem METEX Multimeter lesen können. Bei dem Multimeter M-4650CR
müssen die Signale DTR (+12V) und RTS (-12V) einen definierten Zustand haben. Sie werden als Spannungsquelle für die Optokoppler im Multimeter benötigt. Mit dem Beispielprogramm kann man mit einem Button die Displaydaten aus dem Multimeter auslesen.

Schnittstellenparameter METEX M-4650CR :
Baudrate :
1200 Bd
Parität      : keine
Datenbits : 7 Bit ASCII
Stoppbits  : 2 Bits

Sendecodes:
M -
DMM sendet gespeicherte Daten
C  - DMM löscht alle Daten
D  - Displaydaten senden

Format des Datenworts , was das Multimeter sendet :

1

2

3

4

5

6

7

8

9

10

11

12

13

14

A

C

-

1

.

8

8

7

 

 

V

 

 

CR

 

 

 

0

0

.

1

2

3

M

O

h

m

CR

Quellcode : Headerdatei :

//---------------------------------------------------------------------------
#ifndef dmmH
#define dmmH
//---------------------------------------------------------------------------
#include <Classes.hpp>
#include <Controls.hpp>
#include <StdCtrls.hpp>
#include <Forms.hpp>
//---------------------------------------------------------------------------
class TForm1 : public TForm
{
__published:// Von der IDE verwaltete Komponenten
       TMemo *Memo1;
       TButton *Button1;
       TLabel *Label1;
       void __fastcall FormClose(TObject *Sender, TCloseAction &Action);
       void __fastcall Button1Click(TObject *Sender);
private:// Anwender-Deklarationen
       HANDLE hSerial;        // Handle auf Objekt
       COMMTIMEOUTS TOutNeu, TOutAlt;        
public:// Anwender-Deklarationen
       __fastcall TForm1(TComponent* Owner);
};
//---------------------------------------------------------------------------
extern PACKAGE TForm1 *Form1;
//---------------------------------------------------------------------------
#endif
 

Quellcode Hauptprogramm :

//---------------------------------------------------------------------------
// Beispielprogramm : Meßwert von Multimeter Metex M-4650CR über RS232 lesen.
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include "dmm.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
       : TForm(Owner)
{
       DCB myCom;     // Struktur definieren
       hSerial = NULL;
       // Com - Port öffnen
       hSerial = CreateFile( "COM1",
                               GENERIC_READ | GENERIC_WRITE,
                               0,
                               0,
                               OPEN_EXISTING,
                               0,
                               0 );
       if ( hSerial == NULL ) // Fehlerabfrage
       {
         Application->MessageBox( "Fehler", "Fehler: Schnittstelle", MB_OK );
         Close();
       }
       // Timeout bearbeiten
       GetCommTimeouts( hSerial, &TOutAlt );  // Alte Einstellung speichern
       TOutNeu.ReadTotalTimeoutConstant   = 100; // Angabe ms
       TOutNeu.ReadTotalTimeoutMultiplier = 0;  // Lese Multiplikator in ms
       TOutNeu.WriteTotalTimeoutMultiplier = 0; // Schreibe Multiplikator
       TOutNeu.WriteTotalTimeoutConstant  = 0;
       SetCommTimeouts( hSerial, &TOutNeu );  // Neue Werte setzen

       myCom.DCBlength = sizeof(DCB);         // Speicherplatz schaffen
       GetCommState( hSerial, &myCom );       // Aktuelle Einstellung laden
       BuildCommDCB("1200,N,7,2", &myCom );   // Neue Werte einstellen
       myCom.fDtrControl = DTR_CONTROL_DISABLE;
       myCom.fRtsControl = RTS_CONTROL_DISABLE;
       SetCommState( hSerial, &myCom );       // Werte setzen
       EscapeCommFunction( hSerial, SETDTR | CLRRTS );  // RTS & DTR einschalten
}
//---------------------------------------------------------------------------
void __fastcall TForm1::FormClose(TObject *Sender, TCloseAction &Action)
{
   SetCommTimeouts( hSerial, &TOutAlt );   // Alten Timeout wieder herstellen
   CloseHandle( hSerial );         // Schnittstelle schliesen
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
       char cD = 'D';
       char szBuff[14];
       int nCount = 0;
       DWORD dwRead = 0;

       TransmitCommChar( hSerial, cD ); // Displaydaten abfragen
       Sleep(500);    // Warten aufs Multimeter

       while( dwRead == 0 )
       {  // Schnittstelle abfragen, ob Daten vorhanden
           ReadFile( hSerial, szBuff, 14, &dwRead, NULL );
           Application->ProcessMessages();
           nCount++;
           if ( nCount > 50 )
           {
               Memo1->Lines->Add( "Fehler : Timeout!!" );
               break;
           }
           Sleep(10);
       };

       Memo1->Lines->Add(szBuff);
}
//---------------------------------------------------------------------------

Download Quellcode : dmm.zip

Weitere Quellen :
Serial Communication with Borland C++ Builder

[Home] [English] [Informationen] [Downloads] [Buchtipps] [Autor] [Links]