Замарачиваюсь с MassFlowController от фирмы bürkert.
Обмен данными по протоколу Modbus RTU.
Запросы на считывание регистров без проблем. Засылаю запрос получаю ответ единтсвенным пакетом и все хорошо.
Запрос на запись в регистр глючит. Запрос принимается контроллером и выполняется чисто. Сборка ответа включая CRC тоже чистая принимается. Проблема: пакеты ответа выдаются множественно. Слегка больше времени на чтение и эфир забивается множеством одинаковых пакетов. Эти копии воспринимаются потом как ответы на другие запросы. Короче буфер COM порта захламляется. Пробывал его чистить считывая его весь. Но контроллер похоже не унимается и шлет ответные пакеты еще какое-то время после первого ответа. Как заткнуть этот фонтан? Может кто-нибудь сталкивался с подобной проблемой?
COM port:
baud rate работает на одной, но можно настраивать разные
start bit нет
data bits 8
stop bit 1
parity нет
modbus RTU
- Вий
- Сообщения: 6237
- Зарегистрирован: 22.09.2011 13:00
- Ник с it-ru.de: верифицирован
- Где: Минск
- Род занятий: Программист ;)
- Интересы: разные...
Re: modbus RTU
Что значит "слегка больше времени на чтение"? Т.е. прописал значение, принял ответ - и потом тот же самый ответ приходит ещё несколько раз?
Вий есть колоссальное создание простонародного воображения...
"...Когда хотят сделать людей добрыми, мудрыми, свободными, воздержанными, великодушными, то неизбежно приходят к желанию их всех перебить." Анатоль Франс
"...Когда хотят сделать людей добрыми, мудрыми, свободными, воздержанными, великодушными, то неизбежно приходят к желанию их всех перебить." Анатоль Франс
Re: modbus RTU
Да. Похоже какой-то "отправил" флаг в контроллере не сбрасывается.Вий писал(а):Что значит "слегка больше времени на чтение"? Т.е. прописал значение, принял ответ - и потом тот же самый ответ приходит ещё несколько раз?
Записывается в holding регистр.
Чтобы избежать множественного ответа, я просто высылаю сразу запрос на чтение какого-нибудь безобидного holding регистра. Ответ на этот запрос принимает удар на себя. Программа просто игнорирует данный ответ. Далее в буфере остается 0 байт и можно продолжать коммуникацию. Не элегантно, но работает.
Это bürkert MFC 8713.
Re: modbus RTU
Значит: выслал запрос в СОМ -> время на чтение/ожидание ответа -> чтение данных из СОМВий писал(а):Что значит "слегка больше времени на чтение"? Т.е. прописал значение, принял ответ - и потом тот же самый ответ приходит ещё несколько раз?