Страница 1 из 2 12 ПоследняяПоследняя
Показано с 1 по 10 из 11

Тема: ПЛК210 Глюки опроса

  1. #1

    По умолчанию ПЛК210 Глюки опроса

    Имею ПЛК210, который по RS-485 M(Modbus RTU) опрашивает панель управления ДГУ.
    Опрос в Codesys разбит на три канала (66 регистров, 1 регистр и 7 регистров соответственно).
    Программа в данный момент отлаживается на стенде в офисе и я решил для пущей достоверности имитировать обмен с помощью ПО Modbus Slave, сгенерировав там все необходимые регистры.
    И что я вижу:
    Первый канал на 66 регистров ПЛК не читает, по нему идут ошибки.
    Вторые два канала (на 1 и 7 регистров) читаются отлично.

    После долгих мучений проблема решилась так. Я просто создал еще один такой же к***** скопировал туда все из "неработающего" канала, а первый просто удалил. Ничего больше не менял. И вуаля - все летает.
    Проблема замечена уже во второй раз.
    Сталкивался кто-нибудь? В каком направлении капать?

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

    По умолчанию

    Цитата Сообщение от Задумкин Сергей Посмотреть сообщение
    Имею ПЛК210, который по RS-485 M(Modbus RTU) опрашивает панель управления ДГУ.
    Опрос в Codesys разбит на три канала (66 регистров, 1 регистр и 7 регистров соответственно).
    Программа в данный момент отлаживается на стенде в офисе и я решил для пущей достоверности имитировать обмен с помощью ПО Modbus Slave, сгенерировав там все необходимые регистры.
    И что я вижу:
    Первый канал на 66 регистров ПЛК не читает, по нему идут ошибки.
    Вторые два канала (на 1 и 7 регистров) читаются отлично.

    После долгих мучений проблема решилась так. Я просто создал еще один такой же к***** скопировал туда все из "неработающего" канала, а первый просто удалил. Ничего больше не менял. И вуаля - все летает.
    Проблема замечена уже во второй раз.
    Сталкивался кто-нибудь? В каком направлении капать?
    Добрый день.
    Если проблема повторится еще раз - предлагаю связаться со мной по телеграм (в подписи) и "покопать" вместе.

  3. #3

    По умолчанию

    Цитата Сообщение от Задумкин Сергей Посмотреть сообщение
    Проблема замечена уже во второй раз.
    Сталкивался кто-нибудь? В каком направлении капать?
    С таким же успехом, можно было очистить всё, компилировать всё. А потом перезалить проект в ПЛК.

  4. #4

    По умолчанию

    Добрый день.
    1. Есть ПЛК210-12-CS, СП310 (мастер по отношению к ПЛК, подключен по ModbusTCP).
    Сам ПЛК как мастер опрашивает по TCP и RTU модули ввода-вывода, датчики уровня, загазованности и прочее (из всего этого пока подключена только СП310).
    Для общения с СП310 в узле Ethernet создан ModbusTCP_Slave_Device, в котором 100 Holding-регистров и 160 Input-регистров.
    К Input-регистрам привязаны переменные, которые подготавливает ПО ПЛК.

    2. На этапе отладки связки СП310-ПЛК210 замечено, что один из Input-регистров в старшем байте (биты с 8 по 15) имеет всегда нули. Т.е. в режиме отладки видно, что привязанная переменная имеет значение 43690 (dec). Однако СП310 читает вместо этого значение 170 (dec).
    Отключил СП310, подключил ModbusPoll - то же самое (исключил вариант, что сама панель внутри себя чем то перезаписывает регистр).

    3. Если отвязать переменную от "проблемного" регистра и в режиме отладки принудительно фиксировать значение вручную - все отлично. И СП310 и ModbusPoll читают регистр корректно.

    4. Закомментировал весь код программы. Оставил только одну строчку "w37Value := 43690;". И эту переменную привязал к регистру. Результат такой же - старший байт где то чем то перезаписывается.

    5. Начал последовательно удалять переменные из остальных Input-регистров. И вот что увидел. К первым пяти битам регистра 36, который находится перед "проблемным" 37-мым привязаны переменные типа BOOL (переменные в составе структуры). Вот если эти булевские переменные отвязать, то "проблемный" регистр читается корректно.

    Как бороться? Наблюдаем нечто похожее уже не в первый раз

  5. #5

    По умолчанию

    Цитата Сообщение от capzap Посмотреть сообщение
    либо с адресацией на единицу не угадали, либо помимо этого еще слова(байты) не перевернули
    В этом плане всё в порядке. Все остальные регистры панелью читаются корректно и интерпретируются как надо.

  6. #6

    По умолчанию

    Это называется выравнивание, в вашем случае, при использовании структуры, выравнивание может сдвинуть адреса от 1 до 4 регистров вроде.
    Здесь показано выравнивание на примере BYTE, WORD, DWORD
    https://owen.ru/forum/showthread.php...age=1042#10416

    В СDS3.5 так же как в 2.3 работает, в ПЛК слейве.
    Проверить можно, создав в панели тиражированием, штук 8 дисплеев, с адресами по порядку, вернуть структуру и смотреть в какой адрес пишется ваш регистр.
    Последний раз редактировалось kondor3000; Вчера в 15:41.

  7. #7

    По умолчанию

    Да, смотрите внимательно. Где то что то забыли. У меня такая же структура сети, всё работает. Была одна проблема при переходе с 14 версии кодесиса на 17, там надо было байты в словах поменять местами.

  8. #8

    По умолчанию

    Цитата Сообщение от kondor3000 Посмотреть сообщение
    Это называется выравнивание, в вашем случае, при использовании структуры, выравнивание может сдвинуть адреса от 1 до 4 регистров вроде.
    Здесь показано выравнивание на примере BYTE, WORD, DWORD
    https://owen.ru/forum/showthread.php...age=1042#10416

    В СDS3.5 так же как в 2.3 работает, в ПЛК слейве.
    Проверить можно, создав в панели тиражированием, штук 8 дисплеев, с адресами по порядку, вернуть структуру и смотреть в какой адрес пишется ваш регистр.
    Да, я подозревал выравнивание памяти в структуре, читал про это.
    Была структура данных для чтения панелью СП310. В структуре были вперемешку и WORD, и BOOL, плюс еще объединения. Убрал все BOOL и упаковал в прорамме их все в WORD'ды. Проблема решилась.
    Все равно не очень понимаю сути, как влияет привязка булевской переменной к полю bit в регистре ModbusTCP_Slave_Device на другой регистр. Для чего тогда эти поля бит нужны в регистрах?
    Я ведь когда читаю из модуля ввода битовую маску, я присваиваю битовым полям булевские переменные, которые в свою очередь также упакованы в структуры. Так тоже получается нехорошо делать?

  9. #9
    Пользователь
    Регистрация
    27.11.2011
    Адрес
    Краснодар
    Сообщений
    10,667

    По умолчанию

    Ставите переменные бит, поставьте сразу 8 или 16, даже если не будете использовать все.
    Так как именно так ПЛК и выровнять до 8 или до 16 если последующая real

  10. #10

    По умолчанию

    Цитата Сообщение от Stanislav_Y Посмотреть сообщение
    Все равно не очень понимаю сути, как влияет привязка булевской переменной к полю bit в регистре ModbusTCP_Slave_Device на другой регистр. Для чего тогда эти поля бит нужны в регистрах?
    Я ведь когда читаю из модуля ввода битовую маску, я присваиваю битовым полям булевские переменные, которые в свою очередь также упакованы в структуры. Так тоже получается нехорошо делать?
    Структура из Маски типа WORD - занимает в памяти 2 байта, все норм, скрин 1 Размер структуры.jpg
    а вот структура из 8 бит типа BOOL - занимает целых 8 байт.
    Если будет нечётное количество BOOL , то и байт будет не четное, соответственно, может залезть на следующую переменную, а точнее сдвинуть её адрес.
    Размер структуры измеряю через SIZEOF, вот и думайте что лучше.
    Последний раз редактировалось kondor3000; Вчера в 21:49.

Страница 1 из 2 12 ПоследняяПоследняя

Похожие темы

  1. Ответов: 7
    Последнее сообщение: 08.12.2023, 08:54
  2. Ответов: 1
    Последнее сообщение: 05.03.2020, 08:38
  3. Глюки в 1.3.22b
    от Андрей555 в разделе Программируемые реле
    Ответов: 20
    Последнее сообщение: 21.10.2011, 16:25
  4. глюки плк
    от bango в разделе ПЛК1хх
    Ответов: 9
    Последнее сообщение: 24.05.2010, 23:44
  5. Глюки
    от Milchuk в разделе ПЛК1хх
    Ответов: 3
    Последнее сообщение: 29.11.2007, 12:08

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

Ваши права

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