Avatar billede baltazar_ Nybegynder
26. oktober 2002 - 12:47 Der 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.
Avatar billede segmose Nybegynder
28. oktober 2002 - 16:06 #1
har du et link?
Avatar billede herman01753 Nybegynder
05. november 2002 - 23:10 #2
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;
       
        //set paritet
        if (paritet >= 0 && paritet <= 2)
            dcb.Parity = paritet;
        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
//*************************************************
{

    DWORD byteRead,dwBytesRead;

    dwBytesRead = inWatingBuffer();
    ReadFile(HComdev,rxPtr,dwBytesRead,&byteRead,0);
    return byteRead;

}

//*************************************************
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.
//*************************************************
{

    char rxBuf[1];
    DWORD byteRead;
   
    ReadFile(HComdev,rxBuf,1,&byteRead,0);
    return rxBuf[0];

}
Avatar billede soepro Nybegynder
07. november 2002 - 12:45 #3
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.)
Avatar billede herman01753 Nybegynder
11. november 2002 - 12:04 #4
desværre, jeg ha  ikke arbejdet med den
Avatar billede herman01753 Nybegynder
11. november 2002 - 16:30 #5
undskyld, jeg havde glemt at det var et svar... håber satdig duu gir point for det :-)
Avatar billede herman01753 Nybegynder
11. november 2002 - 16:56 #6
hvis du vil vide mere om hvordan man programerer en printerport, er der et link her til microsofts developer hjælp, omkring dette emne :-)
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/graphics/hh/graphics/provider_897r.asp
Avatar billede Ny bruger Nybegynder

Din løsning...

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.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester