Skocz do zawartości
marlutowski

C++/winapi - Problem Z Transmisją Po Rs232

Rekomendowane odpowiedzi

Mam problem z transmisją po RS232. Staram się to zrobić w Builderze, przy użyciu WINAPI

 

Port ładnie sie otwiera i zamyka, ale nic nie udaje się mi przez niego wysłać

 

 

/---------------------------------------------------------------------------#include <vcl.h>#include <stdio.h>#pragma hdrstop#include "Unit1.h"#include "windows.h"//---------------------------------------------------------------------------#pragma package(smart_init)#pragma resource "*.dfm"TForm1 *Form1;		HANDLE hCommDev;		//identyfikator portu		LPCTSTR lpFileName;	  //przechowuje nazwe portu		DCB dcb;				 // struktura kontroli portu szeregowegoint __fastcall Close_Comm(HANDLE hCommDev){CloseHandle(hCommDev);return TRUE;}void __fastcall TForm1::CloseAppBtnClick(TObject *Sender){Close_Comm(hCommDev);Application->Terminate();	   }//---------------------------------------------------------------------------void __fastcall TForm1::CloseCommClick(TObject *Sender)   //button zamykajacy port{CloseComm->Visible=False;OpenComm->Visible=TRUE;Close_Comm(hCommDev);}//---------------------------------------------------------------------------void __fastcall TForm1::OpenCommClick(TObject *Sender)	  //button otwierajacy port{ OpenComm->Visible=False; CloseComm->Visible=TRUE; if (RadioButton1->Checked==TRUE)			   // WYBOR PORTU   lpFileName="COM1"; if (RadioButton2->Checked==TRUE)			   // WYBOR PORTU   lpFileName="COM2";   hCommDev=CreateFile(lpFileName , GENERIC_READ | GENERIC_WRITE , 0 , NULL , OPEN_EXISTING, 0 , NULL);   if(hCommDev!=INVALID_HANDLE_VALUE)			//sprawdzenie czy port jest prawidlowo otwarty	 {	   dcb.DCBlength=sizeof(dcb);	   GetCommState(hCommDev,&dcb);	   dcb.BaudRate=CBR_110;	   dcb.Parity=NOPARITY;	   dcb.StopBits=ONESTOPBIT;	   dcb.ByteSize=8;	   dcb.fParity= FALSE;	   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,"Niewlasciwa nazwa portu lub port jest" "aktywny.", "Blad !", MB_OK);		 break;		}	   }}	   //---------------------------------------------------------------------------void __fastcall TForm1::Button9Click(TObject *Sender)	 //button ktory  wysyla literkę A{if(hCommDev>0)	  {	   TransmitCommChar(hCommDev,'A');	  }	 else	  {	   MessageBox(NULL , "Port nie zostal otwarty do transmisji", "Blad !", MB_OK);	  }	   }

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

nie wie czy, ale prawdopodobnie potrzeba sterowników do tego, jeśli używasz xp lub visty. Poszukaj na googlach bo tam na pewno jest opisane jak to zrobić.

Nie trzeba sterowników.

com1,com2 traktje się jak nazwy plików.

Wystarczy pisać lub czytać jak z pliku.

Trzeba mieć tylko dwa komputery i przewód

aby przetestować program.

Z jednego wysyłać na drugim czytać.

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Dołącz do dyskusji

Możesz dodać zawartość już teraz a zarejestrować się później. Jeśli posiadasz już konto, zaloguj się aby dodać zawartość za jego pomocą.

Gość
Dodaj odpowiedź do tematu...

×   Wklejono zawartość z formatowaniem.   Przywróć formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Odnośnik został automatycznie osadzony.   Przywróć wyświetlanie jako odnośnik

×   Przywrócono poprzednią zawartość.   Wyczyść edytor

×   Nie możesz bezpośrednio wkleić grafiki. Dodaj lub załącz grafiki z adresu URL.

Ładowanie


×
×
  • Dodaj nową pozycję...