Добрый день. В каком варианте Вы их планируете использовать, совместно с какими мастерами, они на самом деле есть, но я не уверен что они сильно нужны.
Вид для печати
На данный момент использую такую конструкцию для связки ПР200 и OwenCloud:
Вложение 48612
Сетевая переменная доступна для пользователя с экрана и с верхнего уровня для смены источника задания переменной float.
Соответственно я трачу целочисленные переменные и использую как bool.
Переменные типа float - энергонезависимые.
Адресное пространство сетевых переменных узкое. У меня кончилось.
Рекомендую начать с этого https://youtu.be/NYB9QbFuRfo, там пример для ПРМов дискретных, но смысл не меняется каждый регистр может передавать 16 бит, кроме эффективности по использованию сетевых ресурсов, при таком варианте выигрыш и в быстродействии.
Предложенная идея мне понятна, но такая реализация не позволит мне сохранить 2 независимых источника для редактирования.
В OC можно применить битовую маску и писать в uint16/32, на стороне ПР200 раскладывать. Но, если пользователь придёт к оборудованию, то не сможет с экрана поменять источник задания. Только из ОС.
Вышеописанная конструкция позволяет пространственное редактирование, поскольку изменить сетевую готовую переменную можно из разных источников. Минус в отжирании адресного пространства.
Второй путь, он правда более нагрузить сетевой обмен, использовать биты любой сетевой переменной из адресов 512-576, которые расположены в битовой области с адреса 2000(HEX) 8192 (DEC), для регистра с адресом 512 это адреса с 8192 по 8208 и т.д, 64*16=1024 бит со своим доступом для мастера, но это не эффективный путь.
Это тоже решаемо, просто чуть больше преобразований потребуется.
Собственно вот тут https://youtu.be/YibiaUavC20 есть 4 проекта, 2 моих и два более упрощенных с тем же функционалом, управление хоть из трех мест, решается макросами SelChgI, SelChgB, SelChgF.
Это возможно только из режима Master? Не совсем понял как это реализовать в словаре.
Макрос работает, однако источник задания явно не определён. Не всегда такой подход можно применить.
К тому же: если источник1 задал уставку 23, перебив тем самым уставку 22 источника2, то источник2 не сможет восстановить свою уставку повторно. Необходимо будет задать иное значение, вернувшись на старое.
Вот когда-то пример делал как изменять значение из двух мест(источников) и с экрана ПР, в принципе количество источников не ограничено, неразрешимых проблем я не вижу!
Вложение 48619
Вложение 48618
У меня на выходе независимая переменная, ни к чему не "привязанная", там всегда привязана к источнику с которого было последнее изменение и у меня при редактировании с экрана я вижу текущее актуальное значение, там значение уставки с экрана, текущее значение неизвестно!
Макросы SelChg и позволяют видеть актуальные значения везде и всюду, так как выход макроса привязывается на запись обоих типов переменных.
з.ы. когда же уже исправят баг, что позволит не использовать эти макросы ????????????
Я толкую о случае изменения значения из трёх мест с помощью двух таких макросов от AI, одно из мест(источников) - переменная с экрана! Сделать можно всё что угодно, нагородить ещё больше, я не ставил такую цель, что-нибудь нагородить, у меня этого и не требуется, и так все показывает!
А зачем из 3-х мест ?
Ну если речь идет о экран, сеть, облако, то можно обойтись и двумя источниками, а экран связать с сетевой переменной. Ведь наверняка запись из сети идет не постоянно а только для смены уставки.
В общем надо пробовать различные варианты.
Так же если не хватает переменных, то float преобразовывать в int с необходимым количеством после запятой а внутри программы обратно, если прямо таки float где-то необходим...
Вот из 3 мест, экран, дискретный вход, облако https://youtu.be/alT2Oi_fFho?list=PL...uB-CXsKH-&t=36, с возможностью блокировать в местном режиме дистанционное управление.
Юрий, столкнулся со следующей ситуацией: у ПР200 задействовал 2 интерфейса RS-485, оба в режиме Slave.
Оказывается, адресное пространство 512-574 у обоих портов в этом случае общее. С точки зрения словаря есть переменные, принадлежащие к каждому порту в отдельности.
Можно ли в режиме Slave со второго порта прочитать переменную с адресом 512, если она указана в словаре, как принадлежащая к первому порту?
Суть в том, что мне нужно отдавать одну и ту же переменную по разным портам 485 интерфейса в Slave. Не хочется создавать переменную-дублёра. Адресное пространство и так небольшое.
Порядок регистров и их тип во втором слейве, если он пустой, т.е. переменные в нем не назначались, полностью совпадает с первым (полная теневая копия переменных из первого)
Если Вы попытаетесь во втором слейве создать регистры с переменными тип которых отличается от первого, например в первом 512, 513 это переменная float, то даже если во втором Вы сделаете 512 и 513 две переменные WORD, то все равно мастер из второго слейва будет читать 512, 513 как float.
Во втором слейве для связи с внешним миром вообще никаких переменных создавать ненужно!
А я считал, что у каждого RS, не зависимо от мастер-слейв область регистров не пересекаются.
Пока у меня не было такой потребности, можно было бы сделать индивидуальные области регистров.
А использовать запятую вместо точки - не судьба?
:)
Вложение 49372
Я тут и тоже негодую. Почему-то пару лет назад почти все программы в полях ввода были лояльны к тому какой я разделитель я ввожу, а сейчас все новые версии программ, которыми я постоянно пользовался стали к этому чувствительны. Ну а когда в разных местах одной и той-же программе(если я правильно все понял) надо по разному это вообще жесть
Версия 1.17.245
Создал проект.
Подписал в настройках прибора все входа-выхода.
В самом проекте всех входа стали подписанными, все выхода остались пустыми.
Не могу в эмуляторе заставить считать счётсики CTN и СT. Что не так делаю? Win 10.
После кодесиса прям не с руки. Версия Лоджика 1.17.245. И не могу найти в экранах где переходы настроить. Не подскажете?
Со счётчиками разобрался. С переходами экранов пока не вкурил. Подсобите.
Да уж, может так попробовать:
Вложение 49510
Вложение 49513
При попытке изменить свойства экранов получается это - Вложение 49531
Что это ? Вин 10. Лоджик Версия 1.17.245. По актуальнее инструкции ни к кого нет?
Перезапускаю лоджик , загружаю проект , нормально. Тыкаю свойства экранов , такая штука.
Тыкал в менеджере экранов правой кнопкой, получал такое постоянно.
Подвигал холст схемы, позумил, проблема ушла.
1.17.245.0
System.InvalidCastException: Не удалось привести тип объекта "Owen.Visualization.Presenters.LoopViewModel" к типу "Owen.Visualization.Presenters.ScreenViewModel ".
в System.Linq.Enumerable.<CastIterator>d__97`1.MoveN ext()
в System.Linq.Enumerable.WhereSelectEnumerableIterat or`2.MoveNext()
в System.Linq.Enumerable.<DistinctIterator>d__64`1.M oveNext()
в System.Linq.Enumerable.Count[TSource](IEnumerable`1 source)
в Owen.Visualization.Entities.VisualizationTree.<Cre ateCommandDescriptions>b__57_7()
в Owen.Visualization.Helper.TreeNodeCommandDescripti on.GetEnabledStateByTreeNodes(IEnumerable`1 treeNodes)
в Owen.Visualization.Presenters.ScreensManagerPresen ter.OnContextMenuShowing(Object sender, CancelEventArgs e)
в Nevron.UI.WinForm.Controls.NContextMenu.OnShowing( CancelEventArgs e)
в Nevron.UI.WinForm.Controls.NContextMenu.Show(Point screenLocation)
в Nevron.UI.WinForm.Controls.NLightUIItem.OnContextM enuRequested(NPoint pt)
в Nevron.UI.WinForm.Controls.NLightUIItem.ProcessMou seUp(MouseEventArgs e)
в Nevron.UI.WinForm.Controls.NLightUIItem.OnMouseUp( MouseEventArgs e)
в Nevron.UI.WinForm.Controls.NItemsControl.OnMouseUp (MouseEventArgs e)
в Nevron.UI.WinForm.Controls.NTreeViewEx.OnMouseUp(M ouseEventArgs e)
в System.Windows.Forms.Control.WmMouseUp(Message& m, MouseButtons button, Int32 clicks)
в System.Windows.Forms.Control.WndProc(Message& m)
в Nevron.UI.WinForm.Controls.NItemsControl.WndProc(M essage& m)
в System.Windows.Forms.Control.ControlNativeWindow.O nMessage(Message& m)
в System.Windows.Forms.Control.ControlNativeWindow.W ndProc(Message& m)
в System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)
У меня нормально ваш проект(то, что Вы выложили) редактируется(открывается):
Вложение 49532
Здравствуйте. Подскажите это нормально, берешь любой таймер (TON или TOF) и ставишь задержку 60 секунд. Реальное время работы таймера будет составлять 1 минута 12 секунд. Проверено в симуляторе.
Либо над менеджером экранов, либо над руководством и примерами надо много работать, в текущем варианте им пользоваться вообще неудобно и непонятно как.
Особенно над переходами.
Еще и глюки есть.
1) Менеджер экранов можно перетащить в удобное место (причем это еще и запрещено по-умолчанию, а чтобы переместить надо потыкать в нужные места), но это не запоминается и при запуске он всегда скрытый слева сверху оказывается. Неудобно каждый запуск его перетаскивать.
2) Непонятно, зачем показывать Группы и Группу1, если всего одна группа может быть. А то думаешь, что раз есть, значить зачем-то надо. И сидишь, паришься, дурак ты и не понял как использовать или это просто так написано.
3) То же самое с коллекциями переходов. Если задумка на будущее - скрыли бы, да показывали бы, когда появится. А если они нужны - то непонятно зачем.
4) Аналогично, выбор экрана - переменная. Непонятно зачем, всегда недоступна.
5) В коллекции переходов в меню ПКМ по переходу есть неработающая кнопка "сбросить". Случайно выяснил, что ненужный переход можно удалить, зайдя в него и выбрав "отсутствует". Это вообще непонятно и нелогично.
6) Непонятно, зачем нужен безусловный переход. Получается, при заходе на экран просто тут же выкидывает на другой. В руководстве краткая строчка, которая ничего не объясняет (это скорее в сторону руководства претензия).
7) Переход по условию "изменение переменной" - не хватает перехода по конкретному условию, хотя бы истина/ложь для булевой переменной.
8) Я так понял, переход по изменению работает, когда переменную перезаписывают на то же самое. Завел переменную "Статус датчика" и повесил ее в настройках устройства RS485, чтобы переходить на экран с параметром, если устройство недоступно. Так вот туда стало перекидывать на каждое чтение переменной из другого прибора. Причем чтение успешное, то есть переменная статус не меняется, вроде как.
p.s Дополнительно - баг с линиями в схеме. Иногда не отрисовывается связь между 2 блоками, пока не подвигаешь один (причем, когда двигаешь, часть линии не рисуется) туда-сюда, линия не видна.
Не подскажете, где почитать (посмотреть) про программную доступность кнопок ПР 200. Что то не соображу как ими переменную изменить, хоть булевскую хотя бы.
Заранее спасибо.
Никак, не реализовано еще.
И, насколько я понял, на ПР200 такого никогда не будет, добавил бы сюда и номер активного экрана! Овен просят об этом много лет, обещал в будующих разработках, типа когда модель будет уже не ПР200!
Я бы в одну целочисленную переменную всё поместил: 10 бит(0-9) отвёл на номер активного экрана, до 1024 экранов, думаю всем столько хватит и 6 бит(10-15) для битовой маски нажатых кнопок, всего 16 бит, удобно и по сети передать, всё! Даже по байту можно отвести на кнопки и экран, 256 экранов тоже всем хватит!