PDA

Просмотр полной версии : ип320, номера регистров



drvlas
12.11.2010, 17:00
что означают значки возла номера регистра в конфигураторе ип320?

там окошко, где написано 4х.

при работе с функциональной кнопкой так же дописано 0х.

спасибо!

drvlas
12.11.2010, 21:47
не совсем понятно из описания конфигуратора следующее.

я создаю несколько экранов, там есть разные элементы, в том числе регистры и биты из памяти плк (он слейв, т.е. сервер).
как расположены области их реального размещения?
как сделать так, чтобы регистры и биты не наложились друг на друга?
как понимать биты, отвечающие за индикаторы и за кнопки - они в разных областях, или в одной?

поясню на примере.

беру первый регистр, который мне нужен и назначаю ему номер 0 (с непонятной мне пока приставкой 4х). допустим, это регистр, доступный только для индикации.

беру второй регистр, который мне нужен. допустим, это регистр, доступный как для индикации, так и для изменения. прав ли я, что назначаю ему номер 1, следующий свободный?

теперь у меня занято 2 адреса: 0 и 1. причем это двухбайтные регистры, то есть в байтах занято адреса 0, 1, 2, 3. верно?

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

или 0*8 = 0
или уже 4*8 = 32? то есть, его размещает компилятор где-то отдельно от регистров или шпарит прямо в ту же область?

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

или 0
или 8 (если кнопки-индикаторы живут вместе, а регистры отдельно)
или 33 (если и регистры, и индикаторы, и кнопки должны иметь неперекрывающиеся зоны адресов)

я бы попробовал на живом комплекте, но пока нет возможности. поэтому надеюсь, что на эти простые вопросы получу ответы здесь. только умоляю, не отсылайте меня к примерам. можете ответить - ответьте, нет - сам разберусь. считаю, что на такого рода конкретные вопросы специалист может ответить тоже конкретно.

спасибо!

Terrano1992
13.11.2010, 09:17
как расположены области их реального размещения?
как сделать так, чтобы регистры и биты не наложились друг на друга?
как понимать биты, отвечающие за индикаторы и за кнопки - они в разных областях, или в одной?
Все-таки перечитайте еще раз руководство по конфигурированию ПЛК Овен. Есть там ответы на эти вопросы...

создаю индикатор. про их представление в памяти сервера сказано, что им нужно выделять по байту на рыло.
Не совсем так. Это пространство под индикаторы и кнопки выделяется порциями в размере 1 байт. Но в этом байте может разместиться до 8 индикаторов и кнопок (8 бит).
Простейший пример. Допустим, вам нужно сделать для обмена с панелью два 16-битных регистра, один индикатор и три кнопки. Cоздавайте в ПЛК Modbus Slave (считаем, что панель - мастер), добавляйте в него 2 субэлемента "регистр" и один субэлемент "8 бит". Первый регистр будет иметь адрес "4x"0, второй - адрес "4x"1. Соответственно, в адресном пространстве (которое у Овена общее для всех переменных) первый регистр займет биты с 0 по 15, второй с 16 по 31. Добавленный после них "8 бит" займет биты с 32 по 39.
Теперь можете работать с ними в проекте панели. Первому регистру указываете адрес 0, второму - 1. В индикаторах/кнопках указываете адрес бита, а не регистра. Т.е. первый по порядку битовый элемент у вас будет "0x"32, за ним "0x"33, "0x"34 и "0x"35... Сквозная нумерация битов в поле ввода-вывода, иначе говоря.
Если сейчас добавить после "8 бит" еще один 16-битный регистр, то между ним и имеющимся "8 бит" будет вставлен байт для выравнивания. То есть биты с 40 по 47 будут неиспользуемыми, а регистр займет биты с 48 по 63.
А если после "8 бит" добавить Float, то на выравнивание уйдет уже не один, а целых три байта. Поглядите на картинку расположения переменных в памяти ввода-вывода в руководстве по конфигурированию ПЛК, там все это наглядно нарисовано.
Так более-менее понятно?
"Только чтение", или "возможность модификации" - это функция, реализованная на уровне панели. То же самое относится и к индикаторам (кнопка - точно такой же бит, как индикатор, но панель может не только читать его, но и модифицировать).
По части загадочных "0x" и "4x" не парьтесь. Это всего-навсего намек на команду Modbus, которой читается данный элемент в адресном пространстве. "0" - это "coil", т.е. одиночный бит, "4" - регистр. Поскольку ИП320 не предоставляет вам альтернатив выбора по этой части, просто наплюйте и забудьте.

drvlas
13.11.2010, 11:19
спасибо огромное!

достаточно понятно даже мне (хотя, поверьте, читал я описание конфигурации ип320 - но потому с спрашиваю, что там нет четких ответов).

итак, резюмирую:

1) если в конфигураторе я вижу значок 4х - это означает адресацию в регистрах, если значок 0х - это адресация в битах.

2) все переменные - в едином адресном пространстве. поэтому нужно беспокоиться. чтобы пространство, занятое, скажем, регистром (со своим 4х) не перекрыло пространство, занятое битом (со своим 0х).

если все так - можно не отвечать. еще раз спасибо - и до новых вопросов!

Николаев Андрей
13.11.2010, 11:23
пространство общее, по этому надо:
1. выравнивать пространство - распологая сначала 8-ми битные переменные, количество кратное двум (один регистр), потом регистры, четное количестов, потом 2-х регистровые. и соответственно считаете. четное количество - для выравнивания - легче будет не запутаться - пусть лучше в резерве останутся.

Terrano1992
13.11.2010, 12:21
выравнивать пространство - распологая сначала 8-ми битные переменные, количество кратное двум (один регистр), потом регистры, четное количестов, потом 2-х регистровые.
Если хочется, чтобы все само собой уложилось "без дырок", то лучше в обратном порядке - сначала прописать все Float'ы, затем Word'ы, и после них уже добавлять "8-бит".

