Страница 2 из 4 ПерваяПервая 1234 ПоследняяПоследняя
Показано с 11 по 20 из 37

Тема: MODBUS COM отслеживание записи в канал

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

    По умолчанию

    Цитата Сообщение от RomeoVar Посмотреть сообщение
    Просто Вы как-то раздраженно отвечаете.
    Это не так. Мне искренне жаль, если вам так показалось.

    Если Вы обратите внимание это циклический опрос ТОЛЬКО НА ЧТЕНИЕ, и меня ЭТИ таймауты не интересуют.
    Меня, честно говоря, таймауты тоже не интересуют, и я не написал про них ни слова (до момента, пока их не упомянули вы).
    Я просто обратил ваше внимание, что заданный период опроса не соответствует реально достижимому периоду.
    Этот фактор, соответственно, может повлиять в том числе и на наблюдаемые вами эффекты.

    А Вы ответили вопросом на вопрос.
    К сожалению, не на все вопросы (особенно сложные) удается ответить сразу - иногда требуется сначала что-то уточнить.

    Тут я думаю уже разобрался - я слишком рано сбрасываю триггерную переменную записи в FALSE. Это я в принципе устранил
    Тогда давайте определимся - какой вопрос у вас сейчас остался?
    Почему "вообще ничего не отлавливается" в задаче с периодом вызова 18 мс и отлавливается всё - в задаче с периодом вызова 6 мс?
    Если я правильно интерпретировал вопрос - то выложите ваш проект, пожалуйста, и инструкцию, как с его помощью определить, отлавливаются ли события или нет.

  2. #12

    По умолчанию

    Вобщем с Вашей помощью в проблеме я разобрался.
    Еще раз, кратко, у меня идет обмен по MODBUS с устройствами. Часть каналов опрашиваются циклически с периодом 100мс. из них осуществляется только чтение, запись туда не осуществляется. Это информативные значения.
    В остальные каналы осуществляется запись только по триггерной переменной. Чтение из этих каналов также по триггерной переменной, но чтение, в принципе, нужно только чтобы убедиться что параметр в канал записан.
    Я предполагал что 200мс (цикл вызова задачи визуализации) будет достаточно чтобы записать данные во все каналы. Я почему-то так решил. Поэтому в одном из циклов я триггер поднимал, а уже в следующем сбрасывал.
    Но если прикинуть в среднем на обмен по одному каналу требуется около 20 мс. А я пишу сразу по 10-15 параметров в 2 устройства. Соответственно это 30*20 = 600 мс. минимум. Т.е. все параметры не успели записаться, а я уже флаг сбросил.
    Таким образом я установил задержку на сброс триггерной переменной, чтобы все параметры успели гарантировано записаться.

    Жаль только что нельзя получить инфу выполнилась ли запись в канал или нет через системную переменную. Т.е. вроде как переменные есть, но они динамически меняются и если пакетов много, что записалось - не отловить.

    А вопрос теперь остался один - переменная xError если происходит ошибка при обмене, как долго держит свое значение TRUE?

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

    По умолчанию

    А вопрос теперь остался один - переменная xError если происходит ошибка при обмене, как долго держит свое значение TRUE?
    Формально - она держит свое значение в течение того времени, пока на входе xExecute экземпляра ФБ запроса (ФБ ModbusChannel) остается значение TRUE.
    На практике обычно (но не гарантированно) этим временем является один цикл задачи, в которой происходит обмен.

    Жаль только что нельзя получить инфу выполнилась ли запись в канал или нет через системную переменную. Т.е. вроде как переменные есть, но они динамически меняются и если пакетов много, что записалось - не отловить.
    С помощью стандартных средств это действительно сделать затруднительно - поэтому обычно в таких случаях используют каналы с типом Приложение или библиотеку OwenCommunication.

  4. #14

    По умолчанию

    С помощью стандартных средств это действительно сделать затруднительно - поэтому обычно в таких случаях используют каналы с типом Приложение...
    В настройках канала Есть параметр "Триггер" с вариантами, цикл., передний фронт и приложение. Вы это имели в виду?
    В онлайн справке CODESYS об этом ничего не пишут. И здесь "CDSv3.5_Modbus_v2.0.pdf" ничего нет.
    Где можно почитать или может есть видео с информацией по этому поводу?
    Спасибо
    Насчет OwenCommunication перейти пока не могу. Слишком много переписывать
    Последний раз редактировалось RomeoVar; 25.06.2021 в 18:27.

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

    По умолчанию

    Вы это имели в виду?
    Да.

    Где можно почитать или может есть видео с информацией по этому поводу?
    Простой пример здесь, и дальше смотрите на входы-выходы, которые есть у ModbusChannel (они вам уже знакомы):
    https://faq.codesys.com/pages/viewpa...ageId=24510480

    И здесь "CDSv3.5_Modbus_v2.0.pdf" ничего нет.
    Не соглашусь - там та же ссылка, что я привел выше.

    25-06-2021 19-02-35.png

  6. #16

    По умолчанию

    Да, я на эту библиотеку смотрел IoDrvModbus только я почему-то решил что ее к каналам не "прикрутить", только программно, а у меня уже было все настроено через каналы. А так-то да, она должна мне помочь
    Спасибо

  7. #17

    По умолчанию

    Попробовал я ModbusChannel. При скорости обмена 38400 статус xDone FB не отлавливается. Но дело в том, что у меня настроены каналы на 3 типа: циклический опрос, по переднему фронту и в приложении. Так вот, по переднему фронту, при программной обработке я статус записи отлавливаю, а при записи через приложение - никак не могу. Может это как-то связано с тем что у меня есть каналы, которые опрашиваются по переднему фронту?
    Могу сбросить пример проекта, чтобы было понятно о чем я.

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

    По умолчанию

    Цитата Сообщение от RomeoVar Посмотреть сообщение
    Попробовал я ModbusChannel. При скорости обмена 38400 статус xDone FB не отлавливается. Но дело в том, что у меня настроены каналы на 3 типа: циклический опрос, по переднему фронту и в приложении. Так вот, по переднему фронту, при программной обработке я статус записи отлавливаю, а при записи через приложение - никак не могу. Может это как-то связано с тем что у меня есть каналы, которые опрашиваются по переднему фронту?
    Могу сбросить пример проекта, чтобы было понятно о чем я.
    Выложите пример проекта, удалив из него всё, что не касается рассматриваемого вопроса.

  9. #19

    По умолчанию

    Вот пример. Каналы с 69 по 74.
    Я пытался по всякому ловить xDone. И по триггеру и по состоянию. Никак не получилось. Но через 30 мс. переменнная обновляется
    Вложения Вложения

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

    По умолчанию

    Цитата Сообщение от RomeoVar Посмотреть сообщение
    Вот пример. Каналы с 69 по 74.
    Я пытался по всякому ловить xDone. И по триггеру и по состоянию. Никак не получилось. Но через 30 мс. переменнная обновляется
    Код:
    IF xRdPosReg THEN
    	xSuccess := FALSE;
    	wIntPosPOld := GVL.stServo[1].stRdServo.wP700_IntPosP;
    	GVL.stServo[1].stWrServo.wP700_IntPosP := 4610;
    	GVL.stServo[1].stWrServo.wP765_IntPosDZT := 1000;
    	fbModbusRol(slave := ROL_DORNA, xExecute := xRdPosReg (*!*), iChannelIndex := iCurrentCh);
    	ltTimeOfStart := TargetVars.stRtc.ltSystemTick;
    	xRdPosReg := FALSE;
    	xCount := TRUE;
    	iCntr := iCntr + 1; 
    END_IF
    См. выделенную строку.
    Вы, видимо, считаете, что fbModbusRol выполняется синхронно за один цикл контроллера - поэтому сразу после вызова прерываете его работу.
    Но это не так - блок работает асинхронно.
    Поэтому нужно дождаться сигнала на выходе xDone и только потом прекращать его работу.
    См. демонстрацию:
    https://dropmefiles.com/G7YW7

Страница 2 из 4 ПерваяПервая 1234 ПоследняяПоследняя

Похожие темы

  1. Триггер на чтение Modbus канал
    от Пьер в разделе СПК1хх [М01]
    Ответов: 17
    Последнее сообщение: 03.02.2023, 06:49
  2. Канал ModBus Slave
    от ВладимирВ в разделе Мх110
    Ответов: 1
    Последнее сообщение: 26.02.2020, 15:02
  3. Канал Modbus Slave
    от Sklyar в разделе СПК1хх
    Ответов: 2
    Последнее сообщение: 20.12.2018, 08:56
  4. Буфер записи по modbus
    от Егор_Егор в разделе ПЛК1хх
    Ответов: 9
    Последнее сообщение: 24.08.2018, 09:36
  5. ТРМ200 теряется канал связи RTU Modbus
    от РиссаТС Андрей в разделе Эксплуатация
    Ответов: 5
    Последнее сообщение: 05.03.2015, 17:29

Ваши права

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