marlutowski Opublikowano 14 Czerwca 2008 Zgłoś Opublikowano 14 Czerwca 2008 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); } } Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...
PelzaK Opublikowano 22 Czerwca 2008 Zgłoś Opublikowano 22 Czerwca 2008 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ć. Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...
Gość dwaIP Opublikowano 3 Sierpnia 2008 Zgłoś Opublikowano 3 Sierpnia 2008 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ć. Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...