nsxf
13.11.2010, 12:43
а подскажите пожалуйста, я правильно понял, что
1. в настройках модбас слэйв, я могу узнать номер регистра только путём подсчёта начиная с нуля? нигде этот номер не фигурирует?
2. я не могу поменять номер регистра обмена просто поменяв его номер, а мне надо его переставлять, или вставлять новый и т.п.?

Николаев Андрей
13.11.2010, 13:19
вы все правильно понимаете.
а с точки зрения расширения программы я бы начинал с битов. но имхо - дело вкуса и удобства.

nsxf
13.11.2010, 14:52
вы все правильно понимаете.
а с точки зрения расширения программы я бы начинал с битов. но имхо - дело вкуса и удобства.

ага, спасибо. я так и сделал!

drvlas
13.11.2010, 21:13
Все-таки перечитайте еще раз руководство по конфигурированию ПЛК Овен. Есть там ответы на эти вопросы...
Подожди, подожди! Читаю это руководство больше, чем дочке своей сказок :) Но вот какая нескладушка и какие новые непонятки.

1) Ты пишешь
пространство под индикаторы и кнопки выделяется порциями в размере 1 байт. Но в этом байте может разместиться до 8 индикаторов и кнопок (8 бит)
А что пишет тот документ, цицирую стр.21 (последний абзац перед п.4.9):

Для одного индикатора в битовой области необходимо выделить целый байт, причем в конфигураторе указывается нулевой бит этого байта (т.е. номер бита должен быть кратен 8). При работе панель анализирует весь байт по логике ИЛИ, т.е. если любой из битов байта устанавливается в 1, то индикатор переключается.

Опаньки! Так как правильно? Один бит на кнопку или 8 битов? Кстати, в примере (Конфигуратор) в таблице 7.1 получается, что все же индикаторам отводится целый байт. Может все же ты немного ошибся?

2) Как выводятся значения из регистров, если их обозвали в конфигураторе FLOAT? Правильно ли я понимаю, что число "укладывается" в прокрустово ложе заданной разрядности и длины дробной части? Что показывается при выходе из рамок?

Например, записано разрядность 5 и 2 знака дробных:

ХХХ.УУ

а у нас в регистре записано число 10000. Что выведется?

Или в регистре 0.0001 - его ведь тоже можно в 5 разрядов вывести, но нарушится положение точки. Так выведется

000.00
или
0.0001

Ну, и отрицательные. Если не поставили значек "Знак", а в регистр попало FLOAT число -1 - то выведется 000.00 или что?

3) При вводе значения регистра с клавиатуры панели - как вводить десятичную точку? Или нужно забить на ввод FLOAT?

4) А при вводе числа в регистр, который объявлен вот так

ХХХ.УУ

- и мы ввели 12345. Что увидим на экране? Скорее всего, 123.45. Да?
А что запишется в регистр? Там, если я уже что-то понял, будет просто двоичное представление числа 12345, а уж делить на 100 должен ПЛК. Да?

5) Переприсвоение кнопок. По умолчанию все они имеют функции. Теперь представим, что в конкретном экране я переприсвою какой-то кнопке другую функцию. Она теперь не будет выполнять "основную"?
Скажем, я даю кнопке "ВНИЗ" функцию установки бита (по которому там что-то ПЛК сделает, например, переключит экран или самоликвидируется). Так что теперь случится, если я начну ввод значения регистра, в котором, по описанию, эта кнопка должна изменять значение вводимого числа? Нажму ее и...? Изменится число или установится тот бит?

6) Все те кнопки, которые не упомянуты в данном экране (не переприсвоены) - работают? По своим основным функциям, я имею в виду.

7) При включении питания - какой экран будет светиться? В описалове сказано, что

В поле «Главный экран» – указывается номер экрана, который будет переходить панель по нажатию кнопки [ESC] (обычно это либо экран главного меню, либо наиболее часто используемый экран).

А на последней странице (в примере) уже сказано, что

Главный экран (экран, который появится сразу после включения питания) ...

Думаю, что все же Главным называют экран, который по включению и выводится. А в первой цитате - просто недосказано главное :)

Итак, представим, что в данном проекте я поставил "Авт.смена экрана". Но при этом флажки в поле "параметры проекта" не дезактивировались. Значит, с Главного экрана переход, например, на указанный следующий экран, - произойдет через 1 минуту?
Можно ли полагать, что в этот Главный я могу записать некое приветствие, а через указанное в поле "Выполнить" время панель выведет следующий экран - и после этого все переходы будут только по состоянию регистра, указанного в поле "Управление"?
Или, если "Авт.смена экрана", то и с самого первого экрана перехода никуда не будет без воли ПЛК?

Ну, вроде все. Или нет...

drvlas
13.11.2010, 22:53
Ну, вроде все. Или нет...
Нет. Еще вопрос. Все же какое куцое описание! Читаю технические характеристики ИП320 и не вижу:

Каковы пределы количества экранов? Где и как начинает сказываться размер проекта?

В описании Конфигуратора пишется о том, что "динамические графические тексты" занимают много памяти и для больших проектов (более 20 экранов) их не рекомендуется использовать.

Как сказывается число экранов на работе? У ПЛК100 памяти немеряно (я пришел от маленьких контроллеров и мне здесь всего много) и будет ли там занято 1К или 100К байт - что нам до того?
Когда ИП320 отображает конкретный экран номер 123, он ведь читает из памяти ПЛК100 только релевантную информацию (для этого 123-го экрана)? Если да - то какая разница, сколько всего есть экранов?
Если нет, то (страшно даже представить) ИП320 черпает из ПЛК всю память, относящуюся к ее работе?
Или там все не так? А как?

