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