COM PORT



  • Halli hallo allterseits
    ich hab mal ein paar fragen zum COM Port Programierung
    1. Liegt am COM ausgängen immer 10 V an weil an meine TXD ausgang dauerhaft 10V anliegen.
    2.
    wie setzte ich am die Klasse am FAq "Ströme lenken" von AJ richtig ein.
    ich hab die so eingesetz aber ich glaube ich hab das voll Falsch eingesetz.
    es kommt bei mir immer ein Fehler(hab die so um gebaut das es mir dann ein Fehler zurück gibt).
    Wär Nett wenn jemand mir ein bisl unetr die arme grefien würde!!!:-)

    Datei cport.c

    ....
    
    int main()
    
    {
     ComPort comp,comp2,com3,com4,com5,com6;
    
     int port =1;
     comp.OpenCom(port);
     comp2.SetTXD(1);
     comp2.SetTXD(0);
     Sleep(1000);
     comp.CloseCom();
     return 0;
    
    }
    

    das is die Klasse

    #include "cport.h"
    #include <windows.h>
    #include <iostream>
    
    using namespace std;
    ComPort::ComPort(void)
    {
       hCom=INVALID_HANDLE_VALUE;
    }
    
    ComPort::~ComPort(void)
    {
       CloseCom();
    }
    
    HANDLE ComPort::GetHCom(void)
    {
       return hCom;
    }
    
    int ComPort::OpenCom(int portnr)
    {
       DCB dcb;
       BOOL res;
    
       if(portnr<0||portnr>MAX_PORT)
       {
          return(WRONG_PORT);
        }
       hCom = CreateFile(GetCP(portnr-1), GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, 0, NULL);
       if(hCom==INVALID_HANDLE_VALUE)
          return(OPEN_ERR);
    
       res=GetCommState(hCom, &dcb);
       if(!res)
       {
          CloseCom();
          return(STATE_ERR);
       }
    
       return(COMM_OK);
    }
    
    void ComPort::CloseCom()
    {
       CloseHandle(hCom);
       hCom=INVALID_HANDLE_VALUE;
    }
    
    BOOL ComPort::SetUART(DCB *dcb)
    {
       if(hCom!=INVALID_HANDLE_VALUE)
          return(SetCommState(hCom, dcb));
       else
          return(false);
    }
    
    BOOL ComPort::SetUART(long baud, char bytes, char parity, char stopbit)
    {
       if(hCom!=INVALID_HANDLE_VALUE)
       {
          DCB dcb;
    
          dcb.BaudRate=baud;
          dcb.ByteSize=bytes;
          dcb.Parity=parity;
          dcb.StopBits=stopbit;
    
          return(SetCommState(hCom, &dcb));
       }
       else
          return(false);
    }
    
    BOOL ComPort::SetTimeouts(COMMTIMEOUTS *timeouts)
    {
       if(hCom!=INVALID_HANDLE_VALUE)
          return(SetCommTimeouts(hCom, timeouts));
       else
          return(false);
    }
    
    BOOL ComPort::SetTimeouts(long interval, int multiplier, int constant)
    {
       if(hCom!=INVALID_HANDLE_VALUE)
       {
          COMMTIMEOUTS timeouts;
    
          timeouts.ReadIntervalTimeout=interval;
          timeouts.ReadTotalTimeoutMultiplier=multiplier;
          timeouts.ReadTotalTimeoutConstant=constant;
    
          return(SetCommTimeouts(hCom, &timeouts));
       }
       else
          return(false);
    }
    
    void ComPort::SetDTR(int kz)
    {
       if(hCom!=INVALID_HANDLE_VALUE)
          if(kz==ON)
             EscapeCommFunction(hCom, SETDTR);  // setzen
          else
             EscapeCommFunction(hCom, CLRDTR);  // Loeschen  
    }
    
    void ComPort::SetRTS(int kz)
    {
       if(hCom!=INVALID_HANDLE_VALUE)
          if(kz==ON)
             EscapeCommFunction(hCom, SETRTS);  // setzen
          else
             EscapeCommFunction(hCom, CLRRTS);  // Loeschen      
    }
    
    void ComPort::SetTXD(int kz)
    {
       if(hCom!=INVALID_HANDLE_VALUE)
       {
          if(kz==ON)
             EscapeCommFunction(hCom, SETBREAK);  // setzen
          else
             EscapeCommFunction(hCom, CLRBREAK);  // Loeschen
        }
        else
        cout<<"Fehler"<<endl;     
    
    }
    
    void ComPort::SetAll(int kz)
    {
       SetAll(kz, kz, kz);
    }
    
    void ComPort::SetAll(int dtr, int rts, int txd)
    {
       SetDTR(dtr);
       SetRTS(rts);
       SetTXD(txd);
    }
    
    BOOL ComPort::GetCTS(void)
    {
       if(hCom!=INVALID_HANDLE_VALUE)
       {
          DWORD COMStatus;
    
          GetCommModemStatus(hCom, &COMStatus);  
          if(COMStatus & MS_CTS_ON)
             return ON;
    
          return OFF;
       }
       else
          return OFF;
    }
    
    BOOL ComPort::GetDSR(void)
    {
       if(hCom!=INVALID_HANDLE_VALUE)
       {
          DWORD COMStatus;
    
          GetCommModemStatus(hCom, &COMStatus);  
          if(COMStatus & MS_DSR_ON)
             return ON;
    
          return OFF;
       }
       else
          return OFF;
    }
    
    unsigned long ComPort::Send(const char *text)
    {
       if(hCom!=INVALID_HANDLE_VALUE)
       {
          unsigned long sent;
    
          WriteFile(hCom, text, strlen(text), &sent, NULL);
    
          return(sent);
       }
       else
          return(0);
    }
    
    unsigned long ComPort::Receive(char *text, size_t maxsize)
    {
       if(hCom!=INVALID_HANDLE_VALUE)
       {
          unsigned long received;
    
          ReadFile(hCom, text, maxsize, &received, NULL);
          text[received]=0;
    
          return(received);
       }
       else
          return(0);
    }
    
    const char *ComPort::GetCP(int index)
    {
       static const char *CP[]={"COM1","COM2","COM3","COM4","COM5","COM6"};
    
       if(index>-1&&index<ComPort::MAX_PORT)
          return(CP[index]);
       else
          return("");
    }
    

    mfg freaki



  • comp.OpenCom(port);
     comp2.SetTXD(1);
    

    😮

    Eine Instanz (comp) mit COM1 initialisieren und eine andere, nicht initialisierte (comp2) benutzen - was erwartest Du denn Anderes als einen Fehler ("Fehler" in ::SetTXD)?

    Blackbird



  • Danke schön an mr unbekannt 🙂
    es funz super

    MFG freaki


Anmelden zum Antworten