PDA

Просмотр полной версии : Особенность библиотеки Modbus-Slave



Diver
28.01.2015, 21:56
Пишу проект под СПК207. По COM1 (RS232) связываюсь по Modbus. СПК - Slave. Использую библиотеку Modbus-Slave. В руководстве на библиотеку описан только функциональный блок MB_Slave и приведён пример работы с ним. В самой библиотеке содержатся ещё ФБ, но описания на них нет. Кто-нибудь знает где взять какую-нибудь инфу по ним? Взял пример за основу, вроде всё работает, но если Master запрашивает более 60 регистров, то ФБ возвращает ошибку ILLEGAL_DATA_VALUE и формирует исключительный ответ. Если Master записывает допустим 100 регистров то, то всё нормально. Подозреваю, что у этого ФБ буфер на отправку Buffer[0..255] of Byte. Каждый регистр в ASCII кодируется 4 байтами (60 регистров * 4 = 240 байт) + LRC, адрес, номер ф-ции, кол-во байт и т.д. Т.е. получается нельзя отдать более 60 рег-ров, так ли это, или я что-то делаю не так? Еще не понятно что за выход NewData у ФБ MB_Slave? Признак того, что поступил запрос от Master'а? И как надо строить программу? POU с вызовом MB_Slave вызывать циклически как можно чаще, чтобы не прозевать запрос от Master'а?

Diver
29.01.2015, 11:45
Неужели никто не в курсе?

capzap
29.01.2015, 14:39
вроде всё работает, но если Master запрашивает более 60 регистров, то ФБ возвращает ошибку ILLEGAL_DATA_VALUE и формирует исключительный ответ. Если Master записывает допустим 100 регистров то, то всё нормально.
а как можно на это отвечать, если 100 больше 60?

Diver
29.01.2015, 15:50
а как можно на это отвечать, если 100 больше 60?

Может запутанно объяснил. СПК - Slave. В СПК задана область - массив из 100 элементов типа WORD. При вызове ФБ MB_Slave в неё передаётся адрес массива и и размер в байтах (100*2=200 байт). Теперь подключаюсь Master'ом, пытаюсь считать 60 регистров - всё нормально, Master получает все данные из этих 60 регистров. Пытаюсь считать 80 регистров (это меньше 100) - master получает исключительный ответ. Дальше Master'ом записываю (16-ой ф-цией) 100 регистров - всё ОК, в КДС вижу полученные данные в регистрах. Такое ощущение, что пакет отправляемые Slave'ом с помощью этой ФБ не может быть длиннее 255 байт.

Diver
30.01.2015, 08:23
Народ, никто не пытался считывать большое кол-во регистров?

Dimko
10.08.2017, 13:30
Народ, никто не пытался считывать большое кол-во регистров?

Добрый! Так и не получили ответа по данному вопросу?? тоже столкнулся, хотя в описании к библиотеке http://ftp.owen.ru/index.html/CoDeSys3/04_Library/03_Documentation/Modbus_Slave_v1.pdf
ни чёго подобного не сказанно.

capzap
10.08.2017, 14:17
Такое ощущение, что пакет отправляемые Slave'ом с помощью этой ФБ не может быть длиннее 255 байт.
смотрим структуру модбас запросов/ответов и обращаем на область данных под именем N и догадываемся сколько можно передать регистров за один раз

Евгений Кислов
16.08.2017, 06:53
Добрый день. Действительно, у библиотеки была такая "особенность".
Исправлено в текущей версии:
http://ftp.owen.ru/index.html/CoDeSys3/04_Library/02_Manual_installation/04_ModBus-slave/3.5.4.2/modbus-slave_v3.5.4.2.compiled-library

Теперь групповым запросом можно считать до 127-ми регистров.