Почему спрашиваю. Распределяю память. Сначала положил битовую область. Хочу, чтобы она так и оставалась в начальной области - и чтобы на последующих стадиях проектирования мне не стало ее мало. Что мне мешает вообразить, что у меня будет 100 экранов и каждому я отведу по 2 байта битовых флагов (не считая тех индикаторов, которые займут байтные места)? Резервирую 200 байт.
На байтовые (индикаторы) тупо резервирую по 20 байт на экран - еще 2000 байт. "Я съем при Вас, Вы сможете проверить" :)
Потом располагаю область регистров. И тоже не хочу потом переделывать номера. Резервирую по 10 штук (20 байт) на экран = еще 2000 байт.
То есть, при таком подходе в памяти ПЛК100 будет "захвачено" около 4200 байт, причем с огромными "дырами", ибо далеко не все экраны будут созданы и ни один из них (надеюсь) не использует все зарезервированные для него номера.

Где мне от этого станет плохо, неудобно?

Вопрос совершенно отдельный. При работе с конфигуратором ИП320 я создал экран 1, потом 2, 3, 4... Потом подумал, что экран номер 33 очень красиво было бы расположить сразу за экраном номер 1. Могу я его перенести на место второго и сместить номера всех от него до 32-го (не переделывая все экраны ручками)?

Могу я для создания нового экрана взять имеющийся старый в качестве шаблона?

Последние 2 вопроса, конечно, не сравнимы по важости с первым, но хочется работать удобно и иметь красивый список экранов...

Николаев Андрей
13.11.2010, 23:59
Документация на панель действительно не совсем доведена до ума.
Возьмите готовые примеры. Там и про Float и про время есть.
С точки зрения ModBus Slave в ПЛК без разницы будет панель ИП320 или СП270

drvlas
14.11.2010, 01:08
спасибо за инфо!
но, понимаете, я тщательно формулирую конкретные вопросы именно для того, чтобы получить на них конкретные ответы. что дадут предложенные вами примеры в ответе на вопросы, например, об ограничениях? я спрашиваю, поплохеет ли мне от того, что создам 100 экранов (ведь в доках написано "большой проект" про 20 экранов) - что дадут мне примеры? или искать среди них тот, у которого много экранов, потом его собирать-запускать и зрить - будет где-то тормозить или нет?

а адресация для индикаторов - любой бит или кратный 8? человек, который уже мне помогал (дай бог ему здоровья), написал несколько отличную инфо от той, что в доках. я спрашиваю очень простое: он ошибся случайно или в документации ошибка? можете вы рассудить?

как работает переприсвоение кнопок - да где я такое в примерах найду? это ж умереть можно.


иное дело, вопрос типа "как организовать такие-то функции?" - тут уже грамотно выбранный пример очень может сгодиться. но у меня здесь другие вопросы. пройдитесь по ним, если есть возможность.

да, еще. николай, а вот по процедурам работы с ип320 (перетасовка экранов, копирование экранов) - не могли бы вы просветить?

спасибо!

Николаев Андрей
14.11.2010, 01:51
спасибо за инфо!
но, понимаете, я тщательно формулирую конкретные вопросы именно для того, чтобы получить на них конкретные ответы. что дадут предложенные вами примеры в ответе на вопросы, например, об ограничениях? я спрашиваю, поплохеет ли мне от того, что создам 100 экранов (ведь в доках написано "большой проект" про 20 экранов) - что дадут мне примеры? или искать среди них тот, у которого много экранов, потом его собирать-запускать и зрить - будет где-то тормозить или нет?

а адресация для индикаторов - любой бит или кратный 8? человек, который уже мне помогал (дай бог ему здоровья), написал несколько отличную инфо от той, что в доках. я спрашиваю очень простое: он ошибся случайно или в документации ошибка? можете вы рассудить?

как работает переприсвоение кнопок - да где я такое в примерах найду? это ж умереть можно.


иное дело, вопрос типа "как организовать такие-то функции?" - тут уже грамотно выбранный пример очень может сгодиться. но у меня здесь другие вопросы. пройдитесь по ним, если есть возможность.

да, еще. николай, а вот по процедурам работы с ип320 (перетасовка экранов, копирование экранов) - не могли бы вы просветить?

спасибо!

1. Можно просто Андрей.
2. По панелям я вообще не силен - я бы эту тему в панелях завел... На сколько знаю количество экранов специально не ограничивается. Если у Вас будет 100 пустых экранов - будет работать. Если у Вас 10 экранов с верху до низу забитых float-ами и т.д. - может и их не хватить. Все дело в размере итоговой программы.
3. Адреса для кнопок и ламп - бит может иметь любой адрес, ни о какой кратности ничему речи быть не может... или я что то недопонимаю в вопросе...
4. Что такое переприсваивание кнопок?

P.S. чтобы получать лаконичный ответ на конкретный вопрос - задавайте его коротко и лаконично.

P.S.S. В примерах есть очень много полезной информации, которая возможно прямо не отвечает, но в примере где несколько битов видно, что адреса у них не кратны 8, к примеру.

Gans
14.11.2010, 08:49
для панели опереатора ип320 могу порекомендовать создавать экраны с нумерацией кратной 10 - очень удобно добавлять экраны. :-)

а с точки зрения расширения программы я бы начинал с битов. но имхо - дело вкуса и удобства.из выше прочитанного я понял что панель оператора мастер, а плк1хх слейв. (я так всегда делаю) в этом случае очень удобно на плкххх в конфигурации создавать несколько слейвов только с разными адресами:
1. слейв 1 – измеренные значения. (всё регистрами)
2. слейв 2 – ввод аварийных уствок. (всё регистрами)
3. слейв 3 – индикация нештатных ситуаций (по восемь бит - например датчик температуры прямого отопления неисправен и т. д.)
4. слейв 4 – управление системой автоматического управление гвс (по восемь бит - например вклю/выкл отопление и т. д)
5. и тд. (дальше уже сами)
в этом случае даже если надо что-то добавить или оказалось что-то не нужное в панели оператора не так уж много переделывать и всё очень удобно и красиво получается :-)

drvlas
14.11.2010, 09:43
1. Можно просто Андрей.
Извините, заработался!


я бы эту тему в панелях завел...
Нашел! Спасибо! А как бы туда перенести эту мою тему? Нехорошо как-то вышло...


