Annonceindlæg fra Deloitte
23. marts 2005 - 11:07
#4
#include <stdio.h> #include <windows.h> #include <conio.h> #include <iostream> using namespace std; ///////// Pretypings //////// void SetTimeOut(HANDLE Port, int sec); void servo_setup(HANDLE Port1); void plc_setup(HANDLE Port2); void sendeservo(HANDLE Port); void modtageservo(HANDLE Port, char *Buf1); void sendeplc(HANDLE Port); void modtageplc(HANDLE Port, char *Buf2); DWORD Length, Dump; DCB dcb; char Buffer1[128], Buffer2[128], ioBuffer[128], Temp1[128], Temp2[128]; int DONE=0, in1, optaellerTemp1=0, optaellerTemp2=0; ///////// main //////////// int main(){ SetConsoleTitle("COM1 - COM2 Fylde"); HANDLE hConsole = GetStdHandle(STD_OUTPUT_HANDLE); HANDLE ComPort1 = CreateFile("COM1", GENERIC_READ | GENERIC_WRITE, 0, 0, OPEN_EXISTING, 0, 0); if(ComPort1 == INVALID_HANDLE_VALUE) printf("Failed to open port nr 1\n"); HANDLE ComPort2 = CreateFile("COM2", GENERIC_READ | GENERIC_WRITE, 0, 0, OPEN_EXISTING, 0, 0); if(ComPort2 == INVALID_HANDLE_VALUE) printf("Failed to open port nr 2\n"); servo_setup(ComPort1); plc_setup(ComPort2); Buffer1[0]='\0'; Buffer2[0]='\0'; while(!DONE){ modtageservo(ComPort1, Buffer1); if(Buffer1[0] != '\0') { SetConsoleTextAttribute(hConsole, FOREGROUND_RED | FOREGROUND_INTENSITY); if(Buffer1[0] == 0x3E) { sendeplc(ComPort2); cout << Temp1; optaellerTemp1 = 0; } SetConsoleTextAttribute(hConsole, FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE); } if(kbhit()) { if ((in1 = getch()) == '\x1B') DONE = 1; else { /*ioBuffer[0] = in1; cout << ioBuffer[0]; sende(ComPort1, ioBuffer); ioBuffer[0] = '\0';*/ } } modtageplc(ComPort2, Buffer2); if(Buffer2[0] != '\0') { SetConsoleTextAttribute(hConsole, FOREGROUND_GREEN | FOREGROUND_INTENSITY); if(Buffer2[0] -1 == 0x3E) { sendeservo(ComPort1); cout << Temp2; optaellerTemp2 = 0; } SetConsoleTextAttribute(hConsole, FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE); } Buffer1[0]='\0'; Buffer2[0]='\0'; } } /////////// servo //////////// void servo_setup(HANDLE Port1) { GetCommState(Port1, &dcb); dcb.BaudRate = 9600; dcb.ByteSize = 8; dcb.Parity = 0; dcb.StopBits = ONESTOPBIT; dcb.fRtsControl = RTS_CONTROL_HANDSHAKE; dcb.fOutxCtsFlow = 1; SetCommState(Port1, &dcb); SetTimeOut(Port1, 1); } /////////// plc ////////////// void plc_setup(HANDLE Port2) { GetCommState(Port2, &dcb); dcb.BaudRate = 4800; dcb.ByteSize = 8; dcb.Parity = 0; dcb.StopBits = ONESTOPBIT; dcb.fRtsControl = RTS_CONTROL_HANDSHAKE; dcb.fOutxCtsFlow = 1; SetCommState(Port2, &dcb); SetTimeOut(Port2, 1); } ///////// TimeOut //////////// void SetTimeOut(HANDLE Port, int sec) { COMMTIMEOUTS commtimeouts; GetCommTimeouts(Port, &commtimeouts); commtimeouts.ReadIntervalTimeout = MAXDWORD; commtimeouts.ReadTotalTimeoutMultiplier = 0; commtimeouts.ReadTotalTimeoutConstant = 0; SetCommTimeouts(Port, &commtimeouts); } ///////// Sende Servo /////////////// void sendeservo(HANDLE Port) { WriteFile(Port, Temp2, optaellerTemp2, &Dump, 0); } ///////// Sende PLC /////////////// void sendeplc(HANDLE Port) { WriteFile(Port, Temp1, optaellerTemp1, &Dump, 0); } //////// Modtage Servo ///////////// void modtageservo(HANDLE Port, char *Buf1) { ReadFile(Port, Buf1, 1, &Length, 0); if(Buf1 != '\0') { Temp1[optaellerTemp1] = *Buf1; optaellerTemp1++; } } //////// Modtage PLC ///////////// void modtageplc(HANDLE Port, char *Buf2) { ReadFile(Port, Buf2, 1, &Length, 0); if(Buf2 != '\0') { Temp2[optaellerTemp2] = *Buf2; optaellerTemp2++; } }