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