P.S. чтобы получать лаконичный ответ на конкретный вопрос - задавайте его коротко и лаконично.
Стараюсь, чтобы понятно... Ну, мы с Вами уже говорили об этом. очевидно, у нас чуть разные привычки. Моим уже так много лет, что прямо беда с ними :)

2 Gans: Спасибо отдельное! Вы тоже из немногословных? ;)
Из Ваших интересных подсказок (буду использовать, ИСТЕСНА) я сделаю парочку выводов, уж не обессудьте болтуна:

1) Таки нет у Конфигуратора умения переставлять экраны. Если уж создал 1, 2, 3, то поставить следующий после первого - зась! Отсюда и нумерация по 10. Что ж, вспомним Бейсик...

2) Можно одно и то же физическое устройство связывать с Мастером под разными номерами. Это как раз и позволяет что-то упрощать при переделках. Но что? Я не понял. Ведь у слейва 1 и слейва 2 физически одна память. Если я занял регистром место по адресу 0, то этот адрес у второго слейва уже нельзя использовать? Или что? Или компилятор у ПЛК сам разберется с областями памяти нескольких созданных Слейвов и уплотнит физическое размещение?
А как с трафиком? Все же, что Мастер вычитывает? Строго то, что относится к активному Экрану? Как часто? Где, где это можно прочесть?

3) Похоже (эх!) мне придется переделать некоторую работу (в связи с п.1 из понятого). И похоже, что таки скопировать экран для шалона нельзя. Понимаешь, ведь та идея с динамически переключаемыми экранами (другая ветка) - она же великолепна! Но немного влом повторять каждый экран 4 раза.

Вообще, мне, как новичку, очень импонирует многое в самой организации процесса создания устройства. Вот это разнесение всей программы на кусочки, описываемые (трудно назвать процесс работы с Конфигуратором прораммированием) в независимых частях - в ИП320 создал весь интерфейс пользователя, в ПЛК нарисовал алгоритм, где-то на уровне системы обмена Мастер-Слейв за меня решили вопросы обмена... Очень ново и здорово для человека, который в битиках привык возиться!
Поэтому методичное занесение адресов регистров, размещение пиктограмм на экранах, ведение таблиц распределения адресов и прочее - это довольно скучно, но это здОрово! Думаю, и сопровождение таких проектов, их модификация - простой процесс. При условии, что продумано хорошо и задокументировано тоже :)
Вот и пытаюсь сейчас продумать. Когда опыта - ноль. Ладно, пора ломать свои таблицы.

Кстати, решил, вот что. Всю структуру "сначала биты, потом область байтов, потом область регистров" я не буду распространять на все 100 экранов (вообще-то у меня до 20 экранов, это я так утрирую, чтобы вы мне подсказали подводные камни. Но не подсказываете, значит плыву вслепую).
Получается вот что. сначала область на 20 экранов для битов. Я вроде продумал все - должно хватить. Причем здесь в одни рамки (по объему резервирования) попадают и очень насыщенные экраны, и такой себе экран-заставка (ЛОГО). А у заставки вообще один регистр - номер версии программы!
Вот я и подумал: а почему так важно биты в начале? Да никакой разницы! Просто номера битов в начала идут 3-хзначные, а потом придется 4-5 значные писать. Ну и что?
Поэтому, затевая очередную переделку, я создаю на каждый экран свою структуру биты-байты-регистры. Ее параметры (размеры) я выбираю из каких-то представлений о будущем наполнении экрана. Скажем, для экрана ЛОГО я возьму 1 регистровый адрес на биты, один на байты и парочку на регистры. И ясно, что этому экрану такой короткой структуры с головой хватит. А для экрана ручного управления механизмами я отведу побольше памяти - там мало ли чего придумаю еще.
Вот так и распределю память: память для структуры первого экрана, память для структуры второго экрана и т.д. Тогда и колическтов экранов меня не жмет: добавляю экран, добавляю память.
Где-то так.
Вот сейчас правил оЧепятки и возник лаконичный вопрос: может я вообще зря называю все это распределением памяти? Это же распределение адресов!
Тогда вот лаконика:

Если в проекте у меня всего 2 регистра. Если номер одного из них 0, а второго 10000 - то в памяти ПЛК компилятор разместит их рядом? Он преобразует номера регистров в рядом расположенные физические адреса?

Terrano1992
14.11.2010, 09:57
На байтовые (индикаторы) тупо резервирую по 20 байт на экран
По 160 индикаторов и/или кнопок на одном экране? :eek:
На панели ИП320 всего 20 кнопок, и чтобы их все без остатка назначить, достаточно 5 байт. Да и 20 видимых индикаторов с поясняющим текстом на ее экранчик не влезет - это ж не индустриальный писюк с SVGA-дисплеем 1024*768...
Если все еще непонятно, в каждом созданном вами элементе "8 бит" можно уместить ровно 8 индикаторов и/или кнопок (битовых объектов, принимающих значение True или False).
Пример: добавляете вы в пустой Modbus Slave (т.е с нулевого адреса) субэлемент "8 bit". И обзываете его "Knopochki". Теперь из любого места программы ПЛК вы можете работать с любым битом этого элемента, как с глобальной переменной:

IF Knopochki.5 = TRUE THEN (* если на ИП320 в каком-то экране нажали эту кнопку *)
Knopochki.0 := FALSE; (* то погасим вот этот индикатор *)
Pause := TRUE; (* и приостановим работу установки *)
ELSE
Knopochki.0 := TRUE; (* иначе его включим... *)
Pause := FALSE; (* и разрешим установке работать дальше... *)
END_IF

В проекте панели на этом "каком-то экране" объекту-кнопке присвоен адрес бита "0х"5, а индикатору "0х"0. И на каком-то другом экране вы можете повторно обращаться к тем же самым битам, если вам и там надо вставить кнопку и индикатор того же назначения (пусть даже они там визуально оформлены как-то иначе).
Вообще говоря, вы явно не с того конца за разработку программы ПЛК взялись. Сосредоточьтесь на ее основном алгоритме, проработайте его. А затем уже пришьете к этому алгоритму редактирование рабочих и управляющих переменных, индикацию и всю прочую требуху (то есть HMI, человеко-машинный интерфейс для оператора установки). Вот тогда и станет ясно, сколько и каких переменных вам требуется для организации HMI. А затем уже раскидаете эти переменные по экранам своего проекта панели.

Terrano1992
14.11.2010, 10:18
как работает переприсвоение кнопок
нет никакого "переприсвоения".
есть объект "кнопка", который вы создаете на экране. в его свойствах назначается реальная кнопка на панели, по нажатию которой объект выполняет заданное вами действие (сброс в 0, установку в 1, триггерное переключение 0/1 или генерацию короткого импульса) с выбранным вами битом в области ввода-вывода.
это назначение действует только в пределах данного экрана. на другом экране та же самая кнопка панели может производить совсем другое действие с совсем другим битом, или совсем ничего не делать.

в проекте у меня всего 2 регистра. если номер одного из них 0, а второго 10000
вы не назначаете номера регистрам, они нумеруются автоматически, при создании элемента в области ввода-вывода. чтобы получить номер 10000, придется создать перед ним 10 тысяч регистров...

а почему так важно биты в начале? да никакой разницы! просто номера битов в начала идут 3-хзначные, а потом придется 4-5 значные писать. ну и что?
ничего. это не догма. можете размещать субэлементы ввода-вывода в любом живописном беспорядке, если вам так окажется удобнее. все равно при разработке проекта с объемистым вводом-выводом придется потратить немного времени и завести табличку (хоть в экселе, хоть на бумаге), где будет имя каждого элемента, занимаемые им адреса и комментарий по его функционалу. иначе запутаетесь, пытаясь все это в голове удержать.

Валенок
14.11.2010, 10:32
опять он тут. :)



таки нет у конфигуратора умения переставлять экраны. если уж создал 1, 2, 3, то поставить следующий после...

сортируются они по своему номеру-индексу, а если надо кудато-то перетащить - копируете экран и сносите исходный.
и нумерация через 10 нужна исключительно для визуального удобства работы в конфигураторе, экраны скучкованы по смыслу.а вообще-то нумерация экрана пофиг.



если я занял регистром место по адресу 0, то этот адрес у второго слейва уже нельзя использовать?

только через ^


ведь у слейва 1 и слейва 2 физически одна память

у штатных слейвов разная.


или компилятор у плк сам разберется с областями памяти нескольких созданных слейвов

это он любезно предоставит вам. и только вам.
а раз слейв один, а мастеров туева хуча ( например на разных интерфейсах) то, например, пересылка мастер1>слейв>мастер2
мастер2.уставка:=мастер1.уставка



если в проекте у меня всего 2 регистра. если номер одного из них 0, а второго 10000 - то в памяти плк компилятор разместит их рядом? он преобразует номера регистров в рядом расположенные физические адреса?

Cкорее всего рядом. но вас это не должно парить. это не прямые регистры,
это область отображения.

Валенок
14.11.2010, 11:04
ИП320 черпает из ПЛК всю память, относящуюся к ее работе


Если в проекте у меня всего 2 регистра. Если номер одного из них 0, а второго 10000 - то в памяти ПЛК компилятор разместит их рядом? Он преобразует номера регистров в рядом расположенные физические адреса?

Тока щас допер до смысла вопроса.

ИП320 ниоткуда ничего не черпает. У него свои, независимые ресурсы.И если в проекте на ИП320 всего два регистра @0 и @10000, То, надеясь на разработчиков, предполагаю, что это не прямые регистры, и реально занятая область в ИП-320 - 4 байта.
И если при этом он мастер, то для создания ПЛК-слейва (штатного),


Terrano1992 :
чтобы получить номер 10000, придется создать перед ним 10 тысяч регистров...
:eek:

Если же мастер - ПЛК, то не вижу проблем.

Валенок
14.11.2010, 11:24
...при разработке проекта с объемистым вводом-выводом придется потратить немного времени и завести табличку (хоть в экселе..), где будет имя каждого элемента, занимаемые им адреса и комментарий по его функционалу....

+1е38

Без этого проект - спам. Любой объем ввода-вывода необходимо документировать в отдельном документе, т.к. область io логически независима от существующих на данный момент слейвов и мастеров.

drvlas
14.11.2010, 12:08
Ну, порадовали, спасибо огромное!

Давайте по порядку.


Если все еще непонятно, в каждом созданном вами элементе "8 бит" можно уместить ровно 8 индикаторов и/или кнопок (битовых объектов, принимающих значение True или False).

Если все еще не понятен мой вопрос, то повторяю его настойчиво:

Документ:
Панель оператора ИП320
Конфигурирование
Руководство пользователя

Пункт 4.8.
Страница 21.
"При работе панель анализирует весь байт по логике ИЛИ"

таблица 7.1 на странице 30 "Магниты" - тоже по байту на индикатор.

Умоляю, прокомментируй именно это! Скажи, что там наврали - и я все прощу :)


Вообще говоря, вы явно не с того конца за разработку программы ПЛК взялись. Сосредоточьтесь на ее основном алгоритме, проработайте его.
Почему? Я иду параллельно, с вашей помощью :) Там у меня есть алгоритм, много чего напробовал. Более того, задача-то у меня в переводе проекта с микропоцессора на ПЛК100. Т.е алгоритм достаточно понятен.
Но уже чувствую, что пора взаимодействовать с панелью. И тут вижу, что продумать систему экранов - очень важно. Это и удобство работы оператора, и надежность работы системы, и всякое-разное. Думаю, самое время хоть в черне все набросать. Не забывайте, что я же ни разу не запускал панель с ПЛК! А это может многое изменить в моих представлениях.

Gans
14.11.2010, 12:18
Пункт 4.8.
Страница 21.
"При работе панель анализирует весь байт по логике ИЛИ"
таблица 7.1 на странице 30 "Магниты" - тоже по байту на индикатор.однозначна на текущий момент очепятка ;) а вот в 2007 году .....

