|
|
|
Alsou93 |
|
|||
Новичок Профиль Группа: Участник Сообщений: 7 Регистрация: 17.12.2013 Репутация: нет Всего: нет |
В этой программе я считываю данные с lpt-порта и в зависимости от полученных значений, посылаю данные в com-порт, куда подключен микроконтроллер. Хотя консольное окно показывает что все байты(команды) отправлены, в процессе работы программы, com-порт лишь принимает первые данные, а остальные игнорирует, т.е микроконтроллер только один раз замыкает реле, а размыкать он их не размыкает. И теперь не знаю как обновить данные в буфере com-порта, для того чтобы можно было отправлять новые команды com-порту. Попыталась использовать функцию UpdateData(true), но она не работает в консольном приложении. Может кто знает какие-нибудь функции по обновлению буфера порта?
Еще у меня есть программа(скачанная с сайта производителя) по управлению микроконтроллером, она на windows form, но мне нужно переделать его в консольное приложение. Большую часть программы по управлению микроконтроллером составляла в основном ориентируясь на это приложение. только почему то та программа работает, а моя нет, может быть причина не только в обновлении данных...... #include "stdafx.h" #include <Windows.h> #include <iostream> #include <ctime> #include <stdio.h> #include <conio.h> #include "h.h" #define _WIN32_WINNT 0x0500 #include <fstream> using namespace std; HANDLE hSerial; int VklRele()//функция включения контакта реле { //UpdateData(true);..здесь пытаюсь обновить данные в буфере com-порта, но не получается PurgeComm(hSerial, PURGE_TXCLEAR); char data[] = "$KE,REL,1,1\r\n"; DWORD dwSize = sizeof(data); DWORD dwBytesWritten; LPOVERLAPPED ov; BOOL iRet = WriteFile (hSerial,data,dwSize,&dwBytesWritten ,NULL); cout << dwSize << " Bytes in string. " << dwBytesWritten << " Bytes sended. " << endl; //UpdateData(true); //CloseHandle(hSerial); return 0; } int ViklRele()//функция выключения контакта реле { //UpdateData(true);// и здесь пытаюсь обновить PurgeComm(hSerial, PURGE_TXCLEAR); char data[] = "$KE,REL,1,0\r\n"; DWORD dwSize = sizeof(data); DWORD dwBytesWritten; LPOVERLAPPED ov; //PurgeComm(hSerial, PURGE_TXCLEAR); BOOL iRet = WriteFile (hSerial,data,dwSize,&dwBytesWritten ,NULL); cout << dwSize << " Bytes in string. " << dwBytesWritten << " Bytes sended. " << endl; //UpdateData(true); return 0; } void how2timer(int ms) { // установка таймера на 5 сек int CLOCKS_PER_MSEC = CLOCKS_PER_SEC / 1000; clock_t end_time = clock() + ms * CLOCKS_PER_MSEC ; while (clock() < end_time) {} cout << "5 seconds passed!!!\n"; } int _tmain(int argc, _TCHAR* argv[]) { LPCTSTR sPortName = L"COM3"; // инициализация com-порта hSerial = ::CreateFile(sPortName,GENERIC_READ | GENERIC_WRITE,0,0,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,0); if(hSerial==INVALID_HANDLE_VALUE) { if(GetLastError()==ERROR_FILE_NOT_FOUND) { cout << "serial port does not exist.\n"; } cout << "some other error occurred.\n"; } // if(hSerial!= NULL) // CloseHandle(hSerial); DCB dcbSerialParams = {0}; dcbSerialParams.DCBlength=sizeof(dcbSerialParams); if (!GetCommState(hSerial, &dcbSerialParams)) { cout << "getting state error\n"; } dcbSerialParams.BaudRate=CBR_9600; dcbSerialParams.ByteSize=8; dcbSerialParams.StopBits=ONESTOPBIT; dcbSerialParams.Parity=NOPARITY; if(!SetCommState(hSerial, &dcbSerialParams)) { cout << "error setting serial port state\n"; } while(1){ cout<<"Read data from DATA register.\n"<<endl; int data; data = Inp32(888); //считывание данных с lpt-порта cout<<"10: "<<data<<endl; char number[20];//считывание данных с lpt-порта itoa(data,number,2); cout<<" 2: "<<number<<endl; if(number[0]=='1' && number[1]=='0' && number[2]=='0' && number[3]=='0' && number[4]=='0' && number[5]=='0' && number[6]=='0' && number[7]=='0') {//если сработает какой-нибудь определенный контакт lpt-порта, то VklRele(); //команда на включения реле микроконтроллера how2timer(5000);// ждем 5 сек ViklRele(); // выключаем реле микроконтроллера } } return 0; } Присоединённый файл ( Кол-во скачиваний: 0 ) Ke_USB24R_1__7_.rar 114,59 Kb |
|||
|
||||
xvr |
|
|||
Эксперт Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 8 Всего: 223 |
Вы уж определитесь - вам данные принять нужно или выкинуть? (как в вашей предыдущей теме). PurgeComm вычистит всю очередь (т.е. данные не будут отправленны, а принятые будут убиты).
PS. COM в названии раздела не имеет ничего общего с COM портом, вы разделом явно ошиблись |
|||
|
||||
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: COM/DCOM/ActiveX/ATL/CORBA | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |