СОПРЯЖЕНИЕ КОМПЬЮТЕРОВ С ВНЕШНИМИ УСТРОЙСТВАМИ

Яндекс цитирования

Друзья ресурса:

www.roboforum.ru




Управление высоковольтными нагрузками через USB с помощью модуля Ke-USB24R


Файлы к статье (размер: 114 КБ)

Уважаемые читатели, в этой статье я хочу познакомить Вас с практическим применением USB модуля Ke-USB24R от фирмы Kernelchip (www.kernelchip.ru). Этот модуль по своей архитектуре, установке, принципам программирования и использования максимально похож на наверное, известный Вам модуль Ke-USB24A. Существенным различием модуля Ke-USB24R от своего собрата является наличие четырех уже интегрированных в модуль высоковльтных реле, позволяющих напрямую, без лишней обвязки, управлять с компьютера мощными нагрузками.

Ну чтож, давайте приступим к делу и решим следующую задачу - управление освещением с компьютера через шину USB. Сформулируем задачу:

"Хочу сделать такую систему, которая через шину USB позволяла бы с компьютера включать/выключать освещение. В программе должны быть две кнопки - одна для включения освещения, другая для его отключения."

При наличии модуля Ke-USB24R такая задача решается довольно быстро и легко. Итак, первым делом необходимо установить модуль на компьютере. Процедура установки полностью аналогична установке модуля Ke-USB24A. Я пожалуй, тут ее заново повторять не буду. Желающие почитать об этом могут обратиться к оффициальному сайту модуля (www.kernelchip.ru), где представлено подробное описание по установке для ОС Windows и Linux.

В результате установки в диспетчере устройств должен появиться новый виртуальный COM порт, через который происходит процесс передачи управляющих команд модулю и получение результатов.

Сразу приступим к схеме. Давайте будем управлять обычной 220 вольтовой ламочкой, используемой для освещения. Соберите схему как на рисунке ниже. Здесь мы будем использовать первое реле модуля. По сути, необходимо обычную цепь питания лампы от розетки пропустить через 2-ой 3-ий контакты реле. В соответствии с техническим описанием модуля используемые нами контакты называются REL1.2 и REL1.3. По умолчанию, при запуске модуля контакты 1 и 2 каждого реле замкнуты, а 2 - 3 разомкнуты.

программирование Ke-USB24R

В результате тестовая сборка может выглядеть, например, вот так:

управление освещением через USB

ВНИМАНИЕ! Будьте осторожны, часть проводников платы может находится под высоким напряжением!

Для того чтобы включить ламочку, нам необходимо подать управляющий сигнал на реле. Для этого согласно описанию команд управления модулем существует команда:

$KE,REL,<Номер Реле>,<Состояние>

Т.е., чтобы включить лампочку для нашей схемы нам необходимо подать в порт модуля команду $KE,REL,1,1. Т.е. мы говорим что на первое реле подать управляющий сигнал. В результате, контакты 1-2 разомкнуться а 2-3 замкнуться, и по нашей лампочке пойдет ток. Соответственно, наблюдаем свечение лампы. Для отключения лампы необходимо подать команду $KE,REL,1,0 - при этом все контакты вернутся в исходное состояние и лампа потухнет.

USB реле


Прежде чем писать програму, первый тест можно провести с уже готовым софтом, а именно нам потребуется любая терминальная программа которая умеет работать с 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);	
}


© Иванов Д. В.
4 ноября 2008 года
www.pcports.ru




Контакты | Гостевая книга

© 2005-2010 сопряжение компьютеров с внешними устройствами PCPORTS.RU © Иванов Д.В.