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 Access 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 Access, создайте форму. В режиме конструктора в форме создайте Кнопка0 и Поле3 (поле ввода текста). Нажмите правую кнопку мыши на Кнопка0 и выберите пункт меню "Обработка событий". Откроется редактор Microsof Visual Basic.

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

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

Option Compare Database
Dim PwrAntComm As New MSComm

' При нажатии кнопки 0 выполняется команда 14?? и в Поле3
' заносится результат её выполнения
Private Sub Кнопка0_Click()
    ' 2 - Номер COM порта (COM1 = 1, COM2 = 2, ... )
    PwrAntOpen (2)
    ' Спросить у 14 PowerAnt кто он и что может	
    Поле3 = PwrAntCmd("14", "??")
End Sub

Sub Form_Unload(Cancel As Integer)
    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

Теперь после нажатия кнопки отрабатывает команда 14??, результат её выполнения Будет помещен в поле Поле3.

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