Jeżeli w 6 parametrze ( __in DWORD dwFlagsAndAttributes) CreateFile() nie podasz FILE_FLAG_OVERLAPPED, to nie używasz asynchronicznego IO. Wtedy w ReadFile() podajesz NULL jako parametr 5 (__inout_opt LPOVERLAPPED lpOverlapped). WaitCommEvent pozwoli Ci sprawdzić czy w buforze są jakieś znaki. Zobacz przykłady kodu na CodeProject [url=]synchroniczna...
Witam, napisałem aplikację, która powinna odbierać dane z uC. Problem polega na tym, że funkcja ReadFile(), której używam do odczyty portu szeregowego jest wykonywana cyklicznie w każdej pętli programu. Skutkuje to tym, że w przypadku, gdy nie ma żadnych danych do odebrania, program wpada w martwą pętle. Chciałbym zrobić to w ten sposób, by odczyt następował...
Ja do sprawdzenia i odczytania z portu Com najpierw sprawdzym czy cos jest na porcie COMSTAT comstat; DWORD dummy; ClearCommError(m_hCom, &dummy, &comstat); if(comstat.cbInQue) { ReadFile(m_hCom,buffer,MaxBytes,&bytes_r... ....//tutaj odczytuje ten bufor }
Witam Pisze sobie ostatnio program, ktory będzie odczytywał dane z portu COM. Wszystko pieknie ładnie zrobilem, dane odczytuje w sposob prawidlowy. Program dziala w taki sposob, że w okienku dialogowym jest przycisk i o wcisnieciu wykonywane sa po kolei wszystkie funkcje (otwarcie, timeouty, dcb itd itd). Po odczytaniu zapisuje do listy. Problem natomiast...
Witam, piszę malutki programik który będzie pobierał pewne dane z zewnątrz poprzez port RS 232. W moich założeniach programik ten korzysta z WinAPI. Jak wiadomo często korzysta z się z funkcji ReadFile. do odczytu z portu. Potrzebuję jednak aby program "oczekiwał" na zdefiniowany wcześniej znak końcowy, by po otrzymaniu go wyszedł z ReadFile. Na podstawie...
Witam, mam problem z asynchronicznym odbiorem danych przez rs232. Przejrzałem różne posty na forum i na ich podstawie skleciłem coś takiego, ale nie działa tak jak ja potrzebuję. Chciałbym aby PC odbierał po RS daną (1 bajt) w chwili gdy jest cos do odebrania, (nie cyklicznie, nie stale odczytywał, tylko w chwili gdy jest bajt do odebrania, które to...
Siema, zaprojektowałem, odbiornik podczerwieni w oparciu o Atmega8, który ma wysłać do komputra informację. Poszperałem w sieci i znalazłem mnóstwo informacji do komunikacji po rs232 w c++. Poniżej kod mojego terminala. [syntax=cpp]#include <iostream> #include <windows.h> using namespace std; int compare(char *str1, char *str2,int size)...
Witam, Robię aplikację okienkową w Builder C++ do komunikacji przez UART tzn. wysyłam znak z PC i odbieram dane z uC. Na początku próbuję uruchomić gotowe programy z książki "RS232 Programowanie praktyczne" Daniluka i za każdym razem wyskakuje mi przy otwieraniu COM6 następujący komunikat "Niewłaściwa nazwa portu lub port jest aktywny" Czy ktoś spotkał...
[code][syntax=cpp] DWORD cbOut = 32 ; DWORD cbIn = 30000 ; char*Buffer_O = new char[cbOut] ; char*Buffer_I = new char[cbIn] ; DWORD Num_Bytes_Read ; LPCTSTR lpFileName ; //Funkcje int __fastcall Read_Comm(HANDLE hCommDev ,LPDWORD lpNumberOfBytesRead, DWORD Buff_Size) { DWORD nNumberToRead = 0 ; // do odczytania ClearCommError(hCommDev,&Errors ,&Stat)...
Witam. Chce stworzyć aplikację która będzie działała jak terminal portu COM, czyli możliwe będzie wysyłanie i odbieranie danych. Stworzyłem taki program (kod zamieszczam poniżej). Odbiór i nadawanie umieszczone są w oddzielnych wątkach. Problem jest taki, że po uruchomieniu programu odbiór znaków (danych) działa poprawnie, natomiast nadawanie nie działa...
Juz rozwiewam wszytskie wątpliwosci. 1.Używam widows API (CreateFile itd). 2. Wysyłam znak(bajt) nie bity, a to ze pisałem ze bit jest wysyłany co 200ms (UART robi to automatycznie) sekund wynika z ustawienia 5 baudrate. Ja normalnie uzuwam funkcji WriteFile(..) . 3. W strukturze DCB jest pole BaudRate do którego wpisuje wartość 5 , pozniej wykonuje...
Mój program po stworzeniu nowego wątku odczytującego coma mocna obciąża procesor, ponad 90%. Nie musisz uruchamiać nowego wątku. Otwórz jakieś okienko i uruchom w nim timer np 100ms, a w zdarzeniu timera zrób ReadFile - to wcale nie obciąża procesora Timeout COMa ustaw na max 90% interwału timera okna Jest taką funkcja w WaitCommEvent ale ona nie powraca...
Witam!! Jezeli ktos moze mi pomoc to mam taki problem. Potrzebuje wyslac komendy AT do modemu w telefonie. Jezeli robie to za pomoca terminala to wszystko jest OK. Jak robie to za pomoca mojego programiku to nie otzymuje zadnych info ani o bledzie ani o poprawnosci komendy tak jakby RTS nie bylo wlaczone a jest wymagane przez modem. Jak moge sprawdzic...
Siema Mam taki problem ze podczas odczytu z termometru wiesza mi sie aplikacja. Niewiem w czym problem. Zajmuje sie tym dopiero od niedawna. I jest to moja 1 aplikacja sterująca Ds18B20 przez RS232 C O to kod : #define cbOutQueue 0x20 #define cbInQueue 0x20 ZMIENNE : TForm1 *Form1; char Buffer_O Dodano po 1 Aha zapomniałem dodać ze robie to pod Win...
jezyk C++ borland builder mam blad linkera wiec wystarczy to #include <vcl.h> a jesli caly kod to prosze //--- kompilować z borlndmm.dll cc3250mt.dll bcbsmp50.bpl ----------- //----RS_07.cpp------------- #include <vcl.h> #pragma hdrstop #include "RS_07.h" #pragma package(smart_init) #pragma link "CSPIN" #pragma...
Postanowiłem liczbę typu float rozbić na 4 bajty stosując rzutowanie na wskaźnik char. A następnie przesyłać bajt po bajcie do PC jednak mam problemy, ze złożeniem tego na PC bo ostatecznie odbieram inną liczbę niż wysyłam.Kody programów zamieszczam poniżej: #include <avr\io.h> unsigned char dane; float wynik=2.9876; int i=0; int a=0; void INI_RS(unsigned...
oto moja obecna aplikacja "napisana" na podstawie innych programów przykładowych. Po kliknięciu w button pojawia mi się wartość w wybranym okienku i jest OK. Jednak gdy klikne kolejny button (w celu odczytania drugiego pomiaru) zaczynają się schody. Pojawia się najpierw wartość pomiaru 1 a dopiero po 5 kliknięciu wartośc z pomiaru nr2. czy to wina buforów...
Ten program jest w Visual C++ ale działa . Może posłużyć dla porównania. // Comm32.cpp: Implementierung der Klasse CComm32. // ////////////////////////////////////////... #include "stdafx.h" #include "Comm32.h" #include "MainFrm.h" #ifdef _DEBUG #undef THIS_FILE static char THIS_FILE[]=__FILE__;...
Witam Mam urządzenie i gotowy program exe na PC do jego obsługi. muszę się podrobienia z komunikacją. z tego co widziałem po rozebraniu urządzenia to z 9 piniowego złącza podłączony jest tylko 2 i 3 pin i masa rxd txd gdn. Mam zainstalowany Eltima Software Serial Port Monitor" w którym podglądam zachowanie gotowego programu. nigdy nic z rs232 nie robiłem....
spróbuj memset(&ovrlap,0,sizeof(OVERLAPP... ovrlap.hEvent = CreateEvent(NULL, TRUE, FALSE, NULL); GetCommMask(hCom, &eventMask); SetCommMask(hCom, EV_RXCHAR); WaitCommEvent(hCom,&eventMask,&ovrla... WaitForSingleObject(ovrlap.hEvent, INFINITE); if (!(eventMask&&EV_RXCHAR))... fSuccess...
Witam. Brakuje początku. Może poniżej zamieszczę kod "mojego" programu. Są to w zasadzie sklejki fragmentów kodów z książki. unit termos; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, ExtCtrls, StdCtrls, ComCtrls; type TTermostat = class(TForm) RichEdit1: TRichEdit; Odbieraj: TButton;...
Witam Korzystam z książki Pana Daniluka i wykorzystałem jego prgram: #include <vcl.h> #pragma hdrstop #include "Unit_06_05.h" #pragma package(smart_init) #pragma resource "*.dfm" #define cbOutQueue 1024 //rozmiar bufora danych wyjściowych #define cbInQueue 1024 //rozmiar bufora danych wejściowych TForm1 *Form1; AnsiString...
Witam Staram się wysłać smsa przez modem w k750i, pracując w terminalu modem po komendzie "AT" zwraca "OK". Na początek staram się dostosować program z "Praktyczne programowanie". Oto kod: //--------------------------------------... #include <vcl.h> #pragma hdrstop #include "Unit1.h" //--------------------------------------...
U mnie działa tak więc kod jest prawidłowy ! #include <windows.h> #include <stdio.h> #include <stdlib.h> #include <time.h> #define cbOutQueue 35 //rozmiar bufora danych wyjściowych #define cbInQueue 35 //rozmiar bufora danych wejściowych int __fastcall Write_Comm(HANDLE hCommDev, DWORD nNumberOfBytesToWrite); int __fastcall...
Wygląda na to że nie doczytałeś dokumentacji bo If the overlapped operation cannot be completed immediately, the function returns FALSE and the GetLastError function returns ERROR_IO_PENDING, indicating that the operation is executing in the background. Ty nie sprawdzasz co zwróciło WaitCommEvent a jestem pewien że zwróciło FALSE skoro w readBytes lub...
Witam, tworzę aplikację komunikującą się z urządzeniem za pomocą komend AT. Po przewertowaniu połowy internetu, przeczytaniu i wykorzystaniu przykładów z książki Daniluka "RS232C Praktyczne programowanie ..." nadal mam problem z właściwym odbiorem danych. Na obecną chwilę opierając się głównie na przykładach z w/w książki potrafię wysłać komendę/zapytanie...
Problem polega na tym że chyba mam coś źle skonfigurowane na COMie. Jak urządzenie zewnętrze dostarcza mi dane po 256bajtów to ja za pierwszym odczytem otrzymuje 33bajty, kolejny odczyt to dane po 33bajcie Czyli buffor wypełnia się na dwa razy. Czy posiadacie może sprawdzony sposób na odbiór danych przez RS'a bez gubienia danych w buforze? Jak sprawdzam...
Witam, chciałem sobie zrobić termometr cyfrowy na atmega8, który w czasie rzeczywistym wysyła wyniki pomiarów do komputera PC, oprogramowanie na komputerze PC postanowiłem zrobić w programie Borland C++ Builder. Jako że jestem jeszcze początkujący napotkałem pewien problem, mianowicie żeby odebrać jakiekolwiek dane muszę najpierw kliknąć myszką na przycisk...
Witam, Robię projekt wizualizacji(wykresy) sygnałów z akcelerometru. Komunikację między PC a uC mam już zrobioną przez RS232. Teraz zabieram się do wykonania aplikacji w Builder C++ 6. Wzoruję się na książce "RS232 prog. praktyczne" p. Daniluka. Mam problem z konfiguracją(otwarciem, ustawieniem) portu Com pod którym mam RSa(com 6). W terminalu dane...
pozostaje mi się więc posługiwać SetCommMask, WaitCommEvent badać zdarzenia i za pomocą ReadFile odczytywać nadchodzące dane a potem je przetwarzać? To chyba jedyna droga?