| СОПРЯЖЕНИЕ КОМПЬЮТЕРОВ С ВНЕШНИМИ УСТРОЙСТВАМИ |
|
Управление высоковольтными нагрузками через USB с помощью модуля Ke-USB24R
Уважаемые читатели, в этой статье я хочу познакомить Вас с практическим применением USB модуля Ke-USB24R от фирмы Kernelchip (www.kernelchip.ru). Этот модуль по своей архитектуре, установке, принципам программирования и использования максимально похож на наверное, известный Вам модуль Ke-USB24A. Существенным различием модуля Ke-USB24R от своего собрата является наличие четырех уже интегрированных в модуль высоковльтных реле, позволяющих напрямую, без лишней обвязки, управлять с компьютера мощными нагрузками. Ну чтож, давайте приступим к делу и решим следующую задачу - управление освещением с компьютера через шину USB. Сформулируем задачу: При наличии модуля Ke-USB24R такая задача решается довольно быстро и легко. Итак, первым делом необходимо установить модуль на компьютере. Процедура установки полностью аналогична установке модуля Ke-USB24A. Я пожалуй, тут ее заново повторять не буду. Желающие почитать об этом могут обратиться к оффициальному сайту модуля (www.kernelchip.ru), где представлено подробное описание по установке для ОС Windows и Linux. В результате установки в диспетчере устройств должен появиться новый виртуальный COM порт, через который происходит процесс передачи управляющих команд модулю и получение результатов. Сразу приступим к схеме. Давайте будем управлять обычной 220 вольтовой ламочкой, используемой для освещения. Соберите схему как на рисунке ниже. Здесь мы будем использовать первое реле модуля. По сути, необходимо обычную цепь питания лампы от розетки пропустить через 2-ой 3-ий контакты реле. В соответствии с техническим описанием модуля используемые нами контакты называются REL1.2 и REL1.3. По умолчанию, при запуске модуля контакты 1 и 2 каждого реле замкнуты, а 2 - 3 разомкнуты.
В результате тестовая сборка может выглядеть, например, вот так:
Для того чтобы включить ламочку, нам необходимо подать управляющий сигнал на реле. Для этого согласно описанию команд управления модулем существует команда: $KE,REL,<Номер Реле>,<Состояние> Т.е., чтобы включить лампочку для нашей схемы нам необходимо подать в порт модуля команду $KE,REL,1,1. Т.е. мы говорим что на первое реле подать управляющий сигнал. В результате, контакты 1-2 разомкнуться а 2-3 замкнуться, и по нашей лампочке пойдет ток. Соответственно, наблюдаем свечение лампы. Для отключения лампы необходимо подать команду $KE,REL,1,0 - при этом все контакты вернутся в исходное состояние и лампа потухнет.
Прежде чем писать програму, первый тест можно провести с уже готовым софтом, а именно нам потребуется любая терминальная программа которая умеет работать с COM портом. Можно указать стандартную программу HyperTerminal, входящую в состав ОС Windows. Я же воспользуюсь программой KeTerm поскольку она более удобна для наших целей. Запускаем программу, указываем номер виртуального COM порта который был присвоен модулю во время установки. У меня во время тестов это был COM4.
Для начала можно подать тестовую команду $KE - и убедиться что модуль отвечает и работает (он должен дать ответ #OK). Теперь можно приступить к реле и подать команду $KE,REL,1,1 - модуль отвечает #REL,OK и мы наблюдаем включение ламочки.
Теперь выключим лампочку - набираем команду $KE,REL,1,0 - лампа гаснет.
После проведения простых тестов можно написать и простенькую программу. Писать будем на языке С++ в среде Microsoft Visual C++ 6.0. Готовый проект можно скачать готовым. Найти его можно в начале этой статьи. Внешне программы выглядит вот так:
Рассмотрим вкратце код. Перед нами код открытия устройства. Тут все просто - открываем обычный COM порт.
void CRELEDlg::OnOpen()
{
// TODO: Add your control notification handler code here
UpdateData(true);
if(this->m_hFile != NULL)
CloseHandle(m_hFile);
char COM_string[32];
DCB dcb;
sprintf(COM_string,"\\\\.\\COM%d", this->m_com);
m_hFile = CreateFile(COM_string, GENERIC_READ|GENERIC_WRITE, 0, NULL,
OPEN_EXISTING, 0,NULL);
if(m_hFile != INVALID_HANDLE_VALUE)
{
GetCommState(m_hFile, &dcb);
dcb.BaudRate = CBR_9600; // FORMALLY, CONNECT BAUD DOESN`T MATTER (Virtual Com Port)
dcb.ByteSize = 8;
dcb.Parity = NOPARITY;
dcb.StopBits = ONESTOPBIT;
COMMTIMEOUTS CommTimeOuts;
CommTimeOuts.ReadIntervalTimeout = MAXDWORD;
CommTimeOuts.ReadTotalTimeoutMultiplier = 0;
CommTimeOuts.ReadTotalTimeoutConstant = 0;
CommTimeOuts.WriteTotalTimeoutMultiplier = 0;
CommTimeOuts.WriteTotalTimeoutConstant = 1000;
SetCommTimeouts(m_hFile, &CommTimeOuts);
SetCommState(m_hFile, &dcb);
}
else
{
MessageBox("Can`t Open Port", "Error", MB_ICONERROR);
return;
}
MessageBox("Open OK", "Info", MB_ICONINFORMATION);
}
А это функция-обраюботчик нажатия кнопки "Lampa ON". Проверяем что порт открыт и если это так, формируем команду $KE,REL,1,1 и отправляем ее в порт.
void CRELEDlg::OnLampaON()
{
// TODO: Add your control notification handler code here
if(this->m_hFile == NULL)
{
MessageBox("Port is not available", "Error", MB_ICONERROR);
return;
}
DWORD lpdwBytesWritten;
char buf[32];
int len = sprintf(buf, "$KE,REL,1,1\r\n");
WriteFile(m_hFile, buf, len, &lpdwBytesWritten, NULL);
}
Здесь будем "гасить" лампочку. Формируем команду $KE,REL,1,0 и также отправляем ее в порт.
void CRELEDlg::OnLampaOFF()
{
// TODO: Add your control notification handler code here
if(this->m_hFile == NULL)
{
MessageBox("Port is not available", "Error", MB_ICONERROR);
return;
}
DWORD lpdwBytesWritten;
char buf[32];
int len = sprintf(buf, "$KE,REL,1,0\r\n");
WriteFile(m_hFile, buf, len, &lpdwBytesWritten, NULL);
}
© Иванов Д. В. |
| Контакты | | | Гостевая книга |
| © 2005-2010 сопряжение компьютеров с внешними устройствами PCPORTS.RU © Иванов Д.В. | ||||||||||||||