Попробовал запустить counter (точнее — mon230) на 2-х платформах — Fedora 9 Linux на стандартном ПК и на микроконтроллере Linksys NSLU2 (Линукс с ядром 2.4)
На обычном компе все заработало без проблем, а вот на NSLU — не получилось, какие то проблемы с приемом данных.
Как ни бился, преодолеть их не смог.

Я решил несколько скорректировать свою цель — а именно, попробовать сделать функциональный аналог программы Equark под Линукс. Исходил я прежде всего из своих практических потребностей. Заменить шлюзы М228 на ПК-шки или какие-то свои микроконтроллеры быстро вероятно не получится. Так что проблема сбора данных через шлюз М228 для меня весьма актуальна, и на сегодня единственные средства — Bquark & Equark. Мне они сильно не нравятся, поскольку предполагают ручной запуск и сбор, экспорт и импорт данных. Лунуксовая версия позволит сделать сбор данных полностью автоматизированным.

На стенде проснифферил сессию Equark, причем как на последовательном порте, так и на шине RS485. Что радует — протокол полностью понятен, никаких неясностей или вопросов. По интерфейсу М228 имеется толковое и подробное описание, структура транспортных пакетов раскрыта. Приведены исходники для подсчета CRC24 на С, я их скомпиллил и протестировал. В сущности осталось только собрать все вместе, но вот на это времени не хватило, да еще вылезли проблемы с приемом из последовательного порта.

 

2 Responses to Первые результаты и заколдобки

  1. admin:

    А устройство видно? Насколько я помню, в ядре 2.4 драйвера FTDI нет, надо модуль подгружать. И можно еще попробовать подключиться через юсб-хаб.

    На всякий случай, вот стандартный способ открытия порта в raw-режиме.

    #include /* UNIX standard function definitions */
    #include /* File control definitions */
    #include /* Error number definitions */
    #include /* POSIX terminal control definitions */
    int init_port(char *sio) {
    int fd; /* File descriptor for the port */
    struct termios options;

    fd = open(sio, O_RDWR | O_NOCTTY | O_NDELAY);
    if (fd == -1) {
    perror("open_port: Unable to open serial port - ");
    }
    if(!isatty(fd)) {
    perror("open_port: This is not be a serial port");
    }
    fcntl(fd,F_SETFL,0);
    tcgetattr(fd,&options);
    cfmakeraw(&options);
    if(cfsetispeed(&options, B38400) < 0 || cfsetospeed(&options, B38400) < 0) { perror("open_port: Unable to set speed"); } if(tcsetattr(fd, TCSANOW, &options) < 0) { perror("open_port: Unable to set configuration"); } return (fd); }

  2. boangri:

    boangri писал(а):

    Попробовал запустить counter (точнее — mon230) на 2-х платформах — Fedora 9 Linux на стандартном ПК и на микроконтроллере Linksys NSLU2 (Линукс с ядром 2.4)
    На обычном компе все заработало без проблем, а вот на NSLU — не получилось, какие то проблемы с приемом данных.
    Как ни бился, преодолеть их не смог.

    Сегодня удалось решить проблему с работой скрипта mon230 на не-интеловском контроллере NSLU. Оказалось, что дело не приеме данных, а в том, что у этого процессора другой порядок расположения младшего и старшего байта, CRC вычислялась неправильно, и счетчик не отвечал, игнорируя запросы с неверной CRC. Все это удалось выяснить, подключив снифер ( Free Serial Port Monitor) к шине RS485.

Добавить комментарий

Set your Twitter account name in your settings to use the TwitterBar Section.