The OpenNET Project / Index page

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




Версия для распечатки Пред. тема | След. тема
Новые ответы [ Отслеживать ]
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.




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

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