Witam.. mam problem dot komunikacji z telefonem poprzez rs232.
podsluchalem ruch podczas laczenia z telefonem za pomoca hyperterminal..
jednak wynik jest zupelnie rozny od uzyskanego przeze mnie... ;|
wiadomo, ze z modemem (telefonem) komunikujemy sie za pomoca komend AT.
czyli wysylam np:
AT
otrzymuje
OK
i zaczyna sie problem.. ;/
mam wrazenie ze wysylam znaki AT w zupelnie inny sposob niz wysyla to hyperterminal..
ps. programuje w builder c++. ale wystarczy mi pomoc w c,c++,pascal itd..
kod z ksiazki (transmit):
w unit.h dodane biblioteki:
#include <Classes.hpp>
#include <Controls.hpp>
#include <StdCtrls.hpp>
#include <Forms.hpp>
#include <Buttons.hpp>
#include <ComCtrls.hpp>
#include <Dialogs.hpp>
#include <ExtCtrls.hpp>
a w sekcji private: int __fastcall TForm1::Close_Comm(HANDLE hCommDev);
w ten sposob transmituje literke po literce..
probowalem tez calosciowo..
---------
moze ktos pomoze? dopiero zaczynam zabawy z winapi, wiec.. prosze o wyrozumialosc.. z obsluga com tez.. ;p wlasnie wydrukowalem 140 stron i zabieram sie do lektury.. jednak.. za kazda pomoc bede wdzieczny!
zadna z podanych wyzej wersji nie dziala niestety.. ;|
========
edit
========
czy moze ktos lopatologicznie wytlumaczyc mi na czym polega parzystosc bitowa, bity stopu itd?
bo srednio to rozumiem i korzystam z gotowych konfiguracji
dodam, iz program ma komunikowac sie z telefonem (com, usb, irda, bt).. na szczescie wszystkie te moduly instaluja sie autiomatycznie na porrcie COM
i sa z jego poziomu dostepne.
podsluchalem ruch podczas laczenia z telefonem za pomoca hyperterminal..
jednak wynik jest zupelnie rozny od uzyskanego przeze mnie... ;|
wiadomo, ze z modemem (telefonem) komunikujemy sie za pomoca komend AT.
czyli wysylam np:
AT
otrzymuje
OK
i zaczyna sie problem.. ;/
mam wrazenie ze wysylam znaki AT w zupelnie inny sposob niz wysyla to hyperterminal..
ps. programuje w builder c++. ale wystarczy mi pomoc w c,c++,pascal itd..
kod z ksiazki (transmit):
//---------------------------------------------------------------------------
#include <vcl.h>
#include <stdio.h>
#pragma hdrstop
#pragma package(smart_init)
#pragma resource "*.dfm"
#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
HANDLE hCommDev; // identyfikator portu
LPCTSTR lpFileName; // przechowuje nazwę portu
DCB dcb; // struktura kontroli portu szeregowego
int __fastcall TForm1::Close_Comm(HANDLE hCommDev)
{
CloseHandle(hCommDev);
return TRUE;
}
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button5Click(TObject *Sender)
{
Close_Comm(hCommDev);
Application->Terminate();
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button4Click(TObject *Sender)
{
lpFileName = "COM3";
hCommDev = CreateFile(lpFileName, GENERIC_READ | GENERIC_WRITE,
0, NULL, OPEN_EXISTING, 0, NULL);
if (hCommDev != INVALID_HANDLE_VALUE) // sprawdza, czy port jest
// otwarty prawidłowo
{
dcb.DCBlength = sizeof(dcb);
GetCommState(hCommDev, &dcb);
dcb.BaudRate=CBR_19200;
dcb.Parity = ODDPARITY; // ustawienie parzystości
dcb.StopBits = ONESTOPBIT; // bity stopu
dcb.ByteSize = 7; // bity danych
//-przykładowe ustawienia flag sterujących DCB-
dcb.fParity = TRUE; // sprawdzanie parzystości
dcb.fDtrControl = DTR_CONTROL_DISABLE;
dcb.fRtsControl = RTS_CONTROL_DISABLE;
dcb.fOutxCtsFlow = FALSE;
dcb.fOutxDsrFlow = FALSE;
dcb.fDsrSensitivity = FALSE;
dcb.fAbortOnError = FALSE;
dcb.fOutX = FALSE;
dcb.fInX = FALSE;
dcb.fErrorChar = FALSE;
dcb.fNull = FALSE;
SetCommState(hCommDev, &dcb);
}
else
{
switch ((int)hCommDev)
{
case IE_BADID:
MessageBox(NULL, "Niewłaściwa nazwa portu lub port jest"
" aktywny.", "Błąd !", MB_OK);
break;
};
}
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
if (hCommDev > 0)
TransmitCommChar(hCommDev, 'A');
else
MessageBox(NULL, "Port nie został otwarty do transmisji.",
"Błąd !", MB_OK);
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button2Click(TObject *Sender)
{
if (hCommDev > 0)
TransmitCommChar(hCommDev, 'T');
else
MessageBox(NULL, "Port nie został otwarty do transmisji.",
"Błąd !", MB_OK);
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button3Click(TObject *Sender)
{
if (hCommDev > 0)
TransmitCommChar(hCommDev, char(13));
else
MessageBox(NULL, "Port nie został otwarty do transmisji.",
"Błąd !", MB_OK);
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button6Click(TObject *Sender)
{
if (hCommDev > 0)
TransmitCommChar(hCommDev, char(10));
else
MessageBox(NULL, "Port nie został otwarty do transmisji.",
"Błąd !", MB_OK);
}
//---------------------------------------------------------------------------
w unit.h dodane biblioteki:
#include <Classes.hpp>
#include <Controls.hpp>
#include <StdCtrls.hpp>
#include <Forms.hpp>
#include <Buttons.hpp>
#include <ComCtrls.hpp>
#include <Dialogs.hpp>
#include <ExtCtrls.hpp>
a w sekcji private: int __fastcall TForm1::Close_Comm(HANDLE hCommDev);
w ten sposob transmituje literke po literce..
probowalem tez calosciowo..
#define cbOutQueue 64 //rozmiar bufora danych wyjściowych
#define cbInQueue 64 //rozmiar bufora danych wejściowych
LPCTSTR query = "AT"; // przykładowe zapytanie
char Buffer_O[cbOutQueue]; // bufor danych wyjściowych
char Buffer_I[cbInQueue]; // bufor danych wejściowych
DWORD Number_Bytes_Read; // Number Bytes to Read - liczba bajtów
// do czytania
HANDLE hCommDev; // identyfikator portu
LPCTSTR lpFileName; // wskaźnik do nazwy portu
DCB dcb; // struktura kontroli portu szeregowego
DWORD fdwEvtMask; // informacja o aktualnym stanie transmisji
COMSTAT Stat; // dodatkowa informacja o zasobach portu
DWORD Errors; // reprezentuje typ ewentualnego błędu
int __fastcall Write_Comm(HANDLE hCommDev, LPCVOID lpBuffer,
DWORD nNumberOfBytesToWrite)
{
DWORD NumberOfBytesWritten;
EscapeCommFunction(hCommDev, SETRTS);
if (WriteFile(hCommDev, lpBuffer,
nNumberOfBytesToWrite, &NumberOfBytesWritten, NULL) > 0)
{
WaitCommEvent(hCommDev, &fdwEvtMask, NULL);
EscapeCommFunction(hCommDev, CLRRTS);
return TRUE;
}
else
return FALSE;
}
void __fastcall TForm1::ConnectClick(TObject *Sender)
{
lpFileName="COM3";
hCommDev = CreateFile(lpFileName, GENERIC_READ | GENERIC_WRITE,
0, NULL, OPEN_EXISTING, 0, NULL);
if (hCommDev != INVALID_HANDLE_VALUE) // sprawdza, czy port jest otwarty prawidłowo
{
SetupComm(hCommDev, cbInQueue, cbOutQueue);
dcb.DCBlength = sizeof(dcb); // aktualny rozmia struktury DCB
GetCommState(hCommDev, &dcb);
dcb.BaudRate=atol(("CBR_"+Form1->speed->Text).c_str()); // wybór prędkości transmisji
//--parametry komunikacyjne-------
dcb.Parity = NOPARITY; // ustawienie parzystości
dcb.StopBits = ONESTOPBIT; // bity stopu
dcb.ByteSize = 8; // bity danych
//--przykładowe ustawienia znaczników sterujących DCB----
dcb.fParity = TRUE; // sprawdzanie parzystości
dcb.fDtrControl = DTR_CONTROL_ENABLE; // sygnał DTR stale
// aktywny
dcb.fRtsControl = RTS_CONTROL_DISABLE;// RTS - stan
// nieaktywny
dcb.fOutxCtsFlow = FALSE;
dcb.fOutxDsrFlow = FALSE;
dcb.fDsrSensitivity = FALSE;
dcb.fAbortOnError = FALSE;
dcb.fOutX = FALSE;
dcb.fInX = FALSE;
dcb.fErrorChar = FALSE;
dcb.fNull = FALSE;
SetCommState(hCommDev, &dcb);
GetCommMask(hCommDev, &fdwEvtMask);
SetCommMask(hCommDev, EV_TXEMPTY);
}
else
{
switch ((int)hCommDev)
{
case IE_BADID:
MessageBox(NULL, "Niewłaściwa nazwa portu lub port jest aktywny.", "Błąd", MB_OK);
break;
};
}
//FILE *pstream; // wskaźnik do pliku
if (hCommDev > 0) // powtórnie sprawdza czy port jest otwarty
{
strcpy(Buffer_O, query);
Write_Comm(hCommDev, Buffer_O, strlen(Buffer_O));
}
}
---------
moze ktos pomoze? dopiero zaczynam zabawy z winapi, wiec.. prosze o wyrozumialosc.. z obsluga com tez.. ;p wlasnie wydrukowalem 140 stron i zabieram sie do lektury.. jednak.. za kazda pomoc bede wdzieczny!

zadna z podanych wyzej wersji nie dziala niestety.. ;|
========
edit
========
czy moze ktos lopatologicznie wytlumaczyc mi na czym polega parzystosc bitowa, bity stopu itd?


dodam, iz program ma komunikowac sie z telefonem (com, usb, irda, bt).. na szczescie wszystkie te moduly instaluja sie autiomatycznie na porrcie COM
