Serial Port - jak wysłać/odebrać dane?

0

Dobry wieczór.

Przepraszam, że po raz kolejny podnoszę podobny temat, ale proszę, zrozumcie że jestem w rozpaczliwej sytuacji. Nie potrafię programować. Nie rozumiem programowania. Nie chcę programować, natomiast mój szef najwyraźniej uparł się aby zrobić ze mnie programistę. Do tego stopnia, że kiedy nie udało mi się ukończyć programu którego napisania ode mnie zażądał, wysłał mnie na bezpłatny urlop i zakazał wracać bez działającego programu. Próbowałem go napisać. Czytałem fora, próbowałem sam. Bezskutecznie. Coś napisałem, korzystając z tego co znalazłem w internecie, ale wciąż jestem daleki od ukończenia.

Co ma robić program? W dużym skrócie ma pobrać datę systemową z komputera w formacie YYMMDDHHMMSS (string), później tego stringa odwrócić, dodać na jego początek i koniec dwa znaki specjalne, i wysłać go na COM1.
Drugi COM (w moim przypadku będą to dwa COM-y na tym samym komputerze połączone kablem) ma tego stringa odebrać i wypisać na ekranie. I tyle.

To mi się udało napisać:

 
#include "stdafx.h"
#include <Windows.h>
#include <time.h>
#include <stdio.h>
#include <iostream>
#include <string.h>
#include <ctime>
#include <sstream>
#include <cstdlib>

using namespace std;

//deklaracja zmiennych
static DCB dcb;
static HANDLE hNumPort1;
static HANDLE hNumPort2;
static char lpBuffor_read[33], lpBuffor_write[33];
static DWORD RS_ile;
string czas;


int _tmain(int argc, _TCHAR* argv[])
{

//otwarcie COM1
hNumPort1 = CreateFile(TEXT("COM1"), GENERIC_WRITE |
GENERIC_READ, 0, NULL,
OPEN_EXISTING, 0, NULL);

//otwarcie COM2
hNumPort2 = CreateFile(TEXT("COM2"), GENERIC_WRITE |
GENERIC_READ, 0, NULL,
OPEN_EXISTING, 0, NULL);
	
//Ustawienie parametrow portu
dcb.DCBlength = sizeof(dcb);

dcb.BaudRate = CBR_9600;
dcb.fParity = TRUE;
dcb.Parity = EVENPARITY;
dcb.StopBits = ONESTOPBIT;
dcb.ByteSize = 7;

dcb.fDtrControl = DTR_CONTROL_ENABLE;
dcb.fRtsControl = RTS_CONTROL_ENABLE;

dcb.fOutxCtsFlow = FALSE;
dcb.fOutxDsrFlow = FALSE;
dcb.fDsrSensitivity = FALSE;
dcb.fAbortOnError = FALSE;
dcb.fOutX = FALSE;
dcb.fInX = FALSE;
dcb.fErrorChar = FALSE;
dcb.fNull = FALSE;

//Podlaczenie sie do portu COM1
SetCommState(hNumPort1, &dcb);

//Podlaczenie sie do portu COM2
SetCommState(hNumPort2, &dcb);

//Pobranie czasu i zamiana na string
time_t rawtime;
  struct tm * timeinfo;
  char buffer[80];

  time (&rawtime);
  timeinfo = localtime(&rawtime);

  strftime(buffer,80,"%y%m%d%I%M%S",timeinfo);
  string str(buffer);
	czas=str;
	cout<<czas;

//Pisanie do portu COM1
strcpy(lpBuffor_write, "test");// Niech to będzie przykładowe polecenie dla urządzenia
WriteFile(hNumPort1, lpBuffor_write, strlen(lpBuffor_write), &RS_ile, 0);


//Czytanie z portu COM2
ReadFile(hNumPort2, lpBuffor_read, 15, &RS_ile, 0);

//Zamkniecie portow
CloseHandle(hNumPort1);
CloseHandle(hNumPort2);

getchar();
  return 0;
}

I utknąłem. Proszę o pomoc. Nie wiem co dalej. Jak mam tego stringa odwrócić (umiem go wypisać), i co ważniejsze - nie wiem w jaki sposób wysłać go na COM1.
Wiem że dla doświadczonego programisty taki problem jest banalny, dla mnie niestety jest on nie do przejścia. A zależy od niego moja praca...

0

OK. Już wiem jak odwrócić tego stringa:

czas = string ( czas.rbegin(), czas.rend() );

Działa. Teraz tylko muszę zrobić coś, żeby to wysłać na port COM...

1 użytkowników online, w tym zalogowanych: 0, gości: 1