Просто бессмысленный бред. Какой смысл этого действа?
Промахнулся темой слегка, к сожалению их хватает (про проблемы 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-ko...icy-massivov#4 - там я описал все подробнее.
Не помню уже, но вот у меня с memset вроде не получалось, не стал долго искать решение, взял строку большего размера и всегда заполнчл ее пробелами перед чтением данных. Костыли, конечно, но времени не было искать других решений...
Пробовал, результат - тот же, постоянно пустой буффер.. Уже подумал, что где-то логика сломалась..
Читал по стрингу как раз, хорошая статья!Цитата:
Вот у меня пост про память и переменные и буферы есть: https://cs-cs.net/codesys-kultura-ko...icy-massivov#4 - там я описал все подробнее.
Тоже подумал окостылиться, но, потом еще где-то что-то всплывет. А то и - в процессе эксплуатации. Хотелось бы доделать до полноценного функционалаЦитата:
Не помню уже, но вот у меня с memset вроде не получалось, не стал долго искать решение, взял строку большего размера и всегда заполнчл ее пробелами перед чтением данных. Костыли, конечно, но времени не было искать других решений...
Бредовая логика
Бредовый вывод
приводит к бессмысленному
Сброс программного буфера это только обнуление 1 переменной где лежит кол-во реальных данных в этом буфере. Всё.
Что-либо лежащие за границей указанного текущего размера чтобы не содержало - не должно вас волновать.
Коду указанной либы это никак не мешает работать правильно патаму что она не смотрит на то что лежит за пределами указанного размера и её никак не волнует что там есть.
Даже читать нет смысла если предлагаются за каким-то вызывающие смех "обнуления" буферов
memset - рабочая, даже нет смысла обсуждать это. Но непонятно
1. Зачем она именно вам нужна была. Неясная цель и что делали (кроме оффлайна) что не срослось?
2. Зачем ее предлагать прикручивать к задаче с буферами где она просто не нужна?
рукалицо. А читали именно строку?Цитата:
взял строку большего размера и всегда заполнчл ее пробелами перед чтением данных.
Easy_Enemy
За каким вы вообше полезли внутрь либы? Какая цель?
Да, да, в основном - все верно. Все должно работать, все чтения данных обрезаются всеми sizeof и прочее. Не все работает. Уберем всю шелуху и мишуру, скажем проще:
Опрашиваем только 1. Работает.Цитата:
1. Опрашиваем 1 инпут рег от устройства - 1. Получаем в порт 7 байт данных (то, что и ожидали). Пакет разобрали.
2. Опрашиваем 2 инпут рега от устройства - 2. Получаем в порт 9 байт данных (то, что и ожидали). Пакет разобрали.
Опрашиваем только 2. Работает. (под работает - подразумевается, что отправили запрос > получили ответ > сверились (crc, bytecount) > выплюнули результат > завершили работу опроса (Complete = true, Exception = 0)
Ставим на опрос оба - открываем буфер и видим, что от устройства 1 ответ пришел, вот он лежит, валидный (за ним болтается что-то еще, но у нас же есть SIZEOF! Он все сделает), но - Complete=false, и, далее ловим таймаут. Отсюда вопрос - какого черта цикл не завершился успешно? И почему при одиночном опросе работает все отлично?
Поэтому полез разбираться, как оно вообще работает. Облазил - вдоль и поперек. Да, играл, уже именно с моментом очистки буфера (в какой-то момент помогало, был опрос обоих устройств одновременно, но возникали иные проблемы). Хорошо, ткните носом, в какую сторону глядеть, хотя бы