Avatar billede bundgas Nybegynder
23. marts 2005 - 09:56 Der er 6 kommentarer

Udskrivning efter modtagelse af et bestemt tegn.

Sidder og bikser med et program med tre buffere hvor de to af dem
først skal udskrive når der er et bestemt tegn i bufferen.

eks.
if(Buffer1[0] == 0x3E)
        {
        sendeplc(ComPort2);
        cout << Temp1;
        optaellerTemp1 = 0;
        }
Håber der er nogen som kan hjælpe.
Avatar billede arne_v Ekspert
23. marts 2005 - 10:36 #1
Og hvad er spørgsmålet ?

Ovenstående kode tester om første tegn i Buffer1 er '>' og kalder sendplc og
udskriver Temp1 hvis det er
Avatar billede bundgas Nybegynder
23. marts 2005 - 11:00 #2
problemet er at den skal sende til bufferen og først udskrive den når > tegnet er modtaget. Det som den gør her at den kun udskriver > tegnet.
Avatar billede arne_v Ekspert
23. marts 2005 - 11:04 #3
Jeg tror at vi skal se lidt mere kode
Avatar billede bundgas Nybegynder
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++;
    }
}
Avatar billede bundgas Nybegynder
07. april 2005 - 10:38 #5
s
Avatar billede bundgas Nybegynder
07. april 2005 - 10:46 #6
d
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