Просмотр полной версии : Проблемы MODBUS RS-485 (Modbus.lib) у ПЛК110[M02] при работе с SMSD 1.5
Millyvolt2
10.04.2023, 01:04
Здравствуйте!
При работе с одним драйвером SMSD связь с ПЛК происходит без ошибок. Использую команды записи позиции, вращения двигателя (SPIN) и чтения статуса, 3 команды + 3 в обратном направлении, один такой цикл на один драйвер.
Если добавить работу с еще одним драйвером, то ошибки появляются при связи с первым.
Это при последовательной работе с драйверами, но необходима их параллельная работа, и, когда процессы распараллеливаются, количество ошибок увеличивается, что влияет на тайминги.
Нужно поднять параллельную работу не с 2мя, а с 8 устройствами, и тут большой вопрос, насколько "хорошо" будет чувствовать себя ПЛК в части работы MODBUS.
Откуда берутся проблемы, можно только догадываться, это может быть библиотека Modbus.lib или нижний уровень работы порта RS-485 или глюки работы пользовательской программы, залитой в ПЛК.
Про пользовательскую программу не просто так упоминаю, т.к. при добавлении кода, не задействованного в программе (CASE который не обслуживатся) примерно на сотню строк появляются ошибки на шине, которых до этого не было.
Второй вопрос, подскажите пожалуйста правильную процедуру заливки ПО микроконтроллера ПЛК, особой надежды что это поможет нет, но попробовать смысл есть.
В руководстве, как я понял, там для более старой версии ПЛК, поэтому не хотелось бы вывести его из строя.
Все необходимые данные и файлы выложу здесь, код выложу завтра и версию внутреннего ПО ПЛК также напишу.
krollcbas
10.04.2023, 07:19
Интересная тема. Тоже как-то делал проект с ШД от Электропривод, но не с Modbus. Были импульсные с драйверами.
Можете нарисовать/описать следующее:
1. Как все подключено, каким проводом, есть ли оконечные резисторы, как именно проложена шина Modbus в шкафу, есть ли экран
2. Возможно ли приложить скрины этих ошибок
3. Возможно ли попробовать опрашивать через конфигуратор
4. Возможно ли распределить опрос устройств через два порта
In_Da_Cher_A
10.04.2023, 09:00
Второй вопрос, подскажите пожалуйста правильную процедуру заливки ПО микроконтроллера ПЛК, особой надежды что это поможет нет, но попробовать смысл есть.
В руководстве, как я понял, там для более старой версии ПЛК, поэтому не хотелось бы вывести его из строя.а вы как делаете?
и почему вы считаете, что загрузка проекта в ПЛК способна вывести его из строя?
код выложу завтра и версию внутреннего ПО ПЛК вот даже интересно стало - что такое код и что такое версия внутреннего ПО, применительно к ПЛК110 и чем они отличаются?
Millyvolt2
10.04.2023, 11:11
Интересная тема. Тоже как-то делал проект с ШД от Электропривод, но не с Modbus. Были импульсные с драйверами.
Можете нарисовать/описать следующее:
1. Как все подключено, каким проводом, есть ли оконечные резисторы, как именно проложена шина Modbus в шкафу, есть ли экран
2. Возможно ли приложить скрины этих ошибок
3. Возможно ли попробовать опрашивать через конфигуратор
4. Возможно ли распределить опрос устройств через два порта
1. Подключено шлейфом параллельно, включены терминаторы на крайних драйверах, на самом деле пробовали их отключать и ставить выводные резисторы. Много экспериментировали с линией, смотрели осциллографом, грешили и на драйверы в том числе, но по итогу всех эксприментов стало понятно что дело всё таки в ПЛК.
2. Ошибки 255 и 253, код последней не найти в описаниях ПЛК110, библиотеки Modbus.lib и драйверов SMSD. Скрины приложить можно)
3. Через конфигуратор драйверы SMSD вообще не отвечают.
4. На 2 порта раскидывать смысла нет, т.к. на одном порту получится 4 устройства, а ошибки появляются уже с 2мя.
Millyvolt2
10.04.2023, 11:14
а вы как делаете?
и почему вы считаете, что загрузка проекта в ПЛК способна вывести его из строя?
вот даже интересно стало - что такое код и что такое версия внутреннего ПО, применительно к ПЛК110 и чем они отличаются?
Я никак не делаю, задал вопрос в теме как прошить.
Легко можно убить любое устройство неправильным способом прошивки.
Если вы понимаете что представляет собой ПЛК, это коробочка с микроконтроллером STM32 внутри, в который шьётся бинарник, он же исполняемый файл, у которого есть версия, а есть пользовательский код, который пишется в Codesys.
Millyvolt2
10.04.2023, 11:14
Вопрос к представителям Овен или к разбирающимся, подскажите плиз как корректно прошить ПЛК110[M02]
PLCInfo
PLC model MODEL PLC 110-30
Версия ПО метр: 2.0
Binary VERSION 1.2.42
Need Target version >= 3.12
Compiled: 14:34:36 Feb 8 2021
STM32 binary version 115
MAC E4:1E:0A:02:A7:9C
IP 10.0.6.10
GATE 10.0.6.1
MASK 255.255.255.0
Похоже что у меня последняя версия прошивки 1.2.42, по крайней мере она на сайте лежит.
In_Da_Cher_A
10.04.2023, 11:52
Я никак не делаю, задал вопрос в теме как прошить.
Легко можно убить любое устройство неправильным способом прошивки.
Если вы понимаете что представляет собой ПЛК, это коробочка с микроконтроллером STM32 внутри, в который шьётся бинарник, он же исполняемый файл, у которого есть версия, а есть пользовательский код, который пишется в Codesys.
мы все здесь немножко кое-что понимаем
я просто не совсем понял, зачем лезть в перепрошивку нового ПЛК, если проблемы в программе
за всё время только раз возникла необходимость и то, на старом ПЛК-160
Millyvolt2
10.04.2023, 12:24
мы все здесь немножко кое-что понимаем
я просто не совсем понял, зачем лезть в перепрошивку нового ПЛК, если проблемы в программе
за всё время только раз возникла необходимость и то, на старом ПЛК-160
Перепрошивка больше для галочки, чтобы это реально помогло, надо разработчикам Овена исправить проблемы и выпустить новую версию прошивки.
glazastik
10.04.2023, 12:44
если исключить пока плк110? Связать линию SMSD с ПК и начать опрашивать через их приложение или modbuspoll. Тогда всё стабильно работает?
In_Da_Cher_A
10.04.2023, 13:00
надо разработчикам Овена исправить проблемы и выпустить новую версию прошивки.довольно сильное заявление:)
Перепрошивка больше для галочки
что-то я не уверен, что выполнение языческих ритуалов есть панацея
но как вижу, ваше кунг-фу сильнее моего, поэтому постою послушаю в сторонке
Связать линию SMSD с ПКесли мне не изменяет память, в контроллер грузится своя программа для управления двигателем? почему в ней не может быть проблем?
1. Подключено шлейфом параллельно, включены терминаторы на крайних драйверах, на самом деле пробовали их отключать и ставить выводные резисторы. Много экспериментировали с линией, смотрели осциллографом, грешили и на драйверы в том числе, но по итогу всех эксприментов стало понятно что дело всё таки в ПЛК.
2. Ошибки 255 и 253, код последней не найти в описаниях ПЛК110, библиотеки Modbus.lib и драйверов SMSD. Скрины приложить можно)
3. Через конфигуратор драйверы SMSD вообще не отвечают.
4. На 2 порта раскидывать смысла нет, т.к. на одном порту получится 4 устройства, а ошибки появляются уже с 2мя.
Скорость обмена по RS-485 какая ?
Каким образом собираетесь организовать параллельную работу драйверов ?
1. Подключено шлейфом параллельно, включены терминаторы на крайних драйверах, на самом деле пробовали их отключать и ставить выводные резисторы. Много экспериментировали с линией, смотрели осциллографом, грешили и на драйверы в том числе, но по итогу всех эксприментов стало понятно что дело всё таки в ПЛК.
2. Ошибки 255 и 253, код последней не найти в описаниях ПЛК110, библиотеки Modbus.lib и драйверов SMSD. Скрины приложить можно)
3. Через конфигуратор драйверы SMSD вообще не отвечают.
4. На 2 порта раскидывать смысла нет, т.к. на одном порту получится 4 устройства, а ошибки появляются уже с 2мя.
253 это вроде ошибка контрольной суммы
Millyvolt2
10.04.2023, 13:05
мы все здесь немножко кое-что понимаем
я просто не совсем понял, зачем лезть в перепрошивку нового ПЛК, если проблемы в программе
за всё время только раз возникла необходимость и то, на старом ПЛК-160
Перепрошивка больше для галочки, чтобы это реально помогло, надо разработчикам Овена исправить проблемы и выпустить новую версию прошивки.
Millyvolt2
10.04.2023, 13:21
прежде чем кому то прошивку выпускать, может мы убедимся что в Вашем проекте запросы к обоим слейвам не в одном цикле запускаются. Где обещанное вложение проектов?
Учитывая множество сообщений на форуме относительно глюков MODBUS и RS-485, Овну следует задуматься об улучшении работы их продукта. Вы представитель?
Проект для ПЛК110[M02] прилагаю
Millyvolt2
10.04.2023, 13:21
Скорость обмена по RS-485 какая ?
Каким образом собираетесь организовать параллельную работу драйверов ?
Параллельная работа организована в коде проекта, выложил в посте выше
Millyvolt2
10.04.2023, 13:25
если исключить пока плк110? Связать линию SMSD с ПК и начать опрашивать через их приложение или modbuspoll. Тогда всё стабильно работает?
Есть лог шины при работе без ошибок на одном драйвере, сниму лог с ошибками для 3х драйверов и выложу тут.
P.S. можно тут как то объединять посты?)
253 это вроде ошибка контрольной суммы
Любопытно, тут надо смотреть логи
Millyvolt2
10.04.2023, 13:54
Снял и распарсил логи на шине 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го.
Собственно в этом глюк библы, что ответ предыдущий ответ слейва накладывается на следующий запрос от мастера, при этом дело не в таймингах, задержки разные выставлял.
Может глюк еще и в драйверах, что я изначально предполагал.
Есть лог шины при работе без ошибок на одном драйвере, сниму лог с ошибками для 3х драйверов и выложу тут.
P.S. можно тут как то объединять посты?)
Любопытно, тут надо смотреть логи
Что там любопытного, если пакеты путаются.
Учитывая множество сообщений на форуме относительно глюков MODBUS и RS-485, Овну следует задуматься об улучшении работы их продукта. Вы представитель?
Проект для ПЛК110[M02] прилагаю
Не лучше ли читать все holdihg регистры одним запросом, а потом выбрать нужные данные?
Задача с циклом в 1мс с копированием значений с аналогового модуля - зачем она?
Ну и некоторые значения в SMSD читаете 1 регистром, но в руководстве на SMSD они указаны как 32битные (0x5006, 0x500E).
Millyvolt2
12.04.2023, 12:47
Не лучше ли читать все holdihg регистры одним запросом, а потом выбрать нужные данные?
Данный код тестовый, чтобы оценить тайминги, на которые можно рассчитывать используя Овен и Modbus.lib. Далее логика будет усложняться и считывание ABS и MOTOR_STATUS будет происходить в разное время.
Задача с циклом в 1мс с копированием значений с аналогового модуля - зачем она?
Она будет наполняться
Ну и некоторые значения в SMSD читаете 1 регистром, но в руководстве на SMSD они указаны как 32битные (0x5006, 0x500E).
Вот тут я не знаю, это может вызвать ошибку, если считать 1 регистр а не 2? Там по факту 2 байта используется при делении шага, которое я использую.
Если смотреть лог шины, то ошибок не возникает после чтения 1 регистра holding.
Millyvolt2
12.04.2023, 12:51
уточнитепро что речь, стандарт modbus, библиотека modbus.lib или прошивка плк ОВЕН?
библа, пользовательская программа, нижний уровень работы порта
какая ошибка приходит, у неё есть название?
255, 253, 2 ошибки, как правило. Первая - таймаут, вторая, как тут написали, ошибка КС.
если за комментируете в кейсах записи условия проверки на ошибку, ошибки исчезнут?
Если закомментирую, у меня счётчик ошибок не будет работать, ошибки не уйдут
Вот тут я не знаю, это может вызвать ошибку, если считать 1 регистр а не 2? Там по факту 2 байта используется при делении шага, которое я использую.
Если смотреть лог шины, то ошибок не возникает после чтения 1 регистра holding.
Ошибки обмена конечно не будет
Мне кажется для оценки максимальной скорости нужно сократить объём обмена до минимума, вплоть до одного регистра, и последовательно увеличивать объём обмена (и/или добавления команд записи) до момента возникновения ошибок.
Не смотрели, какой реальный цикл ПЛК отображается при работе?
1. Подключено шлейфом параллельно, включены терминаторы на крайних драйверах, на самом деле пробовали их отключать и ставить выводные резисторы. Много экспериментировали с линией, смотрели осциллографом, грешили и на драйверы в том числе, но по итогу всех эксприментов стало понятно что дело всё таки в ПЛК.
2. Ошибки 255 и 253, код последней не найти в описаниях ПЛК110, библиотеки Modbus.lib и драйверов SMSD. Скрины приложить можно)
3. Через конфигуратор драйверы SMSD вообще не отвечают.
4. На 2 порта раскидывать смысла нет, т.к. на одном порту получится 4 устройства, а ошибки появляются уже с 2мя.
Что значит - "Подключено шлейфом параллельно"?. RS485 это последовательный интерфейс.
И как Вы хотите опрашивать 8 устройств параллельно? Модбус - последовательный протокол, запрос - ответ.
Millyvolt2
20.04.2023, 11:30
открыть библиотеку как проект, снять блокировку только для чтения
как это сделать, не подскажете?
In_Da_Cher_A
20.04.2023, 11:50
как это сделать, не подскажете?кдс2.3 - файл - открыть только выбрать тип файла не про, а либ
библа откроется также как проект, слева в дереве ПОУ все блоки справа всё как обычно
как это сделать, не подскажете?
часть первая, открытие: запускаете КДС, выбираете открыть или из меню Файл->Открыть или нажать на иконку папки, далее в выпадающем списке Тип файла выбираете библиотека и ищите в какой папке расположена та самая библиотека
часть вторая, свойства: по любому ПОУ жмете ПКМ, в контекстном меню выбираете свойства объекта, в появившемся окошке выбираете полный и ставите галку применить ко всем, после этого все файлы доступны для редактирования
Millyvolt2
12.11.2023, 17:54
Всем привет!
И, возвращаясь к нашим баранам, настроил работу по MODBUS (RS-485, RTU, 115200) с 9ю драйверами SMSD условно параллельно, при этом операции записи/чтения по MODBUS не прерываются другими потоками.
Вылезает глюк при записи в регистры TARGET_POS ИЛИ ABS (команда write single register), в отладке выглядит так:
71532
постоянно заходит в 26 строчку и выдает ошибку EXC_HW
сверху видно что буфер корректный, корректность буфера проверил подключившись моксой к линии RS:
71533
Код проекта
71534
Подскажите пожалуйста куда копать
Тут как понимаю может сбиваться работа порта ПЛК, или библиотеки Modbus.lib, которую я расшарил, но ничего в ней не менял (пока)
Millyvolt2
12.11.2023, 17:57
на форуме встречал что меняли очистку данных порта в коде Modbus.lib
Порт можно попробовать закрывать и заново открывать, но закрытия порта не встречал ни у кого в коде, т.е. никто этим не пользуется
а также были проблемы при изменении буфера во время записи по модбасу, но у меня буфер не меняется (или я так считаю), это видно в отладке на скрине выше
Millyvolt2
14.11.2023, 12:36
Помогло переоткрытие порта.
Интересно что тут на форуме я подобной проблемы ни у кого не встречал.
Ещё сделал как тут:
https://owen.ru/forum/showthread.php?t=25120&p=219530&viewfull=1#post219530
а именно поправил 7 строчку
WHILE SysComRead(ComHandle, ADR(DataBuf[20]), SIZEOF(DataBuf) - 20, 0) <> 0 DO;
Было бы неплохо если бы представители Овна наконец заметили (т.е. передали бы своим разработчикам) косяк в своей библиотеке, о котором пишут на форуме, когда мусор из порта считывается в рабочий буфер
Easy_Enemy
10.07.2025, 19:43
Доброго! Хотелось бы поднять данную тему, потому как +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). Само собой, можно оставить, как есть и забирать результаты из "мусора" же, но тогда мы лишаемся возможности вести статистику опросов(сколько раз за время работы модуль не ответил, прочее), не говоря о том, что разбор происходит вручную..
DataBuf := BufClean; (* Наша добавленная строка очистки буфера *)
..
Просто бессмысленный бред. Какой смысл этого действа?
Easy_Enemy
12.07.2025, 17:22
Промахнулся темой слегка, к сожалению их хватает (про проблемы modbus.lib)
Просто бессмысленный бред. Какой смысл этого действа?
В данный момент, хотел поднять вопрос, что, при опросе нескольких устройств, в буфере остаются данные, которые портят пакет. Конкретнее:
1. Опрашиваем 1 инпут рег от устройства - 1. Получаем в порт 7 байт данных (то, что и ожидали). Пакет разобрали.
2. Опрашиваем 2 инпут рега от устройства - 2. Получаем в порт 9 байт данных (то, что и ожидали). Пакет разобрали.
3. Снова опрашиваем по пункту 1, но, в данный момент у нас в буффере уже лежат лишние 2 байта данных от предыдущего запроса (банально - пакет длинее). Соответственно, ответ мы получили, данные там лежат, но мы ждали другой пакет (меньший).
Вопрос про корректную чистку буффера перед каждым новом опросом. Бессмысленный бред предполагал обнуление буффера, но не понимаю, почему он чистый постоянно, по логике, он должен обнуляться 1 раз перед его формированием..
Вопрос про корректную чистку буффера перед каждым новом опросом.
Так подключить SysLibMem и взять обычный вызов MemSet()
Или не подходит?
Вот так: MemSet(ADR(arrData), SIZEOF(arrData), 0);
Вот у меня пост про память и переменные и буферы есть: https://cs-cs.net/codesys-kultura-koda-peremenniye-granicy-massivov#4 - там я описал все подробнее.
МихаилГл
12.07.2025, 17:49
Не помню уже, но вот у меня с memset вроде не получалось, не стал долго искать решение, взял строку большего размера и всегда заполнчл ее пробелами перед чтением данных. Костыли, конечно, но времени не было искать других решений...
Easy_Enemy
12.07.2025, 18:11
Так подключить SysLibMem и взять обычный вызов MemSet()
Или не подходит?
Вот так: MemSet(ADR(arrData), SIZEOF(arrData), 0);
Пробовал, результат - тот же, постоянно пустой буффер.. Уже подумал, что где-то логика сломалась..
Вот у меня пост про память и переменные и буферы есть: https://cs-cs.net/codesys-kultura-ko...icy-massivov#4 - там я описал все подробнее.
Читал по стрингу как раз, хорошая статья!
Не помню уже, но вот у меня с memset вроде не получалось, не стал долго искать решение, взял строку большего размера и всегда заполнчл ее пробелами перед чтением данных. Костыли, конечно, но времени не было искать других решений...
Тоже подумал окостылиться, но, потом еще где-то что-то всплывет. А то и - в процессе эксплуатации. Хотелось бы доделать до полноценного функционала
.. по логике, он должен обнуляться 1 раз перед его формированием..
Бредовая логика
... в буфере остаются данные, которые портят пакет..
Бредовый вывод
приводит к бессмысленному
... Бессмысленный бред предполагал обнуление буффера..
Сброс программного буфера это только обнуление 1 переменной где лежит кол-во реальных данных в этом буфере. Всё.
Что-либо лежащие за границей указанного текущего размера чтобы не содержало - не должно вас волновать.
Коду указанной либы это никак не мешает работать правильно патаму что она не смотрит на то что лежит за пределами указанного размера и её никак не волнует что там есть.
Так подключить SysLibMem и взять обычный вызов MemSet()
Или не подходит?
Вот так: MemSet(ADR(arrData), SIZEOF(arrData), 0);
Вот у меня пост про память и переменные и буферы есть: https://cs-cs.net/codesys-kultura-koda-peremenniye-granicy-massivov#4 - там я описал все подробнее.
Даже читать нет смысла если предлагаются за каким-то вызывающие смех "обнуления" буферов
Не помню уже, но вот у меня с memset вроде не получалось,...
memset - рабочая, даже нет смысла обсуждать это. Но непонятно
1. Зачем она именно вам нужна была. Неясная цель и что делали (кроме оффлайна) что не срослось?
2. Зачем ее предлагать прикручивать к задаче с буферами где она просто не нужна?
взял строку большего размера и всегда заполнчл ее пробелами перед чтением данных.
рукалицо. А читали именно строку?
Easy_Enemy
За каким вы вообше полезли внутрь либы? Какая цель?
Easy_Enemy
12.07.2025, 20:04
Да, да, в основном - все верно. Все должно работать, все чтения данных обрезаются всеми sizeof и прочее. Не все работает. Уберем всю шелуху и мишуру, скажем проще:
1. Опрашиваем 1 инпут рег от устройства - 1. Получаем в порт 7 байт данных (то, что и ожидали). Пакет разобрали.
2. Опрашиваем 2 инпут рега от устройства - 2. Получаем в порт 9 байт данных (то, что и ожидали). Пакет разобрали.
Опрашиваем только 1. Работает.
Опрашиваем только 2. Работает. (под работает - подразумевается, что отправили запрос > получили ответ > сверились (crc, bytecount) > выплюнули результат > завершили работу опроса (Complete = true, Exception = 0)
Ставим на опрос оба - открываем буфер и видим, что от устройства 1 ответ пришел, вот он лежит, валидный (за ним болтается что-то еще, но у нас же есть SIZEOF! Он все сделает), но - Complete=false, и, далее ловим таймаут. Отсюда вопрос - какого черта цикл не завершился успешно? И почему при одиночном опросе работает все отлично?
Поэтому полез разбираться, как оно вообще работает. Облазил - вдоль и поперек. Да, играл, уже именно с моментом очистки буфера (в какой-то момент помогало, был опрос обоих устройств одновременно, но возникали иные проблемы). Хорошо, ткните носом, в какую сторону глядеть, хотя бы
.. Хорошо, ткните носом, в какую сторону глядеть, хотя бы
Закройте modbus.lib
Выложите проект который её использует
Powered by vBulletin® Version 4.2.3 Copyright © 2025 vBulletin Solutions, Inc. All rights reserved. Перевод: zCarot