PDA

Просмотр полной версии : Адресация переменных из PLC в ОPC



Vitorgan
04.02.2021, 18:33
Подскажите пожалуйста, правильно ли я все понимаю.
Раньше (старые проекты) для связи OPC сервера с PLC я в Ресурсы/конфигурация ПЛК создавал подэлемент Modbus (slave) и по TCP передавал нужные мне переменные.
Неудобств много:
1) я обязан соблюдать иерархию переменных, чтобы в OPС обратиться по адресу к нужной
2) Если я например хочу под проект заложить 250 переменных "ИЗ ПЛК в скаду" и 250 "ИЗ скады в ПЛК" ( т.к. OPC на 500 точек), то при использовании старого метода, мне в конфигурации ПЛК нужно создать 250 переменных выходных из ПЛК(даже если используется пока 100), чтобы обратиться к правильному адресу первой входной переменной в ПЛК.
Так как в OPC для удобства дерево переменных разделено на INPUTs и OUTPUTS, хочется чтобы все OUTPUTS начинались с определенного адреса

В чем собственно вопрос, могу ли я объявлять переменные уходящие в OPC в "Глобальных переменных" ? Если да, то я прописываю их по подобию "Переменная AT%QW2 WORD;" ?
Тогда я не понимаю где мне указать что связь по TCP и Modbus Slave

Разъясните пожалуйста.

IVM
04.02.2021, 18:53
Просто объявить глобальную переменную Переменная AT%QW2 WORD; не получится. В конфигурации ПЛК нужно будет создать переменную с этим адресом. Если не хочешь пользоваться конфигуратором, то надо переходить на библиотеки.

Vitorgan
04.02.2021, 19:23
Просто объявить глобальную переменную Переменная AT%QW2 WORD; не получится. В конфигурации ПЛК нужно будет создать переменную с этим адресом. Если не хочешь пользоваться конфигуратором, то надо переходить на библиотеки.

Да я в принципе не против конфигуратора, не считая опросника, это уж давно все в код со структурами перешло, я как минимум хочу "в ручную" менять адрес переменной, чего в конфигураторе не возможно.

Получается для моих хотелок, а это:
1) не париться о иерархии переменных (пересчет адреса в ОПС, в зависимости от типа) и т.д.
2) разделить адресацию до 250 входы, с 251 выходы

Мне придется уйти от использования конфигуратора?

Vitorgan
04.02.2021, 21:10
И какие проблемы ?

Еще и с адресами возитесь ?

Постарался объяснить как смог. Я не хочу возиться, поэтому и спрашиваю.
Знаю способ только с конфигурацией ПЛК, там можно просто списком добавлять переменные, но только имея этот список я могу в ОПС обратиться к нужной, так как у нее определенные адрес, зависящий от того в каком месте списка в ПЛК будет стоять эта переменная. От этого и хочу избавиться, и поэтому спрашиваю на форуме.

Vitorgan
04.02.2021, 22:00
Одной достаточно. Структурной.
Аналогичная структура с другой стороны снимает вопросы адресации. Но при программировании а не конфигурировании.

Можно любой пример? ссылку на литературу? Codesys + Universal OPC server + Masterscada, я не понимаю про структурную переменную.
Требуется чтобы переменная созданная в PLC имела определенный адрес, по которому я смогу прочитать ее в OPC

melky
05.02.2021, 10:14
А разве переменная в Конфигурации ПЛК не имеет определенного адреса?

Vitorgan
05.02.2021, 11:31
А разве переменная в Конфигурации ПЛК не имеет определенного адреса?

Да вот если бы я это нашел, не создавал бы тему)) она имеет номер в списке, но и byte и dword будут иметь просто номер в списке переменных, а это в OPC либо 4 битовых маски, либо один dword, вся проблема в том что приходится очень внимательно следить за формированием этого списка, и где то в excel хранить таблицу (ну я так например выхожу из ситуации). Не удобно. 53386

melky
05.02.2021, 12:36
Vitorgan адресация начинается с 0 с учетом выравнивания. Масса тем по этому поводу со скринами как и что.
OPC, нормальный, должен поддерживать групповые запросы, даже если регистр пуст, просто пустой не связываете с данными.

И да, в некоторых случаях надо делать раздельные регистры для чтения и записи, например если запись возможна с панели и одновременно из Scada.

Где-то в РЭ по программированию это все есть.

Vitorgan
05.02.2021, 13:11
Про выравнивание знаю, мне оно в принципе не нужно, так как:
1)через OPC передаю только 4byte (dword)
2)в скаде разделяю на нужные мне.

Если мне нужно передать 2 wordа, то я в иерархии списка в конфигурации их друг за другом и ставлю. и идут они в списке как две переменных, OPC сервером просто читаю сразу Dword состоящий из этих двух)

Вопрос был в удобстве составления этого списка в конфигураторе, т.к. для удобства добавления в последующем новых переменных, я мог спокойно продолжать список инпутов в плк из скады, и в обратную сторону, но чтобы в итоге, Inputs занимали по 250 регист, а outputs с 250 по 500. Но как я понял, из примера Ув.Валенка, все равно придется создать все 500 переменных. Его пример облегчает визуальный доступ к нужной переменной.