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