Показано с 1 по 10 из 17

Тема: ОВЕН ПМ01

Комбинированный просмотр

Предыдущее сообщение Предыдущее сообщение   Следующее сообщение Следующее сообщение
  1. #1

    Cool

    Здравствуйте.
    Цитата Сообщение от eupsychian Посмотреть сообщение
    Имеется ряд вопросов по работе с ПМ01:
    1) Одним из недостатков режима GPRS является "Негарантированное время доставки, низкий приоритет". Насколько это критично и от чего это зависит?
    Зависит от оператора и его сил в конкретном регионе при загрузке в конкретный момент времени, т.е. при недостатке слотов, первое чем оператор пожертвует - это GPRS.

    Цитата Сообщение от eupsychian Посмотреть сообщение
    2) Если предполагается использовать ПМ01 за городом, то "негарантированное время доставки и низкий приоритет" уже уходят на второй план ?
    Тут другой подход: отталкивайтесь от периода опроса. Если ответственное соединение: передача аварии/управляющего воздействия, то я бы предпочел CSD (дозвон модем-модем). Если постоянная диспетчеризация, то можно и GPRS ( учитывая что возможное не продолжительное отсутствие связи не повлечет потери данных или последствий).

    Цитата Сообщение от eupsychian Посмотреть сообщение
    3) В каких пределах может колебаться время доставки?
    Опытным путём: пинг между устройством с проводным интернет и безпроводным около 2х секунд.

    Цитата Сообщение от eupsychian Посмотреть сообщение
    4) При общении с "миром" через GPRS можно использовать любой протокол. Какие преимущества имеет протокол Modbus TCP перед Modbus ASCII ?
    RTU, наверное, не стоит обсуждать, так как условие разделения пакетов по времени (промежуток 3.5 символа) имеет свои грабли при использовании GPRS и вносит некоторые сложности в алгоритм обработки сообщений.
    Любой протокол если ВЫ будете его упаковывать. А так только ModbusTCP. Наш ПЛК+модем передают по ModbusTCP

    Цитата Сообщение от eupsychian Посмотреть сообщение
    5) Как рассчитать кол-во необходимого трафика на какой-то промежуток времени (день, месяц) при отправке пакетов Modbus ASCII по запросу от сервера с определённым интервалом? Сколько байт тратится на обёртки типа TCP/IP и т.д., кроме тех байт, что уходят на Modbus обёртку?
    Все индивидуально и зависит от кол-ва параметров. Для 20 передаваемых регистров у меня за один обмен выходило около 5кб..
    Но это всё индивидуально..

    Цитата Сообщение от eupsychian Посмотреть сообщение
    6) Работа с ПМ01 по RS232 более устойчивая и быстрая чем по RS485 (эхо отключено). Из-за чего это может быть?
    В HyperTerminal'e отвечает сразу, но там скорость посылки команд "вручную" отличается от скорости посылки команд windows программой на порядки. Поэтому это не показатель. Может быть я чего то не учитываю? Где-то на форуме разработчики спрашивали о том, нужен ли 485-ый интерфейс или можно обойтись 232-ым, и кто каким пользуется. МОжет не у меня одного такая проблема с 485-ым ?
    Интерфейсы абсолютно одинаковы - у gsm-модуля вообще он один, просто развязан на 2. Что значит быстрота..при какой длине RS-485 проявляется разница..?

    Цитата Сообщение от eupsychian Посмотреть сообщение
    7) Как устройству общаться с компьютером, если последний "сидит" через прокси ? Есть ли в ПМ01 (SIM300) какие то встроенные функции для общения через прокси или необходимо использовать другие механизмы (вспомогательные протоколы или что-то в этом роде) ?
    Хм..сомневаюсь о данной возможности - у вас же ПК-сервер..постараюсь узнать у SimCom.
    Последний раз редактировалось Илья Кареткин; 04.05.2011 в 13:15.
    "ОВЕН"
    тел.: (495) 221-60-64 доб. 1224
    e-mail: i.karetkin@owen.ru

  2. #2

    По умолчанию

    Цитата Сообщение от Илья Кареткин Посмотреть сообщение
    ...Что значит быстрота..при какой длине RS-485 проявляется разница..?
    Длина кабеля минимальная – 10 см. Это ведь копейки.
    Программу писал как на чистом Си с использованием WinAPI, так и на C# с использованием компонента SerialPort. Когда работаю по 232-му - ответ получаю сразу. Причём ошибки встречаются крайне редко - 1/1000, да даже и того реже.
    Когда работаю по 485-му сразу же чувствуется нестабильность работы.
    В программе на Си эта нестабильность проявляется в следующем:
    1) В ответ приходит абракадабра или ответ "ERROR"
    2) Вообще ничего не приходит. Может таймауты маленькие? Но длинные таймауты не помогают. Пробовал работать через дублирование команд (посылать запрос пока не получу "OK"). Работает, но на каждую команду с несколькими перезапросами уходит время, что неприемлемо. Если находишься в режиме передачи данных AT+CIPSEND - то не понимаешь - перешёл ли модем в режим посылки данных или нет.
    3) Приходит "OK" или другой ответ в зависимости от контекста. Причём у модема бывают периоды обострения, т.е. когда он отвечает успешно на несколько команд подряд, а потом опять себя ведёт не так как надо.
    В программе на C# по событию DataReceived ответы приходят, но такое чувство, что модем получает команду, отвечает на неё, но реагирует на содержание команды не сразу.
    Например, посылая команду "AT+CMGF=0", а потом запрашивая "AT+CMGF?" (переключился ли он в этот режим или нет) обычно заканчивается 3 ситуациями:
    1) Режим сразу же был изменён.
    2) Режим не был изменён и, как показывает практика, не будет изменён, пока не послать "AT+CMGF=0" ещё несколько раз.
    3) Модем вообще ничего не ответил, либо ответил следующую абракадабру:

    Запрос: AT+CMGF=0
    Оmвеm: bcb~0
    Запрос: AT+CMGF?
    Оmвеm: b?gp?3?_?

    Запрос: AT+CMGF=0
    Оmвеm: OK
    Запрос: AT+CMGF?
    Оmвеm: ??A- j; 8?C8??? ?


    Поражает то, что по 232-му всё работает как в сказке!
    И ещё...
    Программы (а точнее их части, отвечающие за приём/передачу через порт) отлично работают с ОВЕН МСД-100 по 485-му интерфейсу!


    Код настройки порта:
    Код:
    HANDLE hSerialPort; // Дескприптор для последовательного порта
    
    BOOL SetDCB() // Настраиваем порт 
      {
        DCB dcbSerialParams = {0};
        dcbSerialParams.DCBlength = sizeof(dcbSerialParams);
        if (!GetCommState(hSerialPort, &dcbSerialParams)) printf("\nError getting serial port state\n");
        dcbSerialParams.BaudRate = CBR_115200;
        dcbSerialParams.ByteSize = 8;
        dcbSerialParams.StopBits = ONESTOPBIT;
        dcbSerialParams.Parity = NOPARITY;
        if (!SetCommState(hSerialPort, &dcbSerialParams)) return FALSE;
        else return TRUE;
      }
    
    BOOL SetTimeOuts() // Устанавливаем таймауты для порта 
      {
        COMMTIMEOUTS timeouts;
        timeouts.ReadIntervalTimeout = 100;
        timeouts.ReadTotalTimeoutMultiplier = 2; 
        timeouts.ReadTotalTimeoutConstant = 100;
        timeouts.WriteTotalTimeoutMultiplier = 0;
        timeouts.WriteTotalTimeoutConstant = 100;
        if (!SetCommTimeouts(hSerialPort, &timeouts)) return FALSE;
        else return TRUE;
      }
    
    void OpenPort(unsigned const char* PortName) // Функция открытия порта
      {
        hSerialPort = CreateFile(PortName, GENERIC_READ | GENERIC_WRITE, 0, 0, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0);
        if (hSerialPort == INVALID_HANDLE_VALUE)
          {
            if (GetLastError() == ERROR_FILE_NOT_FOUND) printf("\nSerial port (%s) doesn't exist\n",PortName);
            else printf("\nError opening serial port (%s)\n",PortName);
          }
        if (SetDCB() == FALSE) printf("\nError setting serial port state (%s)\n",PortName);;
        if (SetTimeOuts() == FALSE) printf("\nError setting serial port timeouts (%s)\n",PortName);;
      }
    
    void ClosePort() // Функция закрытия порта
      {
        CloseHandle(hSerialPort);
      }
    Последний раз редактировалось eupsychian; 10.05.2011 в 01:07.

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •