Еще у меня есть программа(скачанная с сайта производителя) по управлению микроконтроллером, она на windows form, но мне нужно переделать его в консольное приложение. Большую часть программы по управлению микроконтроллером составляла в основном ориентируясь на это приложение. только почему то та программа работает, а моя нет, может быть причина не только в обновлении данных...... http://www.avineuro.ru/_fr/0/Ke-USB24R_1.rar (здесь программа по управлению микроконтроллером)
Код: Выделить всё
#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;
}