|
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); } //---------------------------------------------------------------------------
|