PowerAnt - Могучий Муравей: Научи Свой компьютер Управлять Реальным Миром
PowerAnt это программное управление через RS-232 порт 14 и больше внешними устройствами с помощью компьютера. Открытый, текстовый, хорошо задокументированный протокол управления. Управление электроприборами с потребяемой мощностью до 200Вт. Хотите управлять Реальным Миром даже из MS Excel?.
 Применение
Компьютерный клуб
Компьютерная сеть
Домовая сеть
Умный дом
Прочее
 PowerAnt
Описание
Применение
Тех. характеристики
Документация
Фотографии
 Базовая станция
Описание
Применение
Тех. характеристики
Документация
 Типы PowerAnt
SwSe
SwSw
SeSe
 Скорость работы
MS-DOS
Linux
MS Windows 98
MS Windows 98, Perl
 Программирование
Примеры на Perl
C/C++ - c чего начать
C/C++ - примеры
MS Access 2000
MS Excel 2000
 Заказ
Комплектность
Цены
 ЧаВо
 Новости сайта RSS
 Статьи
 Контакты
 Рейтинги

Программирование PowerAnt в MS Excel 2000

Проще всего программировать PowerAnt используя стандартный компонент mscomm32.ocx. Компонент этот был разработан в Microsoft, но не смотря на свою полезность не попал в дистрибутивы MS Windows. Возможно, виной тому наличие в нем некоторых ошибок, которые могут усложнить жизнь разработчикам программ (Официально зарегистрированная ошибка: Утечка памяти при открытии/закрытии RS-232 порта). Учитывая тот факт, что обычно в RS-232 порт следует открыть в начале выполненя всей программы и закрыть его только по её завершению, эту ошибку не следует считать серьезной.

Загрузите mscomm32.ocx (mscomm.zip, 51KB) компонент и скопируйте его в каталог C:\Windows\System.

Разумеется, компонент, без некоторой пляски с бубном, работать не будет. Потребуется поместить небольшое заклинание в системный Реестр:

REGEDIT4

[HKEY_CLASSES_ROOT\Licenses\4250E830-6AC2-11cf-8ADB-00AA00C00905]
@ = "kjljvjjjoquqmjjjvpqqkqmqykypoqjquoun"
Для того, чтобы внести эту запись в реестр необходимо дважды кликнуть на файле mscomm.reg (который находится в архиве mscomm.zip) в проводнике. Редактор реестра спросит: следует ли вносить изменения в системный реестр, и после Вашего утвердительного ответа отчитается о том, что изменения успешно внесены.

Запустите MS Excel. Откройте панели инструментов Visual Basic (Вид/Панели инструментов/Visual Basic) и "Элементы управления" (Вид/Панели инструментов/Элементы управления). Пользуясь панелью инструментов Visual Basic перейдите в режим конструктора. Пользуясь панелью инструментов "Элементы управления" создайте кнопку CommandButton1. Нажмите правую кнопку мыши на CommandButton1 и выберите пункт меню "Исходный текст".

Теперь потребуется произвести еще одно магическое действие в редакторе Microsoft Visual Basic. Открываем меню Tools/References. В открывшемся окне нажимаем кнопку Browse.... Находим в файловой системе mscomm32.ocx (C:\Windows\System). В результате в окне References в поле "Available References" появляется отмеченная галочкой строка "Microsoft Comm Control 6.0".

Дальше никакой магии, просто копируем в окно редактора приведенную ниже программу.

Dim PwrAntComm As New MSComm

' При нажатии кнопки выполняется команда 08?? и 
' 	результат её выполенения заносится в ячейку C12
' заносится результат её выполнения
Private Sub CommandButton1_Click()
    ' 2 - Номер COM порта (COM1 = 1, COM2 = 2, ... )
    PwrAntOpen (2)
    ' Спросить у 08 PowerAnt кто он и что может
    ' Поместить результат в ячейку C12
    Лист1.[C12] = PwrAntCmd("08", "??")
    Call PwrAntClose
End Sub

' Метод открывает RS-232 порт (если он еще не открыт)
' PortNumber - Номер COM порта (COM1 = 1, COM2 = 2, ... )
Sub PwrAntOpen(PortNumber As Integer)
    If Not PwrAntComm.PortOpen = True Then
        PwrAntComm.CommPort = PortNumber
        PwrAntComm.Settings = "9600,N,8,1"
        PwrAntComm.Handshaking = comNone
        PwrAntComm.InputLen = 0
        PwrAntComm.InBufferSize = 40
        PwrAntComm.OutBufferSize = 40
        PwrAntComm.PortOpen = True
        PwrAntComm.RThreshold = 0
        PwrAntComm.Output = Chr(27)     ' Сразу делаем команду прочистки буфера
    End If
End Sub

' Метод закрывает RS-232 порт (если он был открыт)
Sub PwrAntClose()
  If PwrAntComm.PortOpen = True Then
    PwrAntComm.PortOpen = False
  End If
End Sub

' Метод выполняет команду и возвращает результат её выполнения
' Если в результате выполнения команды ничего не произошло (например, Вы 
' обратились к не существующему PowerAnt), то 
'   функция возвращает пустую строку, причем делает это по таймауту.
'   На выполнение команды отводится максимум 2 секунды
Function PwrAntCmd(AntName As String, AntCmd As String) As String
    Dim AntInStr As String
    Dim TimeOut As Date
    ' Отсылка команды устройству
    PwrAntComm.Output = AntName & AntCmd & Chr(13)
    'Четние строки с ожиданием символа 0x0D в конце
    AntInStr = ""
    TimeOut = Time
    Do
        dummy = DoEvents()      ' не вешаем систему
        If PwrAntComm.InBufferCount > 0 Then
            AntInStr = AntInStr & PwrAntComm.Input
        End If
    Loop Until (Right(AntInStr, 1) = Chr(13)) Or (Time - TimeOut > 1)
    ' Убрать лишний 0x0D в конце
    AntInStr = Left(AntInStr, Len(AntInStr) - 1)
    PwrAntCmd = AntInStr
End Function
	

Сохраните программу и закройте редактор Visual Basic

При помощи панели инструментов Visual Basic отключите режим конструктора.

Теперь после нажатия кнопки отрабатывает команда 08??, результат её выполнения заносится в ячейку Лист1.C12.

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

PowerAnt это программное управление через RS-232 порт 14 и больше внешними устройствами с помощью компьютера. Открытый, текстовый, хорошо задокументированный протокол управления. Управление электроприборами с потребяемой мощностью до 200Вт. Хотите управлять Реальным Миром даже из MS Excel?.
  © 2004-2022 by  www.anthillsolutions.com