drvlas
14.11.2010, 12:30
нет никакого "переприсвоения".
есть объект "кнопка", который вы создаете на экране. в его свойствах назначается реальная кнопка на панели
Стоп-стоп! Те кнопки, которым я не присвоил явно функцию в данном экране - вообще не отрабатываются? Или как?


вы не назначаете номера регистрам, они нумеруются автоматически, при создании элемента в области ввода-вывода. чтобы получить номер 10000, придется создать перед ним 10 тысяч регистров...
Да как же так? Вот те буковки, что я пишу в Конфигураторе возле "4х" и "0х" - это что? Это номера?


при разработке проекта с объемистым вводом-выводом придется потратить немного времени и завести табличку (хоть в экселе, хоть на бумаге)
КАНЕШНА! Завел. Уже и переделал пару раз :) Я в курсах, что такое забыть самим собою придуманное :)

drvlas
14.11.2010, 12:35
однозначна на текущий момент очепятка ;) а вот в 2007 году .....
Скачал с сайта. Да, есть изменения. Теперь эта херня напечатана на странице 22, а не на странице 21.

Так где у нас ветка по панелям, Андрей? Куда пожелания отправлять?

drvlas
14.11.2010, 12:41
опять он тут. :)
чему я очень рад!


сортируются они по своему номеру-индексу, а если надо кудато-то перетащить - копируете экран и сносите исходный
блииииин! не увидел по правой кнопке "копировать"... спасибо!


у штатных слейвов разная.
...
это он любезно предоставит вам. и только вам.
а раз слейв один, а мастеров туева хуча ( например на разных интерфейсах) то, например, пересылка мастер1>слейв>мастер2
мастер2.уставка:=мастер1.уставка
ну, это нужно переварить. в конце концов, пока могу так круто и не замешивать...

Terrano1992
14.11.2010, 15:24
Пункт 4.8. Страница 21.
"При работе панель анализирует весь байт по логике ИЛИ"
Не знаю, откуда в документации такое. Может быть, осталось от самых первых версий панели и конфигуратора, забыли поправить...
Сейчас (конфигураторы 6.5е, 6.5к) индикаторы работают именно с одиночными битами, а не с "байтами по логике ИЛИ". Я в этом на 100% уверен, поскольку рядом со мной макет (ПЛК100Р-М, ИП320, МВА8 и МДВВ), где оператор может независимо включать и выключать с панели любой из 5 циркуляционных вентиляторов в сушильной камере. Все включается, выключается и запоминается в Retain. На одном экране 5 триггерных кнопок и 5 индикаторов, все 5 бит упакованы в один байт. Если бы было "по логике ИЛИ" - то у меня бы по нажатию на любую из 5 кнопок все 5 индикаторов хором зажигались или гасли...

Те кнопки, которым я не присвоил явно функцию в данном экране - вообще не отрабатываются? Или как?
"Или как". Например, есть кнопка "ALM". У нее в панели есть своя предопределенная функция - показать вам экран списка тревог (он в панели есть всегда, его проектировать не нужно, только тексты тревог в табличку прописать). Но вы можете на каком-то из ваших экранов создать объект "кнопка" и привязать его к кнопке "ALM". Тогда на этом экране она будет делать то, что вы опишете в свойствах объекта, а на остальных (где она не описана в одном из "кнопочных" объектов) выполнять свою штатную функцию.
Или можете в каком-то из экранов определить кнопку ESC, чтобы она выполняла переход не на предыдущий экран (откуда мы попали в текущий), а на тот экран, какой вы желаете. Причем сделать ее скрытой, чтобы не загромождать экран. Хотя без реальной нужды вряд ли стоит менять назначение навигационных кнопок (ESC, ALM, "стрелки", SET и ENT), нарушая привычный порядок навигации, выполняемой с их помощью. Разумнее использовать кнопки цифрового поля.

Да как же так? Вот те буковки, что я пишу в Конфигураторе возле "4х" и "0х" - это что? Это номера?
Чтобы обратиться из панели к регистру - надо, чтобы этот регистр существовал в области ввода-вывода. Иначе панель напишет вам "Потеря связи...", поскольку не сможет данный регистр прочитать. Ну а когда вы конфигурируете область ввода-вывода в ПЛК, то не сможете создать регистр с адресом 100, не создав перед ним 99, 98, 97 и так далее до 0.
Так что с гипотетическим "регистром 10000" - на здоровье. Создавайте 10001 регистр и обращайтесь к любому из них. Последний как раз и будет с адресом 10000. :)

если в проекте на ИП320 всего два регистра @0 и @10000, То, надеясь на разработчиков, предполагаю, что это не прямые регистры, и реально занятая область в ИП-320 - 4 байта.
Если панель - мастер, то она читает из сети только те переменные, которые использованы на данном экране, не забивая себе мозги лишней информацией. Вот в случае панели-slave все хуже. Насколько я помню, в этом случае ПЛК в нее все переменные проекта вынужден вдувать.

Terrano1992
14.11.2010, 16:38
поэтому, затевая очередную переделку, я создаю на каждый экран свою структуру биты-байты-регистры. ее параметры (размеры) я выбираю из каких-то представлений о будущем наполнении экрана. скажем, для экрана лого я возьму 1 регистровый адрес на биты, один на байты и парочку на регистры. и ясно, что этому экрану такой короткой структуры с головой хватит. а для экрана ручного управления механизмами я отведу побольше памяти - там мало ли чего придумаю еще.
вот так и распределю память: память для структуры первого экрана, память для структуры второго экрана и т.д.
еще раз повторяю - это неверный подход к проектированию обмена между плк и панелью оператора (не только ип320, а вообще любой панелью)...
вот, допустим, есть у вас некая сушильная камера. где измеряется температура теплоносителя, температура воздуха внутри камеры, его относительная влажность и еще куча всяких второстепенных параметров. предположим, что самые главные из этих параметров - температуры теплоносителя и воздуха внутри камеры. и вы хотите, чтобы оператор видел их даже с дивана, где он пьет очередную рюмку чая. соответственно, выводите их крупным шрифтом на главном экране.
следующий экран показывает сразу все измеряемые величины. само собой, мелким шрифтом, чтобы уместилось. среди этих величин присутствуют две вышеназванных. так что же, их продублировать в еще одном наборе регистров? а зачем?

