modbus RTU

Moderator: Little Muk

Post Reply
User avatar
kont26
Posts: 1350
Joined: 04 Oct 2011, 11:54
ник с it-ru.de: верифицирован

modbus RTU

Post by kont26 »

Замарачиваюсь с MassFlowController от фирмы bürkert.
Обмен данными по протоколу Modbus RTU.
Запросы на считывание регистров без проблем. Засылаю запрос получаю ответ единтсвенным пакетом и все хорошо.
Запрос на запись в регистр глючит. Запрос принимается контроллером и выполняется чисто. Сборка ответа включая CRC тоже чистая принимается. Проблема: пакеты ответа выдаются множественно. Слегка больше времени на чтение и эфир забивается множеством одинаковых пакетов. Эти копии воспринимаются потом как ответы на другие запросы. Короче буфер COM порта захламляется. Пробывал его чистить считывая его весь. Но контроллер похоже не унимается и шлет ответные пакеты еще какое-то время после первого ответа. Как заткнуть этот фонтан? Может кто-нибудь сталкивался с подобной проблемой?

COM port:

baud rate работает на одной, но можно настраивать разные
start bit нет
data bits 8
stop bit 1
parity нет
minimax
Posts: 6860
Joined: 22 Sep 2011, 20:04
ник с it-ru.de: верифицирован
Location: РФ-ФРг

Re: modbus RTU

Post by minimax »

А это не Beckhoff PLC ?
User avatar
Вий
Posts: 6094
Joined: 22 Sep 2011, 13:00
ник с it-ru.de: верифицирован
Location: Минск
Contact:

Re: modbus RTU

Post by Вий »

Что значит "слегка больше времени на чтение"? Т.е. прописал значение, принял ответ - и потом тот же самый ответ приходит ещё несколько раз?
Вий есть колоссальное создание простонародного воображения...

"...Когда хотят сделать людей добрыми, мудрыми, свободными, воздержанными, великодушными, то неизбежно приходят к желанию их всех перебить." Анатоль Франс
User avatar
kont26
Posts: 1350
Joined: 04 Oct 2011, 11:54
ник с it-ru.de: верифицирован

Re: modbus RTU

Post by kont26 »

Вий wrote:Что значит "слегка больше времени на чтение"? Т.е. прописал значение, принял ответ - и потом тот же самый ответ приходит ещё несколько раз?
Да. Похоже какой-то "отправил" флаг в контроллере не сбрасывается.
Записывается в holding регистр.

Чтобы избежать множественного ответа, я просто высылаю сразу запрос на чтение какого-нибудь безобидного holding регистра. Ответ на этот запрос принимает удар на себя. Программа просто игнорирует данный ответ. Далее в буфере остается 0 байт и можно продолжать коммуникацию. Не элегантно, но работает.

Это bürkert MFC 8713.
User avatar
kont26
Posts: 1350
Joined: 04 Oct 2011, 11:54
ник с it-ru.de: верифицирован

Re: modbus RTU

Post by kont26 »

Вий wrote:Что значит "слегка больше времени на чтение"? Т.е. прописал значение, принял ответ - и потом тот же самый ответ приходит ещё несколько раз?
Значит: выслал запрос в СОМ -> время на чтение/ожидание ответа -> чтение данных из СОМ
Post Reply