Стартовая страница › Форумы › Взаимодействие с устройствами › Modbus › Modbus Slave — настройка и ошибки
- В этой теме 33 ответа, 2 участника, последнее обновление 2 года, 6 месяцев назад сделано manjey73.
-
АвторСообщения
-
30.08.2021 в 17:16 #20658manjey73Участник
Чисто мое мнение, слабоват драйвер.
Единственный плюс, это совместимость шаблонов и больше ничего.1. нет возможности формировать для мастера разрозненные входные каналы для чтения одним запросом
2. нет возможности сформировать посылки из входных каналов разных КП опять же, под один групповой запрос для мастера.30.08.2021 в 17:24 #20659manjey73УчастникДобавьте атрибуты в секции Elem
№ КП и № вх.каналаДрайвер Modbus мастер по идее просто проигнорирует данные атрибуты
А в драйвере Modbus slave появится возможность редактировать данные атрибуты.
В № КП будет стоять по умолчанию из общих свойств или в конкретном случае из командной строки, при необходимости можно будет заменить на другой КП
а в № вх.канала, требуемый канал для передачи.Для мастера что слейв отдаст, то и будет, нумерация сигналов останется той же последоваательной. Имена переменных так же.
30.08.2021 в 17:49 #20660manjey73УчастникКак бы то, что не надо было забывать с самого начала — мастером может быть кто угодно, а не только другая Rapid Scada.
31.08.2021 в 12:48 #20669manjey73УчастникХм — а что, дорасчетные каналы в игноре для драйвера Modbus Slave ?
Очень странное поведение при настройке двух групп запросов в слейве.
Вроде адреса поставил разные, а переменные считываются строго по порядку и никак иначе, от слова совсем.з.ы. СЫРО….
<?xml version="1.0" encoding="utf-8"?> <DevTemplate> <Settings> <ZeroAddr>true</ZeroAddr> <DecAddr>true</DecAddr> <DefByteOrder2 /> <DefByteOrder4 /> <DefByteOrder8 /> </Settings> <ElemGroups> <ElemGroup active="true" tableType="HoldingRegisters" address="0" name=""> <Elem name="Err_Code" type="ushort" byteOrder="" /> <Elem name="Err_Time" type="double" byteOrder="" /> <Elem name="T_Gvs" type="float" byteOrder="" /> <Elem name="Uroven_Litr" type="float" byteOrder="" /> <Elem name="T_Out" type="float" byteOrder="" /> </ElemGroup> <ElemGroup active="true" tableType="HoldingRegisters" address="20" name="Группа2"> <Elem name="xxx1" type="float" byteOrder="" /> <Elem name="xxx2" type="float" byteOrder="" /> <Elem name="xxx3" type="float" byteOrder="" /> <Elem name="xxx4" type="float" byteOrder="" /> <Elem name="xxx5" type="float" byteOrder="" /> </ElemGroup> </ElemGroups> <Cmds /> </DevTemplate>
Одна картинка, если мастером прочитать 10 переменных к ряду одним запросом.
Вторая, если читать так же, двумя запросами. Судя по номерам каналов в привязке и выставленным адресам регистров, адреса регистров никак не влияют на начало отсчета переменных в КП, из которого хотим прочитать данные.31.08.2021 в 12:58 #20670manjey73УчастникВ общем пока вердикт такой, пользоваться данным драйвером невозможно без плясок с бубном….
31.08.2021 в 13:04 #20671manjey73УчастникЛибо ошибка в коде, либо задумка совершенно непонятна.
В общем использовать данный драйвер в том виде, в котором он есть бесполезно.31.08.2021 в 17:42 #20696MikhailМодераторОсновные задачи, которые решались при разработке данного драйвера Modbus Slave:
1. Приём данных от контроллеров, которые являются Модбас мастером.
2. Режим зеркала для устройства Модбас-мастер, подключенного к скаде.Для указанных выше задач драйвер подходит отлично.
Если Ваша задача — предоставить значения произвольных каналов другой системе или прибору, то драйвер не слишком удобен, что определяется его архитектурой. Для предоставления произвольных данных вообще не нужны были бы шаблоны идентичные мастеру — просто выбрать нужные каналы и всё.31.08.2021 в 17:51 #20697manjey73УчастникКак раз вся суть создать шлюз в другую систему, в которую нет необходимости передавать все подряд.
1. Дорасчетные каналы можно передать через драйвер, но для этого необходимо присвоить им номер сигнала — вопрос ЗАЧЕМ ? это нарушает несколько концепцию работы самой Scada, зачем присваивать дорасчетным каналам левые номера сигналов?
2. Нельзя исключить канал, удалив у него номер сигнала, сами проверьте, что начинает происходить, если есть вторая группа регистров
3. Тем более нельзя удалить номер сигнала, если у канала в КП это действующий параметр
4. Чтобы передать только нужные значения, необходимо сформировать строгую последовательность в базе, что нарушает опять же концепцию работы системы, а именно «Создание каналов» при использовании шаблона устростваЧтобы передавать параметры другого КП нужно создать еще КП и настроить его через другой порт, например первый на 502, другой на 503 — опять же ЗАЧЕМ?
Одна система Slave, просто необходимо создать на одном порту карту регистров только тех каналов, которые требуются к передаче. Вот если не хватит регистров, тогда только создаем еще один КП с новым портом и создаем еще одну карту — опять же, а почему этого не делать в одном КП за счет увеличения Опрашиваемых?
То есть добавляем в Опрос КП новое, указываем порт, создаем карту.5. Драйвер никак не сообщает мастеру о том, что запрашивается отсутствующий регистр. Идет или «Ошибка связи» или чтение левых несуществующих нулей.
31.08.2021 в 17:51 #20698MikhailМодераторЗначения, берущиеся из скады, скорее всего, отобразятся при их запросе.
31.08.2021 в 17:57 #20699manjey73Участник6. И еще, вариант открытия нескольких сокетов на один порт? возможно ли такое программно? Было бы полезно, чтобы не создавать одинаковые карты регистров на разные порты. Как это в некоторых ПЛК или панелях работает ?
Идет искажение параметров, при удалении номера сигнала, так как участвует номер сигнала и собственно номер индекса входного канала в КП, что приводит к путанице при попытке разбить запросы на 2 где второй запрос идет со смещением номера регистра….
- Этот ответ был изменен 2 года, 7 месяцев назад от manjey73.
01.09.2021 в 12:00 #20701manjey73УчастникПредположим в КП 200 переменных int и float кучей. Modbus ограничен 128-ю регистрами.
Как передать все переменные?
Каким образом драйвер Modbus Slave поймет, что в одном случае необходимо создавать список с 0-ого индекса переменных в КП, а в другом случае скажем с 100-ого ?Разбивать КП на два, три и более, чтобы драйвер Modbus Slave мог работать всегда с 0-ого индекса?
Опять нарушаем всю концепцию…..
01.09.2021 в 14:43 #20702MikhailМодератор6. И еще, вариант открытия нескольких сокетов на один порт? возможно ли такое программно?
Если речь идёт о подключении нескольких TCP-клиентов (Модбас мастеров), то да.
Modbus ограничен 128-ю регистрами. Как передать все переменные?
В одном запросе Holding Registers по стандарту может быть только 125 регистров. Но само адресное пространство имеет 65535 адресов. Нужно их забирать запросами с <= 125 регистров.
01.09.2021 в 14:44 #20703MikhailМодераторПри переносе на 6-ю версию сделаю ревью драйвера на предмет доработок.
01.09.2021 в 15:25 #20704manjey73УчастникВ одном запросе Holding Registers по стандарту может быть только 125 регистров. Но само адресное пространство имеет 65535 адресов. Нужно их забирать запросами с <= 125 регистров.
В нынешней реализации это возможно ?
Да, хотелось бы более дружественной настройки для драйвера.
Кстати, будете делать ревью, сделайте возможность перетаскивать переменные из группы в группу как для штатного Modbus, так и для Slave-а02.09.2021 в 15:01 #20716manjey73УчастникДля будущего обновления драйвера предусмотреть умножение переменной для процесса преобразования в один регистр.
Так как во входном канале, который будет требоваться передать в виде int_16 или uint_16 может стоять своя формула.
Было бы неплохо для драйвера Slave передавать значение канала в качестве одного регистра умноженного на 10, или 100 например -
АвторСообщения
- Вы должны авторизироваться для ответа в этой теме.