2015-04-20 2 views
0

Я сделал приложение с C#, в этом приложении я должен читать каждые 20 секунд 840 регистров PLC через Modbus TCP. Я использую эту библиотеку http://www.codeproject.com/Tips/16260/Modbus-TCP-class. Когда я использую методC# Modbus получает много регистра каждые 20 секунд

Master.ReadHoldingRegister(ushort id, byte unit, ushort startAddress, ushort numInputs)

Он возвращает массив байтов длиной 144 и не 1680, у вас есть какие-либо идеи?

+1

Я уверен, что в ModbusTCP существует ограничение размера пакета. Вам просто нужно прочитать его в кусках, увеличивая startAddress каждый раз. –

+0

Я попытался использовать этот метод, я сделал 10 раз эту функцию, а в симуляторе Modbus все нормально, но в физическом ПЛК он «видит» первые 2 вызовы функции – chianta

+2

Я использовал другую библиотеку и столкнулся с аналогичной проблемой, мое решение заключалось в том, чтобы добавить небольшую задержку между вызовами – VeNoMiS

ответ

3

Как было предложено добавить немного задержки между вызовами.

2

Modbus позволяет считывать до 125 регистров хранения в одном вызове функции «Чтение удерживающих регистров». Если библиотека не выдает ошибку при вызове 840 регистров, то она, вероятно, учитывает этот предел, разделяя ваш вызов в нескольких запросах регистров чтения. Я бы изучил исходный код, чтобы быть уверенным, что вы можете сделать это надежно.

+0

Это именно то, что я думал. Активировано для ограничения «122» ... можете ли вы связать ссылку на этот номер? – matpop

+1

Ограничение на самом деле 125. Вы можете найти его в Спецификации протокола протокола Modbus: [link] (http://www.modbus.org/docs/Modbus_Application_Protocol_V1_1b.pdf). Я уточню свой ответ, чтобы указать правильный лимит. – Ronaldo

Смежные вопросы