Валенок
14.11.2010, 22:58
Короче.

1. Плк всегда читает/пишет всю область io.

1.1 Если плк-мастер, и хочется чего-там сэкономить, создаем кучу UMD для каждого экрана (бу команд)+ UMD для текущего экрана (пол-тайм). Или UMD для для каждой переменной + UMD для текущего экрана. И экономим. ( :confused: ) Но это гиморнее чем п.1.

1.2 Если плк-слейв, вообще о чем разговор? панель сама считает/запишет чего ей надо.

drvlas
15.11.2010, 11:32
Спасибо, товарищи! Намного легче стало ориентироваться в этих вопросах. И немного стыдно, что протупил - HMI это и есть форум про панели.

С номерами регистров теперь разобрался. Кажется :)

Теперь с экранами.

еще раз повторяю - это неверный подход к проектированию обмена между плк и панелью оператора (не только ип320, а вообще любой панелью)...
...
чтобы уместилось. среди этих величин присутствуют две вышеназванных. так что же, их продублировать в еще одном наборе регистров? а зачем?
Совершенно справедливо! Позвольте мне набросать, как я теперь понимаю структуру экранов (СОБСНО. уже создаю, сохранив предыдущую табличку, как памятник тупости).

Итак, я теперь знаю, что ПЛК в своей памяти, конфигурируемой с помощью Конфигуратора ПЛК, держит специальные данные, доступные Клиенту-ИП320. Нумерация, которую я создаю при последовательном резервировании адресов (попутно их называю удобными мне именами), должна быть отражена в табличке связи. И именно из нее я так же черпаю информацию при работе с Конфигуратором ИП320 - вот те самые номера регистров и битов.
Так?

Далее. Я хочу все экраны сделать с управлением от ПЛК. Ну, не знаю, так ли это принципиально, но здесь все порождено подсказанным вами способом обойти ограничение Конфигуратора ИП320 - статический формат выводимого значения регистра.
То есть, у меня совершенно точно есть так называемые Параметры, которые представляют собой очень разные по формату переменные - от битовых флагов до двойных слов и еще дробные величины с дискретностью 0,1...0,001.
Чтобы в одно место на экране вывести такие разные по формату значения, я на самом деле делаю незаметную для оператора подмену - в зависимости от номера параметра ПЛК выбирает именно тот (заранее созданный) экран, который в том нужном месте вывода показывает регистр в одном из форматов:

-123456789
-1234.5
-123.45
-12.345

Таким образом, автоматическая смена экрана будет, никуда не деться.
А раз так - то она должна работать всегда?
Так?

Если так, то ПЛК всегда в курсе, что именно сейчас выводится. Тогда вопрос: а почему бы не сделать, чтобы для каждого из выводимых экранов ПЛК использовал одни и те же ячейки памяти?
Грубо говоря, приготовлю я 2 байта битов и 20 байт регистров (ТИПА с запасом). Включаю (не я, а ПЛК) экран номер 1.
ПЛК знает, что для этого экрана в регистр номер 1 нужно записать значение переменной wFoo, а в регистр 2 - значение переменной byBar. Ну, и записывает, ясен перец. Все. Для данного экрана ничего больше.
А когда экран по какой-то причине нужно переключить, то ПЛК об этом-то узнает ПАЛЮБЕ. Переключая экран (по сути, прописывая номер экрана в один из регистров), ПЛК по быстрячку подкинет во все необходимые регистры и биты всю релевантную инфо.

Это как-то напоминает работу с обычным индикаторов "на борту". Все, что туда выводится, процессор знает - и заполняет строго предписанные ячейки памяти, чтобы именно в данном режиме именно на данном знакоместе вывелась именно данная величина.

Я на верном пути, товарищи?

Terrano1992
15.11.2010, 13:02
почему бы не сделать, чтобы для каждого из выводимых экранов плк использовал одни и те же ячейки памяти?
Пример, который вам давал Валенок, проанализируйте - там так и сделано. Т.е. панель на любом из выбранных "динамических" экранов работает с одним и тем же регистром. А ПЛК (заранее знающий, что именно мы сейчас редактируем, поскольку он же и готовил все данные для создания требуемого динамического экрана) перекладывает содержимое этого регистра в рабочие переменные программы.

Crusash
15.11.2010, 14:00
лично я делаю как Валенок)),на двадцать своих экранов использую всего девять(максимум десять регистров обмена), панель в режиме мастер:
-tlister - регистр номера текущего листа;
-lister - регистр изменения номера листа;

шесть регистров обмена значений(больше на лист панельки не влезает);
-Reg1, Reg2, Reg3, Reg4, Reg5, Reg6;

два байта (16 бит) на обработку кнопочек панели
-b_1, b_2... b_0,b_END...b_DOWN

и байт на различные индикаторы(хотя я обычно использую биты кнопок, они все разом тоже на лист панели всёравно не влазят)))

далее в CASE смотрю что за лист и соответственно её обрабатываю:

