Страница 3 из 4 ПерваяПервая 1234 ПоследняяПоследняя
Показано с 21 по 30 из 38

Тема: Проблемы MODBUS RS-485 (Modbus.lib) у ПЛК110[M02] при работе с SMSD 1.5

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

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

    По умолчанию

    Цитата Сообщение от Millyvolt2 Посмотреть сообщение
    Вот тут я не знаю, это может вызвать ошибку, если считать 1 регистр а не 2? Там по факту 2 байта используется при делении шага, которое я использую.
    Если смотреть лог шины, то ошибок не возникает после чтения 1 регистра holding.
    Ошибки обмена конечно не будет

    Мне кажется для оценки максимальной скорости нужно сократить объём обмена до минимума, вплоть до одного регистра, и последовательно увеличивать объём обмена (и/или добавления команд записи) до момента возникновения ошибок.
    Не смотрели, какой реальный цикл ПЛК отображается при работе?

  2. #2

    По умолчанию

    Цитата Сообщение от capzap Посмотреть сообщение
    уточнитепро что речь, стандарт modbus, библиотека modbus.lib или прошивка плк ОВЕН?
    библа, пользовательская программа, нижний уровень работы порта

    Цитата Сообщение от capzap Посмотреть сообщение
    какая ошибка приходит, у неё есть название?
    255, 253, 2 ошибки, как правило. Первая - таймаут, вторая, как тут написали, ошибка КС.

    Цитата Сообщение от capzap Посмотреть сообщение
    если за комментируете в кейсах записи условия проверки на ошибку, ошибки исчезнут?
    Если закомментирую, у меня счётчик ошибок не будет работать, ошибки не уйдут

  3. #3

    По умолчанию

    Цитата Сообщение от capzap Посмотреть сообщение
    открыть библиотеку как проект, снять блокировку только для чтения
    как это сделать, не подскажете?

  4. #4

    По умолчанию

    Цитата Сообщение от Millyvolt2 Посмотреть сообщение
    как это сделать, не подскажете?
    кдс2.3 - файл - открыть только выбрать тип файла не про, а либ
    библа откроется также как проект, слева в дереве ПОУ все блоки справа всё как обычно
    Последний раз редактировалось In_Da_Cher_A; 20.04.2023 в 12:03.

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

    По умолчанию

    Цитата Сообщение от Millyvolt2 Посмотреть сообщение
    как это сделать, не подскажете?
    часть первая, открытие: запускаете КДС, выбираете открыть или из меню Файл->Открыть или нажать на иконку папки, далее в выпадающем списке Тип файла выбираете библиотека и ищите в какой папке расположена та самая библиотека
    часть вторая, свойства: по любому ПОУ жмете ПКМ, в контекстном меню выбираете свойства объекта, в появившемся окошке выбираете полный и ставите галку применить ко всем, после этого все файлы доступны для редактирования
    Bad programmers worry about the code. Good programmers worry about data structures and their relationships

    среди успешных людей я не встречала нытиков
    Барбара Коркоран

  6. #6

    По умолчанию

    Снял и распарсил логи на шине MODBUS при параллельной работе с 3мя драйверами.
    лог:

    08 04 02 00 02 e4 f0 00
    08 84 03 d3 03

    03 06 50 0e 00 73 b9 0e запись в регистр TARGET_POS
    03 06 50 0e 00 73 b9 0e эхо от слейва

    03 05 51 00 ff 00 9d 24 запись команды SPIN
    03 05 51 00 ff 00 9d 24 эхо

    07 06 50 0e 00 73 b8 8a
    07 06 50 0e 00 73 b8 8a

    07 05 51 00 ff 00 9c a0
    07 05 51 00 ff 00 9c a0

    08 06 50 0e 00 73 b8 75
    08 06 50 0e 00 73 b8 75

    08 05 51 00 ff 00 9c 5f
    08 05 51 00 ff 00 9c 5f

    03 04 50 37 00 01 90 e6 чтение регистра MOTOR_STATUS
    03 04 02 00 68 c1 1e ответ от слейва
    03 04 50 37 00 01 90 e6
    03 04 02 00 02 41 31

    03 06 50 0e 00 00 f8 eb
    03 06 50 0e 00 00 f8 eb

    03 05 51 00 ff 00 9d 24
    03 05 51 00 ff 00 9d 24

    07 04 50 37 00 01 91 62
    07 04 02 00 02 b0 f1

    07 06 50 0e 00 00 f9 6f
    07 06 50 0e 00 00 f9 6f

    07 05 51 00 ff 00 9c a0
    07 05 51 00 ff 00 9c a0

    08 04 50 37 00 01 91 9d
    08 04 02 00 02 e4 f0

    08 06 50 0e 00 00 f9 90
    08 06 50 0e 00 00 f9 90

    08 05 51 00 ff 00 9c 5f
    08 05 51 00 ff 00 9c 5f

    03 04 50 37 00 01 90 e6
    03 04 02 00 02 41 31
    03 04 50 37 00 01 90 e6
    03 04 02 00 02 41 31

    07 04 50 37 00 01 91 62
    07 04 02 00 02 b0 f1
    07 04 50 37 00 01 91 62
    07 04 02 00 02 b0 f1

    08 04 50 37 00 01 91 9d
    08 04 02 00 68 64 df
    08 04 50 37 00 01 91 9d
    08 04 02 00 02 e4 f0
    08 04 50 37 00 01 91 9d
    08 04 02 00 02 e4 f0


    Здесь что интересно, это разовый цикл для 3х драйверов, и обмен всегда начинается с 3го (ID драйвера), но в самом начале ответ от 8го который приходит только при начале опроса 3го.
    Собственно в этом глюк библы, что ответ предыдущий ответ слейва накладывается на следующий запрос от мастера, при этом дело не в таймингах, задержки разные выставлял.
    Может глюк еще и в драйверах, что я изначально предполагал.
    Последний раз редактировалось Millyvolt2; 10.04.2023 в 13:59.

  7. #7

    По умолчанию

    Всем привет!

    И, возвращаясь к нашим баранам, настроил работу по MODBUS (RS-485, RTU, 115200) с 9ю драйверами SMSD условно параллельно, при этом операции записи/чтения по MODBUS не прерываются другими потоками.
    Вылезает глюк при записи в регистры TARGET_POS ИЛИ ABS (команда write single register), в отладке выглядит так:
    1.png
    постоянно заходит в 26 строчку и выдает ошибку EXC_HW
    сверху видно что буфер корректный, корректность буфера проверил подключившись моксой к линии RS:
    2.png

    Код проекта
    plk_project_mb_manual.zip

    Подскажите пожалуйста куда копать
    Тут как понимаю может сбиваться работа порта ПЛК, или библиотеки Modbus.lib, которую я расшарил, но ничего в ней не менял (пока)

  8. #8

    По умолчанию

    на форуме встречал что меняли очистку данных порта в коде Modbus.lib
    Порт можно попробовать закрывать и заново открывать, но закрытия порта не встречал ни у кого в коде, т.е. никто этим не пользуется

    а также были проблемы при изменении буфера во время записи по модбасу, но у меня буфер не меняется (или я так считаю), это видно в отладке на скрине выше

  9. #9

    По умолчанию

    Помогло переоткрытие порта.
    Интересно что тут на форуме я подобной проблемы ни у кого не встречал.

    Ещё сделал как тут:
    https://owen.ru/forum/showthread.php...l=1#post219530
    а именно поправил 7 строчку

    Код:
    	WHILE SysComRead(ComHandle, ADR(DataBuf[20]), SIZEOF(DataBuf) - 20, 0) <> 0 DO;
    Было бы неплохо если бы представители Овна наконец заметили (т.е. передали бы своим разработчикам) косяк в своей библиотеке, о котором пишут на форуме, когда мусор из порта считывается в рабочий буфер
    Последний раз редактировалось Millyvolt2; 14.11.2023 в 12:38.

  10. #10

    По умолчанию

    Доброго! Хотелось бы поднять данную тему, потому как +DataSize/-DataSize - если честно, некий странный костыль, который - решает некоторые проблемы, но не все. Идя по логике мыслей capzap - объявляем в константах новый чистый массив (например, BufClean: ARRAY[0..255] OF BYTE := 256(0)) и, при начале нового цикла, перед формированием запроса на отправку в порт - принудительно чистимся (то есть, прошлые данные мы уже вычитали, теперь мы хотим снова спросить у оборудования, как дела). Тогда код должен выглядеть следующим образом:

    IF Read = FALSE THEN (* Начало нового цикла обмена *)

    DataBuf := BufClean; (* Наша добавленная строка очистки буфера *)

    (*Далее начинается сборка пакета на запись нового запроса*)

    BrCast := DataBuf[0] = 0;
    IF Mode = MB_RTU THEN
    CrcReg := MB_CRC(ADR(DataBuf), DataSize);
    DataBuf[DataSize] := WORD_TO_BYTE(CrcReg);
    DataBuf[DataSize + 1] := WORD_TO_BYTE(SHR(CrcReg, 8));
    DataSize := DataSize + SIZEOF(CrcReg);
    Read := SysComWrite(ComHandle, ADR(DataBuf), DataSize, 0) = DataSize;
    ELSE
    ...

    Такой вопрос - где сломалась логика?.. В данный момент - буфер постоянно пустой..
    Если чистку мы не инициируем, то, получается все как всех - видим пришедший от оборудования корректный ожидаемый ответ, но, из-за кучи мусора мы не можем корректно завершить цикл (Complete = TRUE, Exception = 0). Само собой, можно оставить, как есть и забирать результаты из "мусора" же, но тогда мы лишаемся возможности вести статистику опросов(сколько раз за время работы модуль не ответил, прочее), не говоря о том, что разбор происходит вручную..
    Последний раз редактировалось Easy_Enemy; 10.07.2025 в 19:46.

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

Похожие темы

  1. ПЛК110 в связке по MODBUS с SMSD 1.5 Modbus ver.2
    от Millyvolt2 в разделе ПЛК1хх [М02]
    Ответов: 9
    Последнее сообщение: 25.12.2022, 15:30
  2. Ошибки в работе Modbus RTU
    от alekstani в разделе Сетевые технологии
    Ответов: 14
    Последнее сообщение: 02.12.2022, 12:56
  3. Ответов: 5
    Последнее сообщение: 18.12.2019, 10:03
  4. Ответов: 2
    Последнее сообщение: 04.06.2019, 16:55
  5. Ответов: 1
    Последнее сообщение: 18.08.2016, 19:19

Ваши права

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