marlutowski Napisano 14 Czerwca 2008 Zgłoś Napisano 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 More sharing options...
PelzaK Napisano 22 Czerwca 2008 Zgłoś Napisano 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 More sharing options...
Gość dwaIP Napisano 3 Sierpnia 2008 Zgłoś Napisano 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 More sharing options...