CASE tlister OF
1: (*проверяем изменился ли лист*)
IF NOT(last_list=tlister) THEN
last_list:=tlister;
END_IF
(*если информацию нужно выводит, просто присваиваем требуемое значение*)
Reg1:=value1;
....
Reg6:=value6;
2: (*если требуется редактировать значения, то в начеле выводим текущие значения...*)
IF NOT(last_list=tlister) THEN
last_list:=tlister;
Reg1:=value1;
....
Reg6:=value6;
END_IF
(*а потом подтверждаем изменения, например нажатием кнопки ENT...*)
if b_ENT then
b_ENT:=false;(*кстати обнулять следует и при первом входе на лист*)
value1:=Reg1;
...
value6:=Reg6;
end_if
(*или например отслеживая изменения регистра...*)
if NOT(Reg1=value1) then
value1:=Reg1;
end_if
3: (*переключатся между экранами можно стандартно(настраивая в конфигураторе панели) или программно...
IF NOT(last_list=tlister) THEN
last_list:=tlister;
b_UP:=false;
END_IF
if b_UP then
lister:=1;
b_UP:=false;
end_if
end_case

конечно в реале программа получается несколько посложней, все переменные для безопасности локализованы в одной процедуре, посложней обработчик програмного переключения экранов(так как тут после изменения регистра lister, регистр tlister изменяется с запозданием на несколко рабочих циклов, что, редко, но бывает критично), но в общем я придерживаюсь этой структуры...

drvlas
15.11.2010, 14:08
лично я делаю как Валенок))
Так и я теперь как Валенок :)

Спасибо!

Уважаемые Админы! Могу ли я попросить перенести тему в форум для панелей? Впредь постараюсь выбирать место размещения более внимательно :)

nsxf
17.11.2010, 14:21
воспользуюсь этой темой, чтобы задать ещё один вопросик.
собственно, ситуация почти как у топикстартера: панель и контроллер есть, но в данный момент не доступны (до пятницы), при этом нужно делать.

а вопрос такой: на панели есть некий экран с алармами, который в конфигураторе увидеть нельзя.
в конфигураторе для этого экрана задаётся набор алармов, для каждого аларма есть номер бита в общем адресном пространстве и описание. а как выглядит этот экран в жизни?

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

это так?

Terrano1992
17.11.2010, 16:37
фантазия говорит, что это некий скролируемый список
Да. В каждой его строчке - по одному аларму. В списке одновременно отображаются все активные алармы, при активации любого из них панель автоматически переключается на alarm screen.

нажимаю кнопку "сброс аларма",
Нет там такой кнопки, и вообще нет механизма квитирования. Пока бит, управляющий данным алармом, активен - аларм будет висеть в списке. Бит сброшен (анализом неисправностей и установкой/сбросом битов тут должна заниматься ваша программа в PLC) - аларм сам по себе исчезает из списка.

Crusash
17.11.2010, 17:01
я делал отдельный экран на тревоги, с тремя полями динамического текста, каждое поле идентично друг другу и содержит в себе текста всех ошибок. если тревог более трёх то клавишами вверх вниз можно ходить по списку. квитирование отдельной ошибки я не делал, по нажатию Esc квитировались сразу все, но при желании можно запрограммировать и на одну ошибку(скажем первую в списке)...

nsxf
17.11.2010, 23:24
спасибо за ответы!

Volonteer
21.03.2011, 12:35
Может все таки кто нибудь перенесет тему куда надо, я три дня рыл ветку HMI а большинство полезных ответов тут.

Safron
20.04.2011, 08:52
А кто подскажет, есть ли какая-нибудь возможность в процессе работы передавать права Мастера с одной панели на другую. Я имею ввиду, что во время основной работы Панелью играется Оператор (задаёт производительность, вкл/выкл и т.д.) - Панель удалена на приличное расстояние, а при настройке оборудования необходимо задавать конфигурациооные данные непосредственно на месте и соответственно -тоже нужна панель с правами мастера.

drvlas
20.04.2011, 10:55
Как я понимаю, это нереально. Конфигурация панели означает, что в ней формируется программа работы. Эта программа не допускает смены прав (мастре-слейв) "на ходу".

Другой вопрос, что "мастер" или "слейв" совершенно не определяется тем, "кто в доме хозяин". Это исключительно организация запросов-ответов. Назовите, если угодно, мастера клиентом, а слейва сервером. Мастер запрашивает данные у слейва - равно как клиент у сервера.
Поэтому реальной необходимости менять роли и нет. Все определяется удобством программирования обмена. Грубо говоря (могу ошибаться), любой вариант "кто чем и когда играется" можно реализовать как с панелью-мастером, так и спанелью-слейвом. Разница будет только в ПО его корреспондента, да в параметрах скорости обновления картинок.

Safron
20.04.2011, 11:26
То есть. если я в Панели (слейв) установлю галочку "Настр" для нужного мне регистра, то я тоже смогу изменять значение этого регистра в ПЛК как и в Панели (мастер)?

drvlas
20.04.2011, 15:35
То есть. если я в Панели (слейв) установлю галочку "Настр" для нужного мне регистра, то я тоже смогу изменять значение этого регистра в ПЛК как и в Панели (мастер)?
Нет, ИМХО.
Галочка означает всего лишь, что данный регистр будет включен в список, который обходится по кругу по нажатию кнопарика SET. То есть, что ты сможешь его изменять с панели.

А изменение регистра с ПЛК (или кто там по Модасу стучится в дверь ко мне, с толстой...) осуществляется в зависимости от распределения ролей:

1) если панель мастер (он же клиент), то она запрашивает значение регистра у слейва (сервера данных), туда же она зашлет и измененное (оператором) значение регистра. И этот обмен делается только при активности того экрана, в котором данный регистр виден. Слава Богу, именно "видимые" регистры панель гоняет по модбасу.
При изменении регистра в ПЛК (скажем, по программе), как только он станет видимым, панель его с ПЛК (сервера данных) сосчитает - и мир увидит новое значение.

2) если панель слейв, то она же есть сервер данных в рассматриваемой паре "панель-ПЛК". Тогда значение регистра хранится в ней, а мастер может захотеть изменить это значение - он инициирует обмен по модбасу и сам пихнет в сервер данных новое значение.
А при изменении значения с панели - ближайщее обращение ПЛК к совему серверу данных обнаружит изменение.

То есть, если я прав в своих сбивчивых размышлизмах, внешний результат практически не зависит от того, кто мастер, а кто слейв. Если с панели (при установленной галочке) изменен регистр, то рано или поздно ПЛК об этом узнает. Если в ПЛК изменен регистр - то тоже панель об этом узнает.

Safron
21.04.2011, 05:19
ОК. Спасибо. Если всё так, то это то, что мне нужно...