rs232 (работа с COM портом), Илья, 13-Апр-07, 18:45 [смотреть все]Доброго времени суток, многоуважаемые.Есть такая идея, но пока не нашел способов реализации. Имеется устройство, которое иногда зависает (допустим DSL модем). Причина зависание - глюкавая железка. Идея такова что бы с компьютера по COM порту посылать сигнал на отключение\включение(перезагрузку) этого девайса. Т.е. грубо говоря, на COM порт на CTS сигнал припаеваем релюшку и с частотой в 5 минут проверяем железяку. Как только она отвалилась вылючаем CTS, релюшка отключается и отключает девайс. Ждем секунд 10 и включаем CTS, подключая тем самым девайс. Вопрос, как включить и выключить сигнал CTS. Реально ли это сделать с помощью Shell скриптов. Если нет - подскажите как проще всего это реализовать. Буду очень признателен за любую информацию. Пишу в основном на freepascal. Заранее спасибо! |
- rs232 (работа с COM портом), rmf, 19:23 , 13-Апр-07 (1)
>Доброго времени суток, многоуважаемые. > >Есть такая идея, но пока не нашел способов реализации. > >Имеется устройство, которое иногда зависает (допустим DSL модем). Причина зависание - глюкавая >железка. > >Идея такова что бы с компьютера по COM порту посылать сигнал на >отключение\включение(перезагрузку) этого девайса. Т.е. грубо говоря, на COM порт на >CTS сигнал припаеваем релюшку и с частотой в 5 минут проверяем >железяку. Как только она отвалилась вылючаем CTS, релюшка отключается и отключает >девайс. Ждем секунд 10 и включаем CTS, подключая тем самым девайс. > > >Вопрос, как включить и выключить сигнал CTS. Реально ли это сделать с >помощью Shell скриптов. Если нет - подскажите как проще всего это >реализовать. Буду очень признателен за любую информацию. Пишу в основном на >freepascal. > >Заранее спасибо! реально 1) с помощью stty настраиваешь порт /dev/ttyS{0,1,2,3} чтобы он управлял CTS/RTS (в названиях могу ошибаться) как смотри man stty 2) когда нужно резетнуть выводишь что-нибуть в .dev/ttyS{0,1,2,3} например echo "aaaaaaaaaaaaaaaaaaaaaaaaa" > /dev/ttyS{0,1,2,3} или dd if=/dev/zero of=/dev/ttyS{0,1,2,3} bs=1 count=1024 длительность сброса будет зависеть от установленной на порту скорости и кол-ва записываемых символов
- rs232 (работа с COM портом), Илья, 19:52 , 13-Апр-07 (2)
>реально >1) с помощью stty настраиваешь порт /dev/ttyS{0,1,2,3} чтобы он управлял CTS/RTS (в >названиях могу ошибаться) >как смотри man stty > >2) когда нужно резетнуть выводишь что-нибуть в .dev/ttyS{0,1,2,3} >например echo "aaaaaaaaaaaaaaaaaaaaaaaaa" > /dev/ttyS{0,1,2,3} >или >dd if=/dev/zero of=/dev/ttyS{0,1,2,3} bs=1 count=1024 > >длительность сброса будет зависеть от установленной на порту скорости и кол-ва записываемых >символов Огромное спасибо! Буду завтра пробовать, т.к. сейчас уже у нас ночь, больно спать хочется =)...
О результатах сообщу.
- rs232 (работа с COM портом), Илья, 10:28 , 15-Апр-07 (3)
>Огромное спасибо! Буду завтра пробовать, т.к. сейчас уже у нас ночь, больно >спать хочется =)... > >О результатах сообщу. Итак, отписываюсь. Для чего все это было - есть мультикассы, связь которых в свою очередь постороена на GSM модемах, которые часто подвисают. В итоге хотелось как-то(минимальными затратами) сделать какой-то примитивный перезапуск этих самых модемов. Вот собственно и сам скрипт: #!/bin/bash while [ 1 ] do echo "" echo "--------------------------------------------------------" echo "start test. ping server..." ping -i4 -c5 -q -w30 <IP> &>/dev/null rez=$? if [ $rez != 0 ]; then echo "modem status = error" echo "down pptp interface" ifdown pptp0 sleep 2 echo "restart modem..." dd if=/dev/zero of=/dev/ttyS{0,1,2,3...} bs=1 count=10240 echo "wait 20 sec before up pptp..." sleep 20 echo "up pptp interface..." ifup pptp0 else echo "modem status = ok" fi echo "wait 60 sec before next test..." sleep 60 done Скрипт в тестовом режиме, поэтому я решил все сделать в цикле while. В дальнейшем цикл уберу и засуну все в cron. Схема постороена на транзисторе 30N03-30L, который был выпаян из ближайшего блока питания древнего ноутбука и реле на 12V. на ногу G через резистор в 1.6 кОм подан сигнал TxD. на ногу D припаял на катушку реле, на второй контакт катушки подал +12V от БП компьютера. нога S замыкается с GND порта RS232 и "-" БП(в принципе должно хватить только "минуса" от БП или COM порта, но так надежнее). Контакты реле использовать по назначению... Да, не забудьте припаять обратный диод на катушку реле, дабы самоиндукция не пробила транзистор (хотя некоторые содержат свой собственный диод внутри, но как показывает практика он не выдерживает). В скрипте так же не забудьте заменить "<IP>" и указать номер порта COM. Это все 100% работает, осталось только установить. Буду признателен если меня поправят =) Отдельная благодарность rmf.
|