- Обязательно представиться на русском языке кириллицей (заполнить поле "Имя").
- Фиктивные имена мы не приветствуем. Ивановых и Пупкиных здесь уже достаточно.
- Не надо писать свой вопрос в первую попавшуюся тему - всегда лучше создать новую тему.
- За поиск, предложение и обсуждение пиратского ПО и средств взлома - бан без предупреждения. Непонятно? - Читать здесь.
- Рекламу и частные объявления "куплю/продам/есть халтура" мы не размещаем ни на каких условиях.
- Перед тем как что-то написать - читать здесь, а затем здесь и здесь.
- Не надо писать в ЛС администраторам свои технические вопросы. Администраторы форума отлично знают как работает форум, а не все-все контроллеры, о которых тут пишут.
Citect Modnet получение данных
Модераторы: Глоб.модераторы, Специалисты SE
-
- здесь недавно
- Сообщения: 60
- Зарегистрирован: 21 сен 2009, 18:09
- Имя: Алексей
- Страна: Эстония
Citect Modnet получение данных
Добрый день,
Пытаюсь получать данные в Citect с счетчика algodue UEM80 через ETI-1221 шлюз посредством MODNET драйвера, но на выходе получаю какие-то непонятные данные. Использовал различные версии драйвера, смещал номера регистров в ту и иную стороны - ничего не выходит. С помощью Modbus Poll программы все прекрасно опрашивается. Подскажите, в чем может быть проблема?
Пытаюсь получать данные в Citect с счетчика algodue UEM80 через ETI-1221 шлюз посредством MODNET драйвера, но на выходе получаю какие-то непонятные данные. Использовал различные версии драйвера, смещал номера регистров в ту и иную стороны - ничего не выходит. С помощью Modbus Poll программы все прекрасно опрашивается. Подскажите, в чем может быть проблема?
У вас нет необходимых прав для просмотра вложений в этом сообщении.
-
- здесь недавно
- Сообщения: 60
- Зарегистрирован: 21 сен 2009, 18:09
- Имя: Алексей
- Страна: Эстония
Citect Modnet получение данных
Я так понимаю следует воспользоваться параметром LongDataType? Пробовал разные варианты - опять же не получается.
Меня смущает вообще значения регистров, которые я получаю. Некоторые из них равны 0, что неверно, другие - заоблочные значения и постоянно меняются.
Как правильно опеределить с какого значения начинаются регистры и биты? В таблицах везде указан адрес 1ого регистра 0, но когда я ставлю адрес регистра в Citect 400000, то получаю в Kernel ошибку Out of range. Пробовал играть с протоколами MODNET, MODNET1, MODNET2 и MODNET3 - ничего не выходит.
-
- не первый раз у нас
- Сообщения: 396
- Зарегистрирован: 28 сен 2022, 15:26
- Имя: Андрей
- Благодарил (а): 12 раз
- Поблагодарили: 54 раза
Citect Modnet получение данных
Вы LONG-и читаете, да? Смотрите параметр драйвера LongDataType. Он может быть задан индивидуально для каждого устройства/группы устройств. А по умолчанию равен 3 (старшим вперёд). А вариант протокола, судя по скриншоту модбас полл, MODNET3 подойдёт.
Отправлено спустя 5 минут 5 секунд:
[General]
CheckAddressBoundary = 0
Не пробовали указывать в citect.ini ?
Отправлено спустя 1 минуту 49 секунд:
Отправлено спустя 5 минут 5 секунд:
Может всё же не в kernel, а компилятор ругается?
[General]
CheckAddressBoundary = 0
Не пробовали указывать в citect.ini ?
Отправлено спустя 1 минуту 49 секунд:
А что конкретно непонятно?
-
- здесь недавно
- Сообщения: 60
- Зарегистрирован: 21 сен 2009, 18:09
- Имя: Алексей
- Страна: Эстония
Citect Modnet получение данных
Установил протокол MODNET3. Регистр 2xWORD в Citect создаю переменную типа LONG. Если указываю адрес переменной 400000, как в таблице производителя, то в kernel возникает ошибка "Out of range 400000". Делаю смещение на 1, устанавливаю 400001. Ошибки - нет. Параметр LongDataType = 3 (хотя пробовал все варианты). В итоге, в первом регистре получаю 0, что не может быть, т.к. это фазное напряжение L1. Во втором и третьем 10ти значное число.I_m писал(а): ↑03 июн 2024, 19:01 Вы LONG-и читаете, да? Смотрите параметр драйвера LongDataType. Он может быть задан индивидуально для каждого устройства/группы устройств. А по умолчанию равен 3 (старшим вперёд). А вариант протокола, судя по скриншоту модбас полл, MODNET3 подойдёт.
Отправлено спустя 5 минут 5 секунд:Может всё же не в kernel, а компилятор ругается?
[General]
CheckAddressBoundary = 0
Не пробовали указывать в citect.ini ?
Отправлено спустя 1 минуту 49 секунд:А что конкретно непонятно?
-
- специалист
- Сообщения: 642
- Зарегистрирован: 02 дек 2015, 06:57
- Имя: Огородников Сергей
- Страна: РФ
- Благодарил (а): 136 раз
- Поблагодарили: 111 раз
Citect Modnet получение данных
Добрый день,
1. Определитесь, по какому столбцу адреса смотреть. В документе есть два столбца, разница в измеренном - три порядка, адреса смещены на 16#1000
2. Вы в Citect указываете смещение 400 001, попробуйте 40 001.
Разные вендоры - разные правила
3. Убедитесь в правильном типе переменной (INT or FLOAT)
1. Определитесь, по какому столбцу адреса смотреть. В документе есть два столбца, разница в измеренном - три порядка, адреса смещены на 16#1000
2. Вы в Citect указываете смещение 400 001, попробуйте 40 001.
Разные вендоры - разные правила
3. Убедитесь в правильном типе переменной (INT or FLOAT)
СВ
-
- не первый раз у нас
- Сообщения: 396
- Зарегистрирован: 28 сен 2022, 15:26
- Имя: Андрей
- Благодарил (а): 12 раз
- Поблагодарили: 54 раза
Citect Modnet получение данных
В какой именно момент возникает ошибка? Если пишете, что в kernel, то в должно быть уже либо в рантайме, либо при запуске рантайма. Так? Если уж точно как в таблице производителя, то попробуйте 40000, хотя это не должно никак влиять, по идее.
Кстати, что таблице производителя означает RegSet для целочисленных регистров? А по адресам для float пробовали читать? Модбас поллом для начала.
И ещё - если я правильно понял, то адреса input-регистров те же самые должны быть.
Хотя, если модбас полл читает, то и сайтек должен читать, если там всё правильно настроено. Про ошибку в ядре я так и не понял. Скриншот можете сделать?
Какую версию Citect SCADA используете, кстати?
Это не смещение. Лидирующая 4-ка указывает на тип регистра, т.е. регистра хранения. Пробелы в адресе - синтаксическая ошибка.
Отправлено спустя 24 минуты 19 секунд:
Кстати, я не понял один момент - у Вас на скриншоте для модбас полл запрос в кодах приведён как для modbus rtu, а не tcp. Впрочем, я с Modbus Poll шапочно знаком, т.ч. может это и нормально. И всё же вопрос - устройство точно modbus tcp, а не modbus rtu over tcp?
-
- здесь недавно
- Сообщения: 60
- Зарегистрирован: 21 сен 2009, 18:09
- Имя: Алексей
- Страна: Эстония
Citect Modnet получение данных
Ошибка возникает после рестарта I/O сервера. Пробовал убирать лишний ноль 400000 > 40000, работает одинаково и так и так.I_m писал(а): ↑03 июн 2024, 23:29В какой именно момент возникает ошибка? Если пишете, что в kernel, то в должно быть уже либо в рантайме, либо при запуске рантайма. Так? Если уж точно как в таблице производителя, то попробуйте 40000, хотя это не должно никак влиять, по идее.
Кстати, что таблице производителя означает RegSet для целочисленных регистров? А по адресам для float пробовали читать? Модбас поллом для начала.
И ещё - если я правильно понял, то адреса input-регистров те же самые должны быть.
Хотя, если модбас полл читает, то и сайтек должен читать, если там всё правильно настроено. Про ошибку в ядре я так и не понял. Скриншот можете сделать?
Какую версию Citect SCADA используете, кстати?
Это не смещение. Лидирующая 4-ка указывает на тип регистра, т.е. регистра хранения. Пробелы в адресе - синтаксическая ошибка.
Отправлено спустя 24 минуты 19 секунд:
Кстати, я не понял один момент - у Вас на скриншоте для модбас полл запрос в кодах приведён как для modbus rtu, а не tcp. Впрочем, я с Modbus Poll шапочно знаком, т.ч. может это и нормально. И всё же вопрос - устройство точно modbus tcp, а не modbus rtu over tcp?
По адресам для float тоже пробовал, та же ситуация. В Modbus Poll все читается хорошо.
Сам плохо понимаю, что означает RegSet. RegSet 0 (по умолч.): четн./нечетн. word регистры. RegSet 1: четн. word регистры.
Input и holding регистры имеют одинаковые адреса.
Citect SCADA 2018 R2
Устройство Modbus RTU подключено через Modbus TCP Gateway. Стоит ли в таком случае его считать Modbus RTU over TCP и что это меняет? Нужно ли в этом случае создавать виртуальный COM порт и читать данные по протоколу Modbus RTU?
У вас нет необходимых прав для просмотра вложений в этом сообщении.
-
- специалист
- Сообщения: 642
- Зарегистрирован: 02 дек 2015, 06:57
- Имя: Огородников Сергей
- Страна: РФ
- Благодарил (а): 136 раз
- Поблагодарили: 111 раз
Citect Modnet получение данных
Попробуйте в качестве адреса не 400001, а просто 1
И как вы настроили IO_DEV, BOARD и PORT?
И как вы настроили IO_DEV, BOARD и PORT?
СВ
-
- не первый раз у нас
- Сообщения: 396
- Зарегистрирован: 28 сен 2022, 15:26
- Имя: Андрей
- Благодарил (а): 12 раз
- Поблагодарили: 54 раза
Citect Modnet получение данных
Если это шлюз RTU<->TCP, то ничего не нужно.
Виртуальный COM в любом случае не нужен, Citect и так умеет.
На скриншоте сообщение об ошибке из из лога, как я понял. Это ни о чём, строго говоря. Посмотрите версию modnet на всякий случай (версию файла MODNET.dll).
У меня сейчас та же самая.
Вы в modnet.chm хоть когда-нибудь заглядывали?
Отправлено спустя 1 минуту 35 секунд:
Это где-то задаётся на счётчике?
-
- здесь недавно
- Сообщения: 60
- Зарегистрирован: 21 сен 2009, 18:09
- Имя: Алексей
- Страна: Эстония
Citect Modnet получение данных
Я так понимаю, если драйвер обращается к несуществующему регистру выходящeму из диапазона, то он перестает опрашивать остальные и они отображаются #BAD.I_m писал(а): ↑04 июн 2024, 15:06Если это шлюз RTU<->TCP, то ничего не нужно.Виртуальный COM в любом случае не нужен, Citect и так умеет.
На скриншоте сообщение об ошибке из из лога, как я понял. Это ни о чём, строго говоря. Посмотрите версию modnet на всякий случай (версию файла MODNET.dll).
У меня сейчас та же самая.
Вы в modnet.chm хоть когда-нибудь заглядывали?
Отправлено спустя 1 минуту 35 секунд:Это где-то задаётся на счётчике?
RegSet задается на счетчике.
Подключил другой счетчик PAC3120 от Siemens, но пока аналогичная ситуация.
-
- не первый раз у нас
- Сообщения: 396
- Зарегистрирован: 28 сен 2022, 15:26
- Имя: Андрей
- Благодарил (а): 12 раз
- Поблагодарили: 54 раза
Citect Modnet получение данных
У сайтековских драйверов modnet и modbus есть такая особенность, что они для проверки состояния связи с устройством пытаются опросить некий дефолтный регистр и, если это у них не получается, то рисуют #BAD все смежные. Посмотрите параметры InitVar и InitVarType, только внимательно прочитайте. Они в паре работают.
Ещё попробуйте задать в адресе регистра префикс индивидуального чтения G, т.е G400000. Может это как-то поможет заставить сайтек исключить тэг из списка "плохих".
Ещё есть параметр Block (для драйверов всех типов без исключения, по-моему), слишком большое значение которого тоже может поспособствовать попаданию тэга в перечень #BAD. Только учтите, что этот параметр является общим для всех устройств типа. Т.е. в данном случае он будет влиять на обмен со всеми устройствами modbus tcp. В отличии от InitVar, InitVarType и прочих, определённых как device/group-specific parameters.
-
- здесь недавно
- Сообщения: 60
- Зарегистрирован: 21 сен 2009, 18:09
- Имя: Алексей
- Страна: Эстония
Citect Modnet получение данных
Все оказалось намного проще. При добавлении устройства, Wizard присваивает ему одинаковое название порта, наглядно таблица выглядит впорядке, но когда открыл выпадающее меню, то обнаружил два одинаковых порта. После того, как выбрал нужный, все пошло как по маслу. Моя ошибка.
Благодарю всех за помощь.
Благодарю всех за помощь.
-
- не первый раз у нас
- Сообщения: 396
- Зарегистрирован: 28 сен 2022, 15:26
- Имя: Андрей
- Благодарил (а): 12 раз
- Поблагодарили: 54 раза
Citect Modnet получение данных
Да уж, даже в голову не пришло - визардами просто в citect для добавления устройств не пользуюсь.