Страница 1 из 1

modbus RTU

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

COM port:

baud rate работает на одной, но можно настраивать разные
start bit нет
data bits 8
stop bit 1
parity нет

Re: modbus RTU

Добавлено: 18.12.2012 11:43
minimax
А это не Beckhoff PLC ?

Re: modbus RTU

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

Re: modbus RTU

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

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

Это bürkert MFC 8713.

Re: modbus RTU

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