d.a.gerashenko » 15 янв 2013, 03:55
У меня была довольно интересная ситуация с этим модулем, пока гуглил, несколько раз натыкался на эту ветку форума, решил отписаться.
В наличии у меня: мой стационарный компьютер, микрокомпьютер Raspberry PI model B и модуль KernelChip Ke-USB24R с 4-мя реле.
К микрокомпьютеру подключаюсь со стационарного компьютера через локальную сеть с помощью клиента PuTTY.
В микрокомпьютер через USB воткнут модуль Ke-USB24R.
Модуль сам установился и определился как устройство /dev/ttyACM0.
Микрокомпьютер работает под управления Raspbian, что, наверное, одно и тоже что Debian, там же не далеко и Ubuntu.
Далее начались странности.
Я подключился к микрокомпьютеру через PuTTY и запустил команду echo -e '$KE,REL,1,1\r\n\' > /dev/ttyACM0
Ничего не произошло.
Попытался получить ответ cat /dev/ttyACM0
Ничего.
Я подключился к микрокомпьютеру через еще одно окно PuTTY, на одном запустил
cat /dev/ttyACM0
на другом начал слать команды.
На команду echo -e '$KE\r\n\' > /dev/ttyACM0 модуль вообще ничего не возвращал, никаких OK он не выдавал.
На команду echo -e '$KE,REL,1,1\r\n\' > /dev/ttyACM0 он то ничего не слал, то слал кучу ERR#, то срабатывал и слал кучу ERR#.
В общем случайным образом я догадался, что дело было в питании, я поменял адаптер для микрокомпьютера с 700mA до 1A, и реле стало работать с одной консоли, т.е. теперь не надо было постоянно читать ответ, чтобы хотя бы одна команда из 5 сработала.
Ответы реле я уже не стал читать, так что не знаю, шлет ли оно ошибки или нет, меня устроило то, что оно хотя бы начало стабильно работать.
Все кончилось написание php скрипта, который открывал файл, блокировал его, очищал, включал реле на 3 секунды и выключал, сбрасывал буфер, снимал блокировку и закрывал.
Еще один интересный момент, без sleep сразу после открытия файла и перед закрытием не работает, возможно в это время происходит какая-нибудь инициализация, в общем я не вдавался в подробности, мне было достаточно.
Вот php скрипт:
$fh = fopen("/dev/ttyACM0", "r+");
if (flock($fh, LOCK_EX)) {
ftruncate($fh, 0);
sleep(2);
fwrite($fh,"\$KE,REL,1,1\r\n",13);
sleep(3);
fwrite($fh,"\$KE,REL,1,0\r\n",13);
sleep(2);
fflush($fh);
flock($fh, LOCK_UN);
} else {
echo "File locking error";
}
fclose($fh);