Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Wysłanie stringa na port COM

Ostatnio zmodyfikowano 2013-12-03 01:58
Autor Wiadomość
lz1
Temat założony przez niniejszego użytkownika
Wysłanie stringa na port COM
» 2013-12-02 19:17:24
Witam.

Mam ogromny problem. Muszę napisać program, który będzie pobierał czas z zegara systemowego, zamieniał go na stringa, następnie tego stringa odwracał, dodawał na jego początek i koniec dwa znaki specjalne: "☻" oraz "♥", a następnie w takiej postaci przesyłał go na port COM, tak aby można go było odczytać po drugiej stronie kabelka RS-232.
Oto co udało mi się napisać:

C/C++
// serial.cpp : Defines the entry point for the console application.
//

#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
//Device control block
static DCB dcb;
//Uchwyty do portu COM
static HANDLE hNumPort1;
static HANDLE hNumPort2;
//Tablice z danymi wysyłanymi i odbieranymi
static char lpBuffor_read[ 33 ], lpBuffor_write[ 33 ];
//Ile czego wysyłamy/odbieramy
static DWORD RS_ile;
string czas;



int _tmain( int argc, _TCHAR * argv[] )
{
   
   
    //otwarcie COM2 jako plik tekstowy
    hNumPort1 = CreateFile( TEXT( "COM2" ), GENERIC_WRITE |
    GENERIC_READ, 0, NULL,
    OPEN_EXISTING, 0, NULL );
   
    //otwarcie COM6 jako plik tekstowy
    hNumPort2 = CreateFile( TEXT( "COM6" ), GENERIC_WRITE |
    GENERIC_READ, 0, NULL,
    OPEN_EXISTING, 0, NULL );
   
    //Ustawienie parametrow portu
    dcb.DCBlength = sizeof( dcb );
   
    dcb.BaudRate = CBR_9600; //Predkosc transmisji
    dcb.fParity = FALSE; //Sprawdzanie parzystosci
    dcb.Parity = NOPARITY; //Ustawienie parzystosci
    dcb.StopBits = ONESTOPBIT; //Bity stopu
    dcb.ByteSize = 8; //Bity danych
   
    //Kontrola linii (sygnal aktywny/nieaktywny
    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 COM2
    SetCommState( hNumPort1, & dcb );
   
    //Podlaczenie sie do portu COM6
    SetCommState( hNumPort2, & dcb );
   
    //Pobranie czasu i zamiana na string
    time_t rawtime;
    struct tm * timeinfo;
    char buffer[ 80 ];
   
    time( & rawtime );
    timeinfo = localtime( & rawtime );
   
    //Zamienia czas na stringa. Format YYMMDDHHMMSS
    strftime( buffer, 80, "%y%m%d%H%M%S", timeinfo );
    string str( buffer );
    czas = str;
    // cout<<czas<<endl;
   
    //Odwrocenie stringa
    czas = string( czas.rbegin(), czas.rend() );
    cout << czas;
   
   
   
    //Pisanie do portu COM2
    strcpy( lpBuffor_write, "TEST" );
    WriteFile( hNumPort1, lpBuffor_write, strlen( lpBuffor_write ), & RS_ile, 0 );
   
   
    //Czytanie z portu COM6
    ReadFile( hNumPort2, lpBuffor_read, 15, & RS_ile, 0 );
   
    //Zamkniecie portow
    CloseHandle( hNumPort1 );
    CloseHandle( hNumPort2 );
   
    getchar();
    return 0;
}

Program działa o tyle, że przesyła wyraz "TEST" do COM-a, i widać go w hypertetminalu. Tyle że w funkcja pisząca do COM2 spodziewa się zmiennej typu char, na domiar złego te dwa znaki specjalne... Nie mam pojęcia jak je wstawić tak, żeby program je przyjął i przetransmitował.

Proszę o pomoc.
P-98103
pekfos
» 2013-12-02 19:29:20
string::c_str(), string::insert() i string::append().
P-98105
lz1
Temat założony przez niniejszego użytkownika
» 2013-12-02 19:55:46
A czy mógłbyś mi podpowiedzieć jak tego użyć w moim programie?
Wybacz proszę, że pytam o to, ale moja sytuacja jest dość rozpaczliwa. Nie jestem programistą, nie potrafię programować, nie rozumiem programowania. Niestety mój szef uznał widać inaczej i stwierdził że dopóki tego przeklętego programu nie napiszę, jestem na bezpłatnym urlopie... Męczę się z tym już od kilku dni i chyba utknąłem...
P-98110
pekfos
» 2013-12-02 20:36:04
Google? Podałem wszystkie potrzebne funkcje (w sumie wystarczą dwie z podanych). Wystarczy wyszukać.
P-98118
DejaVu
» 2013-12-03 01:58:40
P-98146
« 1 »
  Strona 1 z 1