Чтение онлайн

на главную - закладки

Жанры

Интернет-журнал "Домашняя лаборатория", 2007 №5
Шрифт:

Сброс системы SOROS в исходное состояние осуществляется кнопкой Init на контроллере крейта CRATE. Кнопка Printer, там же, позволяет запустить минисервер для принтера. На окне этого сервера можно выбрать нужный принтер, подключится к нему, и выбрать имя для сервера. Подразумевается, что будет использован сетевой принтер, поскольку параллельный порт (порты) необходимы для подключения контрольно-измерительных устройств. Переключатель Strob запускает режим циклического чтения (когда не 0 и кликнута кнопка Read). Чем больше значение на переключателе, тем реже производится чтение (делитель частоты стробового импульса).

При

нажатой кнопке Setup можно подшить какой-либо скрипт, написанный на языке QSL, к кнопке на модуле PROGRAM, при ее нажатии конечно. Когда Setup отжата, кнопки модуля PROGRAM могут запускать скрипты на выполнение. Любой QSL скрипт можно также выбрать и выполнить с помощью кнопки Run.

К мини-серверам пакета SOROS может подключаться и интерпретатор QSL. Для взаимодействия с серверами используется «клиент-сервер» модель и DDE. QSL всегда является клиентом с именем «QSL». Сервер может быть открыт как файл, командой open. Имена внешних программ (драйверов) должны предваряться символом #. Сами имена мини-серверов уже заложены внутри их программ, но входящий в них номер порта/карты выбирается при запуске с панели системы SOROS. К некоторым устройствам, таким как аудио и видео периферия, командные последовательности могут быть посланы через MCI (смотрите документацию на QSL и MCI). К настоящему моменту в пакет входит всего 4 сервера: принтер, параллельный порт, последовательный порт и звуковая карта, но каждый желающий может изменить их или добавить другие. Все источники предоставляются.

Далее следуют примеры программирования скриптов для работы с минисерверами.

Урок 4. И снова принтер

# Lesson 4

open (PRN, ">#printer) || die "";

print PRN "Nice weather today, isn't it?\n";

close PRN;

Надо полагать, что в этом примере все уже знакомо. Следует учесть только, что до его выполнения соответствующий сервер должен быть запущен и настроен. Тоже самое относится и к последующим примерам.

Урок 5. Параллельный порт

В действительности QSL не имеет каких-либо специальных команд для контроля драйверов. Одним из возможных решений этой проблемы может являться использование управляющих символов в выводимых данных и использование отрицательного размера буфера для ввода в стандартных командах ввода-вывода QSL.

# Lesson 5

open(LPT, "+#LPT1") || die "";

$reg = " ";

read(LPT, $reg, — 2); # read status and control registers

($sr, $cr) = unpack("CC", $reg);

printf "%x\n%x", $sr, $cr;

$cr |= 0x20; # bi-direct

$reg = pack("CC", 0x01, $cr); # SOH + control byte

print LPT $reg;

print LPT "Hello, world!\r";

sleep 3000;

close LPT;

warn " ";

Обратите внимание, что в команде чтения read размер буфера дан отрицательным, это является просьбой к серверу вернуть значения контрольного регистра и регистра чтения (два байта). Естественно, что сервер понимает это (смотрите программу этого сервера). Поскольку с сервера будет получена текстовая строка, переменная $reg была сделана

текстовой, путем записи в нее пары пробелов.

Для передачи значения регистров упаковываются в текстовую строку, команда unpack распаковывает ее ($reg) на два байта без знака (код С) и помещает, в соответствующие названиям регистров, переменные. Последующий printf, просто для наглядности, выводит значения этих регистров на консоль, в шестнадцатеричном формате. Далее, после нужного изменения содержимого регистров, они снова упаковываются в текстовую строку командой pack и отсылаются на сервер командой print. Параллельный порт готов к работе, если там имеется принтер, то можно отпечатать что-нибудь, но на самом деле этот порт необходим для управления контрольно-измерительными устройствами, подключаемыми через него, а принтер можно использовать и сетевой.

Знак + в начале имени файла означает, что файл нужен для чтения и записи. Операция |= (битовое «или»), просто сокращенная форма конструкции $сг = $сг | 0x20.

Урок 6. Последовательный порт

Последовательный порт (RS-232) тоже может быть использован для управления некоторыми устройствами, тем более что некоторые современные измерительные приборы имеют встроенный интерфейс для него. В нижеследующем примере использован другой подход к проблеме доступа к регистрам порта. В этом подходе первые 2 байта ввода/вывода содержат данные контрольного регистра, другие 2 байта — получаемые/посылаемые портом данные.

#Lesson 6

open(СОМ, "+#СОМ1") || die "";

$sr =2; # -1 for serial register and -1 or 0 for data means do not set/send

$sr <<= 16; # first 2 bytes are register, second 2 bytes are data

# actually for setting/sending is used only second byte in pair

print COM $sr; # DTR is set, it works like printf(COM "%d", $sr);

$str = "";

read(COM, $str, 12); # read serial register and data as decimal string

$sr = dec($str) >> 16; # converts string to bytes and gets register

# first 2 bytes are register, second 2 bytes are data

printf "0x%x", $sr;

close COM;

warn " ";

Операции << и >> производят сдвиг битов числа, соответственно влево и вправо на указанное количество позиций, добавляя на освободившиеся места нули. Каждый сдвиг это, по сути, умножение (влево) или деление (вправо) на 2.

Урок 7. Ввод-вывод звуковой карты

Нижеследующий скрипт считывает 160 байтов из звуковой карты и отправляет на нее, через мини-сервер, тоже 160, случайных байтов. Этого достаточно, чтобы услышать скрип в динамике.

#Lesson 7

open(AUDIO, "+#AUD1") || die "";

$str = "";

read(AUDIO, $str, 160);

@x = unpack("Cl60", $str);

printf "0x%x", $x[10];

srand;

for($idx =0; $idx < 160; $idx++) {

$x[$idx] += rand(50) — rand(50);

}

$str = pack("C160", 0x);

Поделиться:
Популярные книги

Кротовский, вы сдурели

Парсиев Дмитрий
4. РОС: Изнанка Империи
Фантастика:
попаданцы
альтернативная история
рпг
5.00
рейтинг книги
Кротовский, вы сдурели

Развод с генералом драконов

Солт Елена
Фантастика:
фэнтези
5.00
рейтинг книги
Развод с генералом драконов

Хозяйка лавандовой долины

Скор Элен
2. Хозяйка своей судьбы
Любовные романы:
любовно-фантастические романы
6.25
рейтинг книги
Хозяйка лавандовой долины

Идеальный мир для Лекаря 12

Сапфир Олег
12. Лекарь
Фантастика:
боевая фантастика
юмористическая фантастика
аниме
5.00
рейтинг книги
Идеальный мир для Лекаря 12

Курсант: назад в СССР 2

Дамиров Рафаэль
2. Курсант
Фантастика:
попаданцы
альтернативная история
6.33
рейтинг книги
Курсант: назад в СССР 2

Невеста снежного демона

Ардова Алиса
Зимний бал в академии
Фантастика:
фэнтези
6.80
рейтинг книги
Невеста снежного демона

Я – Стрела. Трилогия

Суббота Светлана
Я - Стрела
Любовные романы:
любовно-фантастические романы
эро литература
6.82
рейтинг книги
Я – Стрела. Трилогия

Двойник Короля

Скабер Артемий
1. Двойник Короля
Фантастика:
попаданцы
аниме
фэнтези
фантастика: прочее
5.00
рейтинг книги
Двойник Короля

Запасная дочь

Зика Натаэль
Фантастика:
фэнтези
6.40
рейтинг книги
Запасная дочь

Фиктивный брак

Завгородняя Анна Александровна
Фантастика:
фэнтези
6.71
рейтинг книги
Фиктивный брак

Полное собрание сочинений в одной книге

Зощенко Михаил Михайлович
Проза:
классическая проза
русская классическая проза
советская классическая проза
6.25
рейтинг книги
Полное собрание сочинений в одной книге

Архил...? 4

Кожевников Павел
4. Архил...?
Фантастика:
фэнтези
попаданцы
альтернативная история
5.50
рейтинг книги
Архил...? 4

На границе империй. Том 9. Часть 4

INDIGO
17. Фортуна дама переменчивая
Фантастика:
космическая фантастика
попаданцы
5.00
рейтинг книги
На границе империй. Том 9. Часть 4

Господин следователь

Шалашов Евгений Васильевич
1. Господин следователь
Детективы:
исторические детективы
5.00
рейтинг книги
Господин следователь