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

Тема: C#, ТРМ200, протокол OWEN, проблема с многопоточностью

  1. #1

    По умолчанию C#, ТРМ200, протокол OWEN, проблема с многопоточностью

    Добрый день!
    Имеется ТРМ200, подключённый через адаптер USB к компьютеру (определяется как COM-порт).
    Необходимо считывать показания датчика температуры каждые n секунд в отдельном от основной программы потоке (т.к. программа параллельно также общается с другими приборами).

    Проблема в следующем:
    Если подключаться к устройству и считывать данные в одном потоке, то всё хорошо, если же подключаться в одном потоке, а пытаться считать данные в другом, то возникает ошибка код -2 (port not opened).

    Подскажите, в чём может быть проблема?
    Используется протокол OWEN, язык C#, VS2015.

  2. #2
    Пользователь
    Регистрация
    08.12.2014
    Адрес
    г.Тейково Ивановской обл.
    Сообщений
    236

    По умолчанию

    Добрый день!
    Предположу, что нужно открывать порт перед операцией обмена с прибором и закрывать его после выполнения обмена.
    С уважением

  3. #3

    По умолчанию

    Не исключена ситуация, когда n=1, а то и меньше, в этом случае придётся открывать-закрывать порт чаще, чем раз в секунду, а это, на мой взгляд, не очень хорошо.

    С такой ситуацией столкнулся впервые, с другими приборами подключаюсь в основном потоке, и соединение активно, пока жив основной поток. Правда, остальные приборы подключаются не по протоколу OWEN.

  4. #4
    Пользователь
    Регистрация
    08.12.2014
    Адрес
    г.Тейково Ивановской обл.
    Сообщений
    236

    По умолчанию

    Уважаемый iwannahaveanck для обмена с приборами что используете ОРС сервер или библиотеку ввода/вывода ОВЕН?
    ОРС сервер при работе по протоколу OWEN монопольно захватывает порт.
    С уважением

  5. #5

    По умолчанию

    kon48, использую библиотеку ввода/вывода owen_io.dll

  6. #6
    Пользователь
    Регистрация
    08.12.2014
    Адрес
    г.Тейково Ивановской обл.
    Сообщений
    236

    По умолчанию

    iwannahaveanck, по своему опыту использования библиотеки ввода/вывода owen_io.dll проблем не было.
    К слову, Вы говорите, что не резон часто открывать и закрывать порт можно ы с этим и согласиться, но проводил оценку
    времени операций ввода/вывода с приборами и операцию открытия/закрытия порта так оказалось, что последние не съедают
    много времени. Например, в зависимости от быстродействия ПК у меня суммарное время операций опроса 6 приборов разных типов (ТРМ201, ТРМ210, ТРМ138, ТРМ148, ТРМ251)
    составляет 0,77 ... 0,82 сек для быстрого ПК и 1,81... 2,41 сек для медленного ПК. А паспортное время опроса этих приборов задается в диапазоне 0,8...1,0 сек.
    Т.е. по идее цикл опроса прибора в программе пользователя не должен быть меньше. При ошибках обмена время опроса (работы) прибора увеличивается раза в три.
    Это внутренний алгоритм работы прибора вносит такую задержку. Потребное время цикла опроса приборов рассчитываю на наихудший случай.
    Поэтому в своих программах перед циклом опроса приборов открываю порт и закрываю его после завершения операций работы с приборами.
    Использую почти все функции библиотеки вплоть до анализа аварийных ситуаций.
    С уважением

  7. #7

    По умолчанию

    kon48, спасибо за ответ!
    Если не удастся разобраться с этой проблемой, видимо, придётся открывать-закрывать порт и поставить скорость опроса раз в 1.5 или 2 секунды.

  8. #8
    Пользователь
    Регистрация
    08.12.2014
    Адрес
    г.Тейково Ивановской обл.
    Сообщений
    236

    По умолчанию

    Уважаемый iwannahaveanck удалось ли решить проблему. Если удалось поделитесь опытом.
    С уважением

  9. #9

    По умолчанию

    Добрый день, kon48.
    Проблему решить не удалось, приходится открывать-закрывать порт.
    Похоже, что работа с прибором должна производиться только в том потоке, из которого был открыт порт.

  10. #10
    Пользователь
    Регистрация
    02.03.2015
    Адрес
    г. Алексеевка
    Сообщений
    64

    По умолчанию

    Вообще сделайте поток для чтения /записи и к нему менеджер или очередь и хоть из ста потоков общайтесь с ком портом через этот менеджер. а так да только в том потоке в котором открыт порт можно с ним работать. А вообще сделайте таймер и по таймеру останавливайте опрос приборов опросите нужное и продолжите откуда остановились в одном потоке. это самый простой вариант

Похожие темы

  1. ПЛК 63 + МДВВ и протокол OWEN NET
    от RusskiIvan в разделе ПЛК63/73
    Ответов: 3
    Последнее сообщение: 08.05.2016, 13:58
  2. СПК 107 slave протокол owen
    от Camypau в разделе СПК1хх
    Ответов: 4
    Последнее сообщение: 24.07.2015, 11:17
  3. Owen протокол и IBM PC - предлохение
    от asv в разделе Сетевые технологии
    Ответов: 3
    Последнее сообщение: 30.10.2011, 10:39
  4. Owen Process Manager + ТРМ200 + АС4
    от ANATOL2 в разделе Эксплуатация
    Ответов: 0
    Последнее сообщение: 09.02.2010, 14:16
  5. Протокол Owen для Codesys?
    от Vit74 в разделе Трёп (Курилка)
    Ответов: 7
    Последнее сообщение: 10.02.2009, 09:51

Метки этой темы

Ваши права

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