The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

форумы  помощь  поиск  регистрация  майллист  ВХОД  слежка  RSS
"rs232 (работа с COM портом)"
Вариант для распечатки  
Пред. тема | След. тема 
Форумы Программирование под UNIX (Public)
Изначальное сообщение [Проследить за развитием треда]

"rs232 (работа с COM портом)"  
Сообщение от Илья email(??) on 13-Апр-07, 18:45 
Доброго времени суток, многоуважаемые.

Есть такая идея, но пока не нашел способов реализации.

Имеется устройство, которое иногда зависает (допустим DSL модем). Причина зависание - глюкавая железка.

Идея такова что бы с компьютера по COM порту посылать сигнал на отключение\включение(перезагрузку) этого девайса. Т.е. грубо говоря, на COM порт на     CTS сигнал припаеваем релюшку и с частотой в 5 минут проверяем железяку. Как только она отвалилась вылючаем CTS, релюшка отключается и отключает девайс. Ждем секунд 10 и включаем CTS, подключая тем самым девайс.

Вопрос, как включить и выключить сигнал CTS. Реально ли это сделать с помощью Shell скриптов. Если нет - подскажите как проще всего это реализовать. Буду очень признателен за любую информацию. Пишу в основном на freepascal.

Заранее спасибо!

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

 Оглавление

Сообщения по теме [Сортировка по времени, UBB]


1. "rs232 (работа с COM портом)"  
Сообщение от rmf email on 13-Апр-07, 19:23 
>Доброго времени суток, многоуважаемые.
>
>Есть такая идея, но пока не нашел способов реализации.
>
>Имеется устройство, которое иногда зависает (допустим 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

длительность сброса будет зависеть от установленной на порту скорости и кол-ва записываемых символов


Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

2. "rs232 (работа с COM портом)"  
Сообщение от Илья email(??) on 13-Апр-07, 19:52 
>реально
>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
>
>длительность сброса будет зависеть от установленной на порту скорости и кол-ва записываемых
>символов


Огромное спасибо! Буду завтра пробовать, т.к. сейчас уже у нас ночь, больно спать хочется =)...

О результатах сообщу.

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

3. "rs232 (работа с COM портом)"  
Сообщение от Илья (??) on 15-Апр-07, 10:28 
>Огромное спасибо! Буду завтра пробовать, т.к. сейчас уже у нас ночь, больно
>спать хочется =)...
>
>О результатах сообщу.

Итак, отписываюсь. Для чего все это было - есть мультикассы, связь которых в свою очередь постороена на 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.

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

Архив | Удалить

Индекс форумов | Темы | Пред. тема | След. тема
Оцените тред (1=ужас, 5=супер)? [ 1 | 2 | 3 | 4 | 5 ] [Рекомендовать для помещения в FAQ]




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2025 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру