26. oktober 2002 - 12:47Der er
5 kommentarer og 1 løsning
seriel port ( codeguru )
Hejsa,
Er der nogen der kan hjælpe mig med en funktion til en consol apl. der kan læse en seriel port. Jeg ved at der findes en seriel class fra codeguru ( der den ) men jeg ved ikke hvordan jeg kan omskrive den. Dertil er jeg for ny i c++. Formålet med den er at se om noget elektronik jeg har lavet ( a/d converter ) overhovedet giver et output.
her er koden til en klasse, hvor du kan få adgang til din comport
håber det er en hjælp til header: -------------------------------------------------------------------------------
class serialCom { public: bool open(int port,int baud,int dataBit,int paritet,int stopBit); bool close(); bool send(char *sendPtr,int antal); int recive(char *rxPtr); int inWatingBuffer(); char reciveOneChar(); private: HANDLE HComdev; //Def af handle til pc DWORD dwErrorFlags; COMSTAT ComStat; DCB dcb; //Def af variabel til DCB structen };
til cpp sil ------------------------------------------------------------------------------- //************************************************************************* bool serialCom::open(int port,int baud,int dataBit,int paritet,int stopBit) // Åben en seriel port for kommunikation. // Input: // port : Comport nummer 1 eller 2 // baud : Hastigheden for komnikationen 9600,19200 eller 38400 // dataBit : Antal bit pr byte 7 eller 8 // paritet : Paritets check 0 = no paritet 1 = ulige 2 = lige // stopBit : Antallet af stop bit 1 eller 2 // Output: // retunere true : Hvis porten kunne åbnes // retunere false : Hvis porten ikke kunne åbnes. Når der retuneres false skyldes // det ofte at et andet program bruger den serielle port //************************************************************************* { char portstr[5] = "COM ";
portstr[3] = 48 + port ;
HComdev = CreateFile(portstr, //Navnet på den port der skal åbnes(COMX) GENERIC_READ | GENERIC_WRITE, //read / write types NULL, 0, OPEN_EXISTING, 0, 0);
if (HComdev == INVALID_HANDLE_VALUE) return false; else { //sæt hastighed mm op GetCommState(HComdev,&dcb); dcb.DCBlength = sizeof(DCB); //set baud rate if (baud == 9600) dcb.BaudRate = CBR_9600; else if (baud == 19200) dcb.BaudRate = CBR_19200; else if (baud == 38400) dcb.BaudRate = CBR_38400; else return false;
// set databit if (dataBit == 7 || dataBit == 8) dcb.ByteSize = dataBit; else return false;
if (stopBit == 1) dcb.StopBits = ONESTOPBIT; else if (stopBit == 2) dcb.StopBits = TWOSTOPBITS; else return false; SetCommState(HComdev,&dcb);
return true; } } //****************************************** bool serialCom::close() // luk forbindelsen // reunere true hvis luk gik godt ellers false //****************************************** { if (CloseHandle(HComdev)) return true; else return false; }
//************************************************* bool serialCom::send(char *sendPtr,int antal) // send et antal karaktere på en seriel port. // Husk porten skal være åben inden send kan bruges // Input: // *sendPtr : Er en pointer til den char string der skal sendes // antal : Er det antal char der skal sendes // Output: // retunere true : Hvis afsendels gik godt // retunere false : Hvis der ikke blev sendt noget. Når der retuneres false skyldes // det ofte at porten ikke er åbnet //************************************************* { DWORD dwBytesWritten;
if (WriteFile(HComdev,sendPtr,antal,&dwBytesWritten,0)) return true ; else return false;
} //************************************************* int serialCom::inWatingBuffer() //Undersøg antallet af karaktere der er i receive buffer // Husk porten skal være åben inden send kan bruges // Output: // retunere antallet af karaktere der er klar i recive buffer //************************************************* { ClearCommError(HComdev, &dwErrorFlags, &ComStat ); return ComStat.cbInQue ; } //************************************************* int serialCom::recive(char *rxPtr) // Henter de karaktere der er i receive buffer. Bemærk hvis der ingen karaktere // er i recive buffer vil funktionen først retunere når der kommer en karakter i // recive bufferen // Input: // *rxPtr : En pointer til en char array hvor data skal placeres // Output: // Retunere det antal karaktere der er overført til rxPtr //************************************************* {
//************************************************* char serialCom::reciveOneChar() //læser 1 karakter fra receive buffer. Bemærk hvis der ingen karaktere // er i recive buffer vil funktionen først retunere når der kommer en karakter i // recive bufferen //Output // Retunere den læste karakter. //************************************************* {
herman01753 >> FEDT - Har du evt. noget tilsvarende til LPT-porten - jeg har behov for direkte at kommunikere med den, da jeg har lavet min egen printerstyring. (Specialprinter m/cutter og kasseskuffe udskydning.)
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.