Avatar billede mickni33 Nybegynder
10. marts 2003 - 16:00 Der er 11 kommentarer og
1 løsning

plc kommunikation

jeg har tilsluttet en plc til min serialport.
plc'eren står og klikker og sender signaler med et sekund interval.
Men jeg kan ikke få noget signal vist på skærmen .
Porten er åben. så der burde da komme et eller andet  ud på min skærm
eller hva ??
er der noget jeg har glemt, er nybegynder med dette her:-)

Her er koden jeg bruger dog kun open() og recieve();

#include <iostream.h>
#include <conio.h>

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

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

//*************************************************
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;

}

//*************************************************

//---------------------------------------------------------------------------
#pragma argsused
int main(int argc, char* argv[])
{     
        char* array;
        serialCom* sc=new serialCom;
       
if(sc->open(1,9600,7,2,1)==1)
        cout<<"er aaben :"<<endl;
        else
        cout<<"ikke aaben"<<endl;
          getch();

        while(1){
          int modtag=sc->recive(array);
          if(modtag != 0){
            cout<<"data="<<modtag<<endl;
            getch();
        }
                  }
        return 0;
}
Avatar billede segmose Nybegynder
10. marts 2003 - 16:25 #1
open(1,9600,7,2,1)
du er 100% på at du kun bruger 7 databit???
Avatar billede mickni33 Nybegynder
10. marts 2003 - 16:28 #2
jeps :-(
Avatar billede segmose Nybegynder
10. marts 2003 - 16:33 #3
Prøv at åbne hyperterminal hvis du køre windows og test din plc derfra eller jeg kan sende dig et (antikt) dos program der kan åbne en komport og se hvad der sker.
Avatar billede mickni33 Nybegynder
10. marts 2003 - 16:40 #4
HYPERTERMINAL :-)
Hva er det ? og hvordan åbner man det ?
Du må meget gerne sende det antikke program
mickni33@hotmail.com
Avatar billede serverservice Praktikant
10. marts 2003 - 16:50 #5
hvilken plc, har du ikke softwaren til den?
Avatar billede mickni33 Nybegynder
10. marts 2003 - 17:02 #6
jo, jeg spørger lige plc manden..(det er idec plc)
Avatar billede serverservice Praktikant
10. marts 2003 - 17:07 #7
normalt hører der et program med til at skabe kommunikation ml pcén og plc samt et til at konvertere/læse selve programsoftwaren på plcen.
Når dit komm. program er konfigureret rigtigt burde du kunne logge på og læse vha softwaren.
Avatar billede serverservice Praktikant
10. marts 2003 - 17:13 #8
Til mange plcér er det hele i eet program. det er ikke nødvendigt at programmere sig til forbindelse imellem pc og plc.
Avatar billede mickni33 Nybegynder
10. marts 2003 - 17:15 #9
jamen, jeg sidder og laver sjov og ballade så jeg skal programmerer mig til forbindelsen. :-)
Avatar billede serverservice Praktikant
10. marts 2003 - 20:07 #10
pøj med det så
Avatar billede serverservice Praktikant
10. marts 2003 - 21:20 #11
lige en oplysning der skal 8 bit til en byte!
Avatar billede mickni33 Nybegynder
26. marts 2003 - 10:06 #12
Kunne ikke modtage data fra plc fordi det ikke var det rigtige kabel der sad i . Kablet kunne kun sende data til plc'en
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