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
 Статьи
 Контакты
 Рейтинги
Яндекс цитирования Каталог ресурсов ListTop.Ru Rambler's Top100

Программирование на Perl

Сразу оговорюсь - Perl - один из моих самых любимых языков программирования. Текстовый протокол работы PowerAnt как раз и разрабатывался для удобства программирования на Perl. Каждая команда и каждый отчет PowerAnt о ее выполнении содержат в основном уникальные символы и с легкостью разбираются.

Если для пользователей Linux вопрос "где взять Perl" обычно заранее предрешен, то пользователям Windows можно порекомендовать ActivePerl.

Perl в стандартной поставке не знает что такое RS-232 порт, поэтому необходимо доустановить еще пакет Win32::SerialPort (Для ActivePerl потребуются: Win32-API.ppd, Win32-SerialPort.ppd).

Инициализация RS-232 порта в Perl

#!/usr/bin/perl -w

use Win32::SerialPort;

$PowerAnts = new Win32::SerialPort('COM2','','') || die "Can't open COM2";
$PowerAnts->baudrate(9600) || die "Can't set 9600";
$PowerAnts->parity('none') || die "Can't set parity none";
$PowerAnts->databits(8)  || die "Can't set 8 data bits";
$PowerAnts->stopbits(1)  || die "Can't set one stopbit";
$PowerAnts->handshake('none')  || die "Can't HW flow control off";
$PowerAnts->write_settings;
#...........

Закрытие RS-232 порта в Perl

#...........
$PowerAnts->close() || die "Что-то не так при закрытии файла устройства\n";;
undef $PowerAnts;

Работа с RS-232 портом в Perl

В данном участке кода приведена процедура которая использует функции write для передачи команды в RS-232 порт и функцию read для чтения результатов выполнения команд побайтно. В данном случае использовать операцию input не получится, так как в ней находится цикл ожидания символа \n (0x0A), который в протоколе PowerAnt не используется.

sub pwrant_cmd($){
    my $cmd = shift;
    $PowerAnts->write($cmd."\r");    
    $_ = '';
    do {
    	$_ .= $PowerAnts->read(1);
    } while (! /\r/);
    return $_;
};

$_ = pwrant_cmd("!??");

Обработка ошибок

Если отчет о выполнении команды отрицателен, то в строке-ответе содержится символ '-'. Для того чтобы его обнаружить, на Perl необходимо написать:

die "Программа выполнила недопустимую операцию и будет закрыта" if (/-/);

Обнаружение срабатывания датчика в Perl

Например, для PowerAnt типа SwSe обнаружение выключения датчика 'K' может производиться следующим образом:

$_ = pwrant_cmd('?=');
while( ! /K/ ){
	die "Программа выполнила недопустимую операцию и будет закрыта" if (/-/);
	$_ = pwrant_cmd('?%');
};
# Датчик K сработал

Управление выключателями в Perl

Например, сделаем бегущий огонек (применимо для PowerAnt типов SwSe и SwSw), для чего напишем простую программу:

#!/usr/bin/perl -w

use Win32::SerialPort;

$PowerAnts = new Win32::SerialPort('COM2','','') || die "Can't open COM2";
$PowerAnts->baudrate(9600) || die "Can't set 9600";
$PowerAnts->parity('none') || die "Can't set parity none";
$PowerAnts->databits(8)  || die "Can't set 8 data bits";
$PowerAnts->stopbits(1)  || die "Can't set one stopbit";
$PowerAnts->handshake('none')  || die "Can't HW flow control off";
$PowerAnts->write_settings;

sub pwrant_cmd($){
    my $cmd = shift;
    $PowerAnts->write($cmd."\r");    
    $_ = '';
    do {
    	$_ .= $PowerAnts->read(1);
    } while (! /\r/);
    return $_;
};

$x_on   = 'H';
$x_off  = 'h';
pwrant_cmd("=abcdefgh"); # выключить все выключатели
while( 1 ){
	$_ = pwrant_cmd("=".$x_off); # Выключить выключатель
	# Анализируем ответ
	die "Программа выполнила недопустимую операцию и будет закрыта" if (/-/);
	$x_on++;
	$x_off++;
	if( $x_on gt 'H' ){
		$x_on   = 'A';
		$x_off  = 'a';
	};
	$_ = pwrant_cmd("=".$x_on); # Включить выключатель
	# Анализируем ответ
	die "Программа выполнила недопустимую операцию и будет закрыта" if (/-/);
	sleep( 1 ); # Задержка 1 секунда
};

$PowerAnts->close() || die "Что-то не так при закрытии файла устройства\n";;
undef $PowerAnts;

Заключение

Если Вы знаете Perl, и у Вас есть руководство программиста PowerAnt, то дальнейшие объяснения как писать программы для PowerAnt являются лишними.

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