Страница 13 из 13 ПерваяПервая ... 3111213
Показано с 121 по 128 из 128

Тема: СПК1хх и Модбас

  1. #121

    По умолчанию

    Вдогонку еще один вопрос. К ethernet порту необходимо подключить более десяти устройств с различными IP, хотелось бы для каждого сконфигурировать своего мастера-так удобнее и нагляднее работать дальше. В стандартной конфигурации при добавлении TCP мастеров(или любых устройств) снова ограничение не больше десяти. Что это значит, это как-то лечится? Среда Codesys V3.5 SP5 Patch 3.Target: SPK 2xx.03.CS.WEB 3.5.4.20

  2. #122
    Супер Модератор Аватар для Евгений Кислов
    Регистрация
    27.01.2015
    Адрес
    Москва
    Сообщений
    12,064

    По умолчанию

    Цитата Сообщение от НикПавл Посмотреть сообщение
    Вдогонку еще один вопрос. К ethernet порту необходимо подключить более десяти устройств с различными IP, хотелось бы для каждого сконфигурировать своего мастера-так удобнее и нагляднее работать дальше. В стандартной конфигурации при добавлении TCP мастеров(или любых устройств) снова ограничение не больше десяти. Что это значит, это как-то лечится? Среда Codesys V3.5 SP5 Patch 3.Target: SPK 2xx.03.CS.WEB 3.5.4.20
    Нет, это ограничение среды программирования.

  3. #123

    По умолчанию

    понятно, спасибо

  4. #124

    По умолчанию

    Подскажите пожалуйста!

    Следующая идея жизнеспособна ли?

    С помощью библ Modbus опрашиваю MB-slave. И хочу сделать так: использовать один экземпляр ФБ "MB_RD_HOLD_REGS", но вызывать его как-нибудь поочередно с разными начальными регистрами.
    далее содержимое буфера перекладывал бы уже в разные GVL переменные.

    т.е. на цикле 1 ФБ "MB_RD_HOLD_REGS" обращается к регистру например 1001,
    на цикле 2 ФБ "MB_RD_HOLD_REGS" - к регистру 1002
    ...
    на цикле 10 ФБ "MB_RD_HOLD_REGS" - к регистру 1010
    и тд.

    сделал. но с 1-2 регистрами проблем (видимых) нет когда сделал больше уже началось: появляются какие-то совсем левые значения, значения с от первого вызова попадают в переменную третьего и тд.

    Ну и вопрос как правильно сделать переход к следующему регистру, какую делать паузу (и надо ли) между опросом регистров?
    или задумка вкорне не верна и строго 1 экземпяр ФБ - 1 запрос к slave?

  5. #125

    По умолчанию

    Дождаться прочтения регистра по флагу и только после этого переходить к следующему регистру.
    В руководстве.... это подробно расписано.

  6. #126

    По умолчанию

    так в том и дело, что как в руководстве с двумя разными экземплярами проблем нет. а тут и буфер один и ...

  7. #127
    Пользователь
    Регистрация
    10.11.2014
    Адрес
    Санкт-Петербург
    Сообщений
    980

    По умолчанию

    Посмотрите вот тут.
    Эта библиотека сделана для v2, но она легко переписывается (и я ее уже переписал для себя) на версию 3.

  8. #128

    По умолчанию

    Доброго времени суток!
    Товарищи, подскажите кто и как делает контроль связи при использовании modbus.lib ??

    Я реализовал так:
    Вычитываю фиксированную переменную (адрес/slave id) с устройства (все тот же danfoss FC051 он же ПЧВ1), сбрасывая в ноль перед чтением и сравниваю потом с константой (=так же Slave ID)

    SlaveID:=0; // Сброс в 0, для каждый цикл

    IF enable THEN up:=FALSE; // Проверяем стартовое условие, если FALSE - ничего дальше не делаем
    IF Write_Command <> Prev_Command THEN ex:=81; END_IF; // Проверяем наличие команд на запись
    CASE ex OF // Последовательный опрос регистров

    0: BlockRead ....


    50:
    BlockRead (Enable:=Enable, Mode:=MB_RTU, DevAddr:=DevAdr, FirstAddr:=8309, Quantity:=1, ComHandle:=CHandle, TimeOut:=TOut, Buffer:=abyRead_buffer);
    IF BlockRead.Complete THEN
    IF BlockRead.Exception=0 THEN
    //B2W.IN2Byte[0]:=abyRead_buffer[1];
    //B2W.IN2Byte[1]:=abyRead_buffer[0];
    SlaveID:=abyRead_buffer[1]; // передаю в переменную вычитанное значение из буфера
    END_IF;
    т.е. по моей задумке в теле ФБ, где все это сделано, сначала значение сбрасывается в 0, потом принимает вычитанное из устройство значение и идет дальше на выход и сравнение.

    Это все работает. Но
    большое НО - бывает значение не обновляется до полуминуты (30 секунд) - уже в CFC блоком TON это отслеживаю.
    И так как бы по всем переменным. Программа в целом работает, опрашивает, но вот по ходу это самое условие не всегда срабатывает:
    IF BlockRead.Complete THEN
    IF BlockRead.Exception=0 THEN
    Как можно соптимизировать?
    - пробовал "играть" временем цикла задачи от 2 до 20 мс (как понимаю это фактически интервал между соседними запросами к устройству, от перехода к след условию CASE)
    - делал паузу до 3 сек после завершения всего опроса
    - да, с точки зрения минимизации запросов-ответов у меня не правильно: 16 запросов в основном по 1 регистру. но по другому ни как: у устройства не сквозная карта памяти, идет ошибка при попытки считать "соседние" регистры. но даже при этом не также все плохо должно быть...

    кардинально изменений можно сказать нет ((

    видел тут статистику/расчеты на запрос-получение одного регистра и нескольких - помогите мне тоже укладываться хотя бы в 500ms.

Страница 13 из 13 ПерваяПервая ... 3111213

Похожие темы

  1. СПК1хх - Линейка панельных контроллеров для локальных систем.
    от Александр Приходько в разделе СПК1хх
    Ответов: 333
    Последнее сообщение: 30.03.2015, 08:42
  2. СПК1ХХ вебинар download
    от Евгений_Томск в разделе СПК1хх
    Ответов: 2
    Последнее сообщение: 04.05.2013, 19:16
  3. модбас мастер
    от rovki в разделе Трёп (Курилка)
    Ответов: 46
    Последнее сообщение: 21.04.2013, 16:15
  4. Работа с модбас
    от alek4322 в разделе ПЛК1хх
    Ответов: 11
    Последнее сообщение: 26.03.2012, 09:06

Ваши права

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