...хотелось бы увидеть в новой версии возможность переноса данных в EXCEL, а также возможность увеличение количество аудио файлов , для того чтобы было возможно прикрепить к каждым авариям свой звуковой файл.Возможность переноса данных в Excel будет доступна. А по поводу аудио-файлов мы как-то упустили, хорошо, что напомнили. Добавим и такую возможность. Для каждой аварии можно будет выбрать свой звуковой файл.
...пожелание: прямой драйвер Modbus TCP RTU, а так же наличие шлюза Modbus TCP RTU в системе, было замечательно(или трансляцию тегов между различными устройствами можно будет реализовать на скрипте?).Мы планируем внедрить Modbus в будущем, но только после реализации описанных выше пунктов. По поводу трансляции: Вы говорите о возможности трансляции значения тега одного устройства в тег другого устройства? Если да, то такая возможность будет и она будет легко реализовываться (включая работу с устройствами через удаленный OPC-сервер).
Пожелание: Прямой драйвер Modbus TCP RTU, а так же наличие шлюза Modbus TCP RTU в системе, было замечательно.+1.
Добрый день! Будет ли реализована привязка объекта "трубопровод" к конкретному тэгу и, соответственно, возможность менять цвет участков по изменению его значения?
P.S. При приличной "паутине" из труб на мнемосхеме, для оператора это немаловажно. К примеру, изменение цвета на определенном промежутке вполне можно привязать к работе реле протока, вместо того, чтобы рисовать дополнительные круги...
Когда планируется релиз? Хотя-бы ориентировочно.Мы планируем выложить окончательную полную версию в декабре этого года.
Добрый день. Спасибо за полнофункциональную версию. Сейчас реализовываем свой первый проект автоматизации... Очень не хватает поддержки хотя б двух опс-серверов и веб-сервера. Отчёт о работе обязательно выложим. Готовы стать тестерами вер.2.Спасибо. Будем ждать.
Смущает использование мускула для трендов. На сколько хватит его скорострельности, да и база будет расти очень быстро. Не мне вам рассказывать что в больших скадах для этого делают несколько по другому.Хватит вполне для довольно больших проектов. В текущей версии скады используются собственные базы трендов, которые значительно уступают в скорости и пр. параметрах MySQL. MySQL сейчас показывает очень хорошие результаты при правильном использовании. Взять к примеру распространенную скаду WinCC, которая использует базу данных Microsoft SQL Server и показывает хорошее быстродействие, которого хватает в крупных промышленных системах. В ряде запросов MySQL показывает худшее быстродействие, но остается на хорошем уровне, это действительно так. Мы используем MySQL с InnoDB таблицами, которые поддерживают кластерные индексы, так же, как и WinCC с Microsoft SQL Server'ом, благодаря чему данные всегда структурированы сразу по двум полям (!) и выборки даже в огромных таблицах происходят очень быстро. Мы не раз убедились в этом в недавних тестах. К тому же здесь играет роль и то, как данные записываются в БД. Мы не сохраняем в базу чистые данные, ведь их может быть слишком много в больших проектах. Поэтому, прежде чем данные будут записаны в БД, они обрабатываются и оптимизируются, чтобы получить наименьший объем данных при записи в БД (разумеется без потери качества данных) и соответственно наименьший объем при хранении данных на жестком диске и при последующем считывании данных. И здесь есть огромный простор для оптимизаций. Поэтому сейчас мы уверены в скорости MySQL даже для больших проектов и не видим существенной разницы даже с Microsoft SQL Server'ом (после релиза второй версии добавим и его поддержку, а также, возможно PostgreSQL). Ещё одним немаловажным фактором в пользу MySQL выступает её бесплатность, а для нас важно сохранить максимально низкую цену.
Заранее хотелось бы узнать про ценовую политику и особенности лицензирования.Об этом мы обязательно напишем подробнее, но ближе к релизу, чтобы не давать сейчас пустых обещаний. Точно можем сказать, что постараемся держать максимально низкую цену и предложим хорошие условия связанные с дальнейшим обновлением скады после покупки.
1. Хотелось бы на всплывающих окошках отображать список активных алярмов для конкретного мех-ма.Пожалуйста, опишите этот пункт подробнее. Вы говорите о возможности показать окошко в котором будет находиться список аварий какого-то конкретного механизма за определенный промежуток времени?
Жизненно необходимы теги-указателиИ этот момент не до конца понятен. В новой версии будут виртуальные теги, в которые можно записать все что угодно, например значение другого тега, или сумму нескольких тегов, или какое-то значение посчитанное по какой-то формуле (на усмотрение пользователя). О таких тегах Вы говорите?
Хотелось бы увидеть поддержку актив-икс
Заранее хотелось бы узнать про ценовую политику и особенности лицензирования.
Об этом мы обязательно напишем подробнее, но ближе к релизу, чтобы не давать сейчас пустых обещаний. Точно можем сказать, что постараемся держать максимально низкую цену и предложим хорошие условия связанные с дальнейшим обновлением скады после покупки.Помимо стоимости еще волнует сам принцип защиты - наличие аппаратных ключей иногда является головной болью. Идеально, на мой взгляд сделано у Kepware.
1. Хотелось бы на всплывающих окошках отображать список активных алярмов для конкретного мех-ма.
Пожалуйста, опишите этот пункт подробнее. Вы говорите о возможности показать окошко в котором будет находиться список аварий какого-то конкретного механизма за определенный промежуток времени?В общем нужен компонент который отображает список активных/архивных аварий с возможностью размещения на любом окне и фильтрацией.
Жизненно необходимы теги-указатели
И этот момент не до конца понятен. В новой версии будут виртуальные теги, в которые можно записать все что угодно, например значение другого тега, или сумму нескольких тегов, или какое-то значение посчитанное по какой-то формуле (на усмотрение пользователя). О таких тегах Вы говорите?Нет уверен что говорим об одном и том же, на всякий случаю уточню.
В общем нужен компонент который отображает список активных/архивных аварийТакой компонент будет. И для трендов тоже.
В большинстве ЧМИ есть специальные теги...Да, такие возможности будут, причем не только на уровне тегов, но и на уровне сообщений, когда можно будет к примеру одним шаблонным сообщением заменить множество сообщений и подставлять в них значения "на ходу" в зависимости от механизма. Позже мы ещё выложим небольшой отчет об этом.
Еще одно пожелание есть, для нас зело существенное. Для просмотра архивных трендов реализовать механизм "Best fit"Не знали про best fit, но интересно то, что текущая версия скады использует очень похожий алгоритм при обработке трендов. Когда Вы просматриваете интервал времени более 1 часа в Simple-Scada от Вас тоже скрыта часть точек. В больших интервалах это тысячи точек, а для тегов, которые редко меняют свои значения оптимизация может урезать более 90% точек. Подобно Best fit детализация мелких изменений сохраняется благодаря алгоритму и качество тренда практически не теряется. Без этого нельзя было обойтись, т.к. слишком сильно сказывается на производительности. И, конечно, в Simple-Scada 2 будут подобные оптимизации.
Данные хранятся в специализированных архивных файлах, SQL используется только для общения со сторонними приложениями...Любопытно! Система интересная, но реализация потребует немало времени. Учитывая это, сейчас будем делать как изначально задумывали, с доп. оптимизациями по выборке и вставке данных в БД и из неё, а также при пересылке данных по сети. А подобные, ещё более продвинутые оптимизации, начнем после релиза второй версии.
СпасиБО разработчикам за систему. Для начала вполне себе СКАДА.Спасибо за отзыв.
2. Перемещение трубопровода по координатам на 1пункт, т.к. сейчас перемещается только на число кратное 5Сейчас вы можете перемещать и на 1 пиксель. Для этого нажмите и удерживайте клавишу Alt во время перемещения. Удобнее всего перемещать стрелками на клавиатуре.
3. Возможность отмены последнего действияЭти пункты уже сделали во второй версии, но её придется подождать до конца этого года.
4. Выделение/Копирование/Вставка текста в полях скады
5. Работа с таблицами тегов, генерируемых SiemensДо этого пункта никак не доберемся. Скорее всего отложим на след. год
Могу поделиться своими насосами, которые использую в проекте...В новой версии мы уже сделали обширную базу своей графики в едином стиле, которую в будущем будем постоянно обновлять и дополнять.
Сейчас вы можете перемещать и на 1 пиксель. Для этого нажмите и удерживайте клавишу Alt во время перемещения. Удобнее всего перемещать стрелками на клавиатуре.
необходимость устанавливать MySQLОт пользователя требуется только скачать и установить MySQL не меняя никаких настроек, кроме главного пароля (для root-пользователя). Т.е. установка не представляет ничего сложного, запускаем установщик, кликаем кнопки "Далее" и "Ок", вводим пароль, которым хотим защитить БД и готово.
Настраивать ее и создавать соединения, управлять пользователями базы это целая область знаний которой должен будет обладать инженер АСУПосле установки уже будет создан root-пользователь с введенным паролем и скада по-умолчанию будет работать с ним. Если пользователь не хочет добавлять новых пользователей и разграничивать доступ, то и не нужно этого делать. С другой стороны, для продвинутых пользователей это будет доступно.
Управление базой не простое. В основном GUI для MySQL не приспособлены для отчетностиНам нравится MySQLWorkingBench, очень достойное приложение (мы используем последнюю версию). Но мы надеемся, что пользователям не придется прибегать к помощи сторонних программ для работы с БД. Simple-Scada 2 сама создает БД и её структуру, а при помощи скриптов можно будет экспортировать нужные данные в excel-отчеты и пр.
Легко скачать базу на флешку например и отправить кому-нибудь просто сохранив файл.В Simple-Scada 2 можно просто нажать кнопку "Резервная копия БД" и сохранить её куда угодно, также одним файлом и затем использовать на любом компьютере. Т.е. эта функция также выполняется средствами скады.
...то использовать её (т.е. запускать сервер и клиенты) можно на любом компьютере этой организации.
По описанию видно, что сервер работает через собственный протокол со скадойСервер работает по протоколу WebSocket (https://ru.wikipedia.org/wiki/WebSocket) RFC6455 (http://tools.ietf.org/html/rfc6455).
Будет ли этот протокол открыт? Или будет некое API для взаимодействия с сервером.На начальном этапе API точно не будет, хотя это и интересная идея. Т.к. сейчас мы не можем выделить на это время. После релиза и завершения основных возможностей можно будет подумать над реализацией API.
Мое мнение по этому поводу, что лучше лицензировать сервер. И вот почему...Да, Вы правы, для описанных случаев есть необходимость запуска клиентов на любых компьютерах. Позже мы планируем подробно рассмотреть вопрос лицензирования и постараемся учесть это.
Сервер работает по протоколу WebSocket (https://ru.wikipedia.org/wiki/WebSocket) RFC6455 (http://tools.ietf.org/html/rfc6455).Это на низком уровне. А более высокий уровень? Свой? Или там стандарт OPC Fundation classic/UA?
...появится ли возможность общаться с поддержкой по телефону?Мы всегда стараемся отвечать на вопросы всех пользователей максимально быстро здесь на форуме и по почте техподдержки. По запросу мы будем давать телефон для связи и будем стараться помочь, как мы делаем это сейчас. При необходимости можем организовать связь по TeamViewer. Но моментальной техподдержки пока обещать не можем. В скором времени постараемся и это организовать.
Это на низком уровне. А более высокий уровень?Это на уровне обмена сервера с клиентами (локальными или через интернет). А для чтения/записи данных с контроллера на сервер Simple-Scada всё по-прежнему, через OPC-DA 3.0 или ниже.
Будет ли возможность записи например в ПОЛЕ через какой-нибудь цифровой задатчик компьютерной мышкой. Сейчас только через клавиатуру.И сейчас есть такая возможность. Откройте свой проект в Редакторе, перейдите в меню "Проект" - "Настройки" и включите опцию "Сенсорный экран". Затем в скаде при установке курсора в поле будет появляться экранная цифровая клавиатура.
Будет ли в новой версии или присутствует в актуальной(я не смог найти) возможность активации ввода текста с помощью горячих клавиш?В новой версии будет возможноcть перевода фокуса между компонентами по Tab. Затем если фокус у Поля и нужно что-то в него ввести, то нажимаем Enter и вводим. Также будет доступен переход между страницами по "Crl + стрелка влево/вправо" и т.д. Также появится возможность во время ввода выделять часть текста, перемещать курсор и др.
Когда же уже появится Simple-Scada 2?Присоединяюсь к вопросу!
Здравствуйте!
Идем к завершению, совсем немного осталось сделать, но в декабре видимо уже не успеем. Нужно доделать часть функций, довести тесты до конца и организовать продажи. Также возникли задержки с регистрацией ООО из-за которых, судя по всему, мы сможем завершить регистрацию только к концу января, соответственно и начать продажи раньше не получится.
В ближайшее время постараемся отправить всем желающим тестовую версию Simple-Scada 2 (как только доведем до конца разработку основных функций и исправим известные на данный момент ошибки). Таким образом можно будет полноценно оценить возможности и работу с Simple-Scada 2. Если Вы хотите получить тестовую версию Simple-Scada 2 просто заполните эту заявку (https://docs.google.com/forms/d/1IyowPuPH-ruiwDAMVoYGxqeNXk6QeQduQsscNsESDd0/viewform?fbzx=-4862166426624679459).
Здравствуйте демо версия в декабре будет или ждать в январе хочется опробовать аж руки чешутся :)Тоже жду. Выложите версию с багами, недоработками мы протестируем и отпишимся на форуме!
Будет ли динамический вывод(мигание(например квадратика)) при изменении тега(ТС) и квитирование ???
А можно еще чтобы фиксация была (как-бы сказать...) однопозиционная, нажал-записал тег и все ,а потом её кто-нибудь другой отпустит(программа работы с устройствами) ..
Там сложности с телеуправлением - надо один раз получить команду(а человек может быть нетерпеливым
и давить на кнопочку очень часто...)
Не хотелось бы давить, но уже прошло 3 рабочих дня с окончания праздников, обновляю страницу форума каждые пол часа. Жду с нетерпением Simple-Scada 2Я сам с декабря жду))
Приносим свои извинения, но в связи с обнаруженными ошибками выход бета версии откладывается еще на две недели. Мы понимаем, что уже несколько раз обещали и переносили сроки, но проект достаточно большой и очень сложно точно оценивать скорость разработки. Разработка не прекращалась и в праздники, но к сожалению мы все таки не успели.Пойду-напьюсь.
Здравствуйте! Подскажите, а есть или будет возможность создания "графических шаблонов"? Когда пользователь создает какой-либо сложный графический объект состоящий из множества стандартных объектов (клапан, кнопка, текст и т.д.), динамизирует его, создает привязки к переменным и сохраняет как "шаблон", для того, чтобы изменения в шаблоне, распространялись на графические объекты данного шаблона во всем проекте.Излишнее усложнение как-раз и сделает из Simple Scada уже совсем другой продукт, с кучей, ненужных большинству пользователей наворотов. Simple как раз и хороша тем что её можно быстро понять, быстро использовать и не лезть в дебри настроек. Если делать Симплу такой навороченной, то она утратит свою индивидуальность и станет подобием Мастерскад, Рапидскад и прочих излишне сверхнавороченных творений.
Написать вменяемый хелп.Если Вы говорите о .chm формате, то он отличается от текущего руководства только тем, что в нем есть индексы и указатель. Все остальные функции есть и сейчас. Можно также переходить по содержанию используя панель навигации (её можно включить в Word'е), или пользоваться обычным поиском. В Вашем примере нет даже нормальной индексации и содержания, вообще не понятно зачем эта справка была сделана в chm формате, если основные функции chm не используются. Есть примеры гораздо лучше. В будущем справка также появится в формате pdf, а также появится онлайн-справка на сайте. Но это почти ничего не изменит. Будут те же функции поиска, содержание и пр., что есть и сейчас.
Нарисовать блок-схему для быстрого создания проекта (пошагово) будет полезна всем. Больше всевозможных примеров на разные темы.Все это будет. Сейчас мы тестируем beta-версию и многое ещё не готово.
Русская прога - русские названия событийА этого точно не будет. Один такой пример уже есть, это 1C-Предприятие с их собственным русскоязычным языком программирования. И это просто ужасно. Достаточно прочитать отзывы людей по поводу русского кода и его не захочется нигде использовать. Другой недостаток в том, что русский язык не международный и его внедрение не позволит распространять SCADA-систему за пределами России. Если Вы только о названиях событий, то здесь причины те же. Названия событий используются в коде скриптов и приведут к смешиванию русского и английского языков.
Начал работать с трендами, заметил что если менять цвета трендов на свои то после сохранения и открытия проекта цвета устанавливаются по умолчаниюСпасибо, будем исправлять.
Подскажите будет ли в ближайшее время обновление.Планировали ещё позавчера выложить обновление, но начали вносить ещё изменения и решили отложить его. Постараемся выложить его завтра.
Можно ли сделать так, чтобы привязка объектов на граф. поле была не левый верхний угол, а чтобы ее можно было выбиратьНе понятно о какой привязке объектов идет речь? Вы говорите о координатах объектов, или о чем-то другом?
Ребята какаято ошибка при загрузке проекта, а всего то изменил галочку на кнопку подтверждение действия оператора?Можете выслать проект с этой ошибкой на почту поддержки? И ещё, проблема не решается если завершить работу Server.exe и попробовать снова?
как то боязно теперь за стабильность системы, было пару глюков по работе с ситемой при копировании кусочка кода sql вылетала система, ну и так п мелочиДля этого и нужна beta-версия, чтобы таких ошибок не возникало в финальной. А что за sql-код из-за которого вылетала скада? Сейчас ведь в скриптах нет функций для работы с sql.
ЦитироватьМожно ли сделать так, чтобы привязка объектов на граф. поле была не левый верхний угол, а чтобы ее можно было выбиратьНе понятно о какой привязке объектов идет речь? Вы говорите о координатах объектов, или о чем-то другом?
Да, я имел в виду координаты объекта.Это будет сделать очень проблемно. Т.к. сейчас всё основывается на координатах по левому верхнему углу. Поэтому такую функцию мы скорее всего не добавим.
deldemo, возможно Вы просто упустили возможность перехода на указатель при помощи правой кнопки мыши? Просто нажимайте ПКМ, чтобы выбрать инструмент Указатель. Это ещё удобнее, чем пробел, особенно когда привыкаешь.Спасибо ! Да действительно я упустил эту возможность, как Вы и сказали ПКМ гораздо удобней.
Отлично! Ждем проект, думаю мы быстро выясним в чем здесь проблема. И если у Вас ещё остался тот скрипт, который приводил к вылету, пришлите пожалуйста и его.
Уже отправляли, продублирую ещеСпасибо! Мы сразу напишем Вам, как только получим письмо.
Но иногда мне нужно две подписи для одного поля.Может проще добавить объект Text для второй подписи и не усложнять систему?
Может проще добавить объект Text для второй подписи и не усложнять систему?Конечно, можно. Так я и делаю сейчас. Если это усложнит, то и не надо вводить. Ну, а если это можно сделать? То почему нет.
Возможно ли сделать создание массивов виртуальных переменных?Нет, сейчас это невозможно и возможно внедрить только в будущем.
Вот такой вопрос, когда то в разделе Simple-Scada 1.3.3 задавали вопрос про работу на двух мониторах, хотелось бы узнать как успехи?Да, делали такие тесты. Всё прошло успешно. После выхода Simple-Scada 2 начнем внедрять в неё поддержку нескольких мониторов.
.На счет длины - подумаем. А по поводу свойства Значение - исправим.
Не плохо бы такое свойство для поля, чтобы ограничивало длину строки. И еще: свойство "Значение" поля заполнено, но значение появляется только в редакторе но не в клиенте.
Если мне, к примеру, нужно вывести разницу двух тегов, то придется писать скрипт с виртуальной переменной?Для нескольких тегов придется либо создать вирт. переменную, либо добавить два поля, которые связаны с этими переменными и написать им одинаковые скрипты по событию OnDataChange. Может быть добавим выражения в будущем, но не сейчас.
Нет необходимости создавать вир. переменную. Поставьте Поле, свяжите его с переменной, зайдите в событие OnDataChangeС одним тегом всё вяжется. А если тега два и более, то какой тег связывать с полем?
Даже сейчас, когда Вы добавляете в проект поле без подписи - скада тратит лишнюю память на их хранение, время на их загрузку и сохранение. Поэтому поначалу мы даже рассматривали вариант не добавлять свойство подпись, чтобы пользователи при необходимости ставили его объектом Текст, но потом все же решили оставить это свойство.Может тогда и убрать это свойство, а добавить объекту Текст свойство - Парковка. Оно будет работать так. Подтаскиваете текст со включенным свойством на расстояние N пикселей к объекту Поля ввода, например, с левой стороны и текст пристыковывается к Полю ввода с применением автоформатирования, как оно сейчас действует для свойства Подпись, расположение Слева. Так же и с других сторон.
Может тогда и убрать это свойство, а добавить объекту Текст свойство - ПарковкаВ этом случае одно свойство будет заменено другим. Удаляется свойство Подсказка и добавляется свойство Парковка, которое также будет храниться впустую, если текст ни к чему не пристыкован.
У меня предложение переработать интеллектуальный ввод по Ctrl-EnterВ самое ближайшее время врядли что-то изменим в списке методов, а в будущем возможно. Только идея с разбиением по группам с одной стороны упрощает, а с другой усложняет, т.к. приходится делать действия выбора групп. Сейчас, в теории, пользователь не должен обращать внимания на величину списка методов. Он должен правильно именовать объекты (не обязательно все, хотя бы значимые для скриптов). К примеру для объекты изображений с приставкой img, например imgPicture, объекты текста с приставкой txt, например txtMyText и т.д.. Стандартные перечислимые типы и константы в скаде уже именованы по такому типу, у цветов приставка cl (от слова color) у типов частоты обновления urt (от слов UpdateRateType), у типов данных dt (от DateType).
как не пытался не смог вызвать список констант цветов как у вас
пришлось тупо смотреть их в вашем видеоуроке, которые видны были и забивать в ручнуюВ папке Simple-Scada 2 есть руководство по скриптам - там подробно описаны все константы цветов. Там же имеются примеры скриптов.
Ещё, у вас в свойствах прямоугольника есть хорошая штука, мигание, но оно ни к чему не привязаноВы можете управлять миганием из скриптов - пример мигания по значению переменной имеется в руководстве в разделе "Примеры скриптов" и в 20 сообщении этой темы (http://simple-scada.com/forum/index.php?topic=145.15).
после выхода релиза второй версии как она будет распространятся, как первая или иначе ?Simple-Scada 2 будет платной, стоимость будет начинаться от 6000 руб.
Ещё сделайте встроенную справку по F1Такого в ближайшее время не будет, но Ваше пожелание учтем.
Ещё заметил одно неудобство при написании скрипта, когда строка длинная и вызываешь окошко быстрого вводаМы ограничим смещение этого списка, чтобы он не уходил за экран. Но рекомендуем всем пользователям при написании скриптов не писать длинные строки и использовать правила хорошего тона для программирования и избегать длинных строк. Ниже очень простой пример
begin
// для примера длинный комментарий, который подробно описывает код ниже
if myvariable.ValueAsInt = 1 then imgMyImage.Color := clRed else imgMyImage.Color := clGreen;
end;
begin
{ для примера длинный комментарий, который
подробно описывает код ниже }
if MyVariable.ValueAsInt = 1 then
imgMyImage.Color := clRed
else
imgMyImage.Color := clGreen;
end;
А если зайти в папку "Pictures\", удалить файл "Pictures.spd". Затем запустить Pictures.exe и снова разрезать изображение как нужно. Не устраняется ли проблема в этом случае?всё разобрался, немного невнимательно просмотрел урок, надо было сначала пустую текстуру вставить, а потом выбрать свою анимированую, а я сразу без пустой текстуры выбирал свою и она соответственно вставлялась как есть.
Такая проблема, никак не получается создать анимированное изображение.
заметил, что горизонтальные картинки собираются в кадр в проекте, а вертикальные нетAl_Kuz, как это "собираются в кадр"? Т.е. вы их разрезаете через Pictures.exe, затем ставите в редакторе, но они добавляются в неразрезанном виде? Может быть у Вас найдется пример такого изображения?
Т.е. вы их разрезаете через Pictures.exe, затем ставите в редакторе, но они добавляются в неразрезанном виде?
deldemo, а для чего именно это нужно? Вы хотите в зависимости от значения переменной отключать или включать возможность подтверждения сообщений? Но что это даст? Пусть даже пользователь подтвердит все сообщения, они исчезнут из списка "Неподтвержденные", но их всегда можно будет посмотреть в списке "Все сообщения" и других списках.В некоторых проектах, при возникновении аварийной ошибки, происходит остановка узла/агрегата, и для восстановления его работы необходимо нажимать кнопку "сброс ошибки". Так вот, хотелось бы объединить подтверждение аварийного сообщения с этой самой кнопкой "сброс ошибки". В данный момент оператору приходится кликать два раза, первый раз он подтверждает ошибку, а второй , только уже другой кнопкой, сбрасывает.
Пока не планируется. В будущем добавим поддержку OPC-UA, как только это станет более востребованным. Пока мы видим очень слабый интерес пользователей к OPC-UA.OPC UA необходим, потому что легко написать сервер для своей железки на net http://opcfoundation.github.io/UA-.NET/ (http://opcfoundation.github.io/UA-.NET/) и использовать в скаде, в отличии от OPC DA V2,V3.
Пожалуйста, сделайте кнопкам "Подтвердить", если не свойства, о коих писал deldemo выше, то хотя бы возможность обработки в скрипте события приAl_Kuz, опишите подробно какую именно задачу нужно решить? Вы хотите, чтобы по нажатию кнопки "Подтвердить" сбрасывалась блокировка того объекта, который связан со сбрасываемым сообщением? К примеру активно сейчас сообщение "Авария агрегата 1". Пользователь нажмет "Подтвердить" и в этот момент произойдет сброс блокировки для "Агрегата 1"? Такая задача у Вас?
нажатии
Можно ли добавить в объекты выпадающий списокДа, как раз планировали его добавить. Как и инструмент "Таблица". Но это будет только после официального выхода полной версии Simple-Scada 2.
TeNQ, в Simple-Scada не будет ограничения на количество виртуальных переменных и мы отключим это ограничение в следующем обновлении.Спасибо :D
type
TMyScructure = record
A, B, C: Integer;
end;
var
I: Integer;
S: String;
MyStructure: TMyScructure;
begin
// ...
end;
Al_Kuz, опишите подробно какую именно задачу нужно решить? Вы хотите, чтобы по нажатию кнопки "Подтвердить" сбрасывалась блокировка того объекта, который связан со сбрасываемым сообщением? К примеру активно сейчас сообщение "Авария агрегата 1". Пользователь нажмет "Подтвердить" и в этот момент произойдет сброс блокировки для "Агрегата 1"? Такая задача у Вас?
{
int i1 = 3;
}
var
I: Integer;
begin
I := 3;
end;
Я это должен сейчас объявить заранее с запасом. И там был такой оператор new. И я мог в теле программы объявить переменную и соответственно выделить ей память.А здесь Вы говорите уже про объекты. New используется обычно для создания объектов. Если раньше Вы писали "MyClass my = new MyClass()", то здесь Вы должны написать "my := MyClass.Create();". Но, как видите, мы не даем пользователям таких примеров, т.к. на то есть множество причин. Мы пока не открыли доступ пользователям к классам компонентов. В будущем придем к этому и покажем примеры создания объектов через код.
Просьба - можно ли сделать отключаемым звук аварии/сообщения?Добавим эту кнопку рядом с кнопкой подтверждения, или процедуру в скрипты.
Скажите пожалуйста, возможна ли отправка e-mail сообщений через SMTP при помощи скриптов из Simple-Scada2 по изменению значения тега и предвидится ли данный функционал в будущем?
Могли бы вы добавить такой элемент как checkbox, очень удобно было бы делать выбор каких-то параметров из списка.Эту просьбу уже неоднократно озвучивали. CheckBox, ComboBox ,будут добавлены после выхода Simple-Scada 2.
Хочется увидеть возможность построения графиков по нескольким точкамПосле официального выхода Simple-Scada 2 постараемся добавить такой компонент.
Веб-клиент. Позволит запускать SCADA-систему в режиме клиента для удаленного доступаТакая возможность есть и сейчас. Только это не полноценный веб-клиент встроенный в браузер, а обычное клиентское приложение. Сейчас Вы можете просто ввести IP-адрес нужного компьютера на котором установлен Simple-Scada Server и подключиться к нему клиентом Simple-Scada по локальной сети, или через интернет.
А вместо IP адреса можно вписать доменное имя? У меня динамический IP.Нет, подойдет только IP-адрес.
в настройках забито localhost, а при запуске Server.exe светит IP моего подключенияIP-сервера отображается просто для информации, чтобы было удобно определять IP для удаленного подключения к Simple-Scada Server'у.
у меня скада 2 вообще нигде не видит уже запущенного OPCНе видит через Editor.exe? Или Server.exe? Если Вы про Сервер - то он и не должен "видеть". Т.к. он сам запустит OPC-сервер когда ему будет нужно. Если Вы про Редактор, то он должен показать Вам список OPC-серверов при импорте переменных. Например: запустите редактор, перейдите в меню "Переменные -> Редактировать". На верхней панели найдите кнопку с надписью "OPC" и нажмите её. Вы увидите панель со списком OPC-серверов. Видите ли вы там свой OPC-сервер? Если да, то кликните по нему, чтобы отобразился список тегов. Вы можете выделять эти теги кликая по ним правой кнопкой мыши, а затем импортировать их в список переменных. В этом случае Вам вообще не придется вводить адрес тега и прочее, все добавится автоматически.
и что там с изменением адреса в главном окне редактора? реализовать можно?А для чего Вы постоянно меняете адреса тегов? Добавьте переменные единожды, как описано выше и готово. Это ведь обычные теги, для чего менять их адреса?
А для чего Вы постоянно меняете адреса тегов? Добавьте переменные единожды, как описано выше и готово. Это ведь обычные теги, для чего менять их адреса?при написании программы на ПЛК пространства памяти данных периодически меняется в виду добавления, удаления и изменения данных и их типов, соответственно меняется назначение тегов в OPC сервере, при маленьком проекте это не представляет проблемы, а в достаточном большом уже не удобно.
при написании программы на ПЛК пространства памяти данных периодически меняется в виду добавления, удаления и изменения данных и их типовРаботали с различными контроллерами, но впервые слышим о том, что добавление/удаление переменных на контроллере может приводить к изменениям адресов остальных переменных. Пока ничего в интерфейсе менять не будем, Ваше пожелание учтем, возможно в будущем сделаем.
не хотите ли вы написать свой OPC?Нет, мы не планируем разрабатывать свой OPC-сервер.
А вот еще вопрос, можно ли будет в Simple-Scada 2, менять изображение не теряя некоторых свойств объектаУ объекта "Изображение" можно поменять текстуру - никакие свойства при этом не поменяются.
Нет, речь идёт об удалённом подключении через интернет. Ситуация такая, у меня на компьютере две сетевые карты. К одной я подключаю контроллеры через ethrnet, вторая через беспроводное соединение подключается к интернету. Интернет мобильный - билайн. Пробовал в браузере определить свои IP и номер порта, они постоянно меняются. Не могу подключиться скада-клиентом с ноутбука к компьютеру, на котором скада-сервер. В этом и вопрос, как это сделать?Если у Вас USB модем надо у оператора заказать услугу "внешний ip". эта услуга платная и там трафик не пакетный, а помегабайтный примерно 10 рублей за мегабайт. А в данный момент у вас компьютер имеет ip внутренней сети билайна и имеет ip типа 10.ххх.ххх.ххх, который выдал вам шлюз билайна который имеет уже внешний ip отображаемый на сайтах в интернете. Да если вы все же подключите данную опцию то не все операторы гарантируют что ip не изменится, там надо будет ставить ddns, а дальше уже вопрос к разработчикам можно ли писать адрес типа aaa.ddns.net?
Может разъясните как этот хамачи работает и что я делаю не так? Я его установил на обоих компьютерах. Запустил, всё работает. Теперь у меня есть wanip роутера, lanip роутера. ip компьютера с сервером simple scada, который мне присвоил роутер, точно так же и на компьютере с клиентом simple scada. Ещё два ip адреса, присвоенные хамачи каждому из компьютеров. И ip сетевой карты, к которой непосредственно подключены контроллеры, которыми требуется управлять. В клиенте нужно указать ip адрес компьютера с сервером simple scada и порт. Вот я и не пойму никак, что же мне там прописать ??????? :o ???Вы должны установить хаматчи на обоих устройствах. На одном нажать создать сеть (пишите произвольное имя и пароль) на другом нажать присоединиться к сети (и пишите ваше созданное имя и пароль). После чего у Вас должно отобразиться на обоих хамачи Ваша сеть и ваши устройства. Далее заходим в клиента Simple-Scada и вводи IP хаматчи к которому надо присоединиться. И все работает.
А номер порта остаётся неизменным?Номер порта на клиенте должен совпадать с номером порта указном в "Options" скады к которой подключаемся во вкладки "Simple-Client".
появляются строки клиент такой-то подключён, клиент такой-то отключёнэти строки должны появляться, т.к. клиент подключается и считывает список проектов с сервера, а затем отключается.
сегодня вечером мы выложим обновление beta-версии Simple-Scada 2, оно будет доступно по той же ссылке, по которой Вы скачивали Simple-Scada 2 (beta) раньше...
begin
if Variable1.IsGoodQuality = False then Text1.Text := 'Не удалось считать переменную'; // если качество переменной плохое – вывести предупреждение.
end.
Решил поработать с базой данных через MySQL Workbench, но немного непонятно к каким ID в таблице относятся переменные, может как нибудь в редакторе переменных это отображать??
Vladimir, да, мы планируем максимально расширить функции экспорта/импорта после официального выхода Simple-Scada 2. Это касается не только переменных, но и окон, страниц, подстраниц, трендов и сообщений.
- выхода из скрипта (досрочного) типа Returnдля этого используйте команду Exit;
- перехода по меткам в теле скрипта типа GOTO Label или Jump Labelиспользование оператора GoTo считается плохим стилем и его всегда лучше избегать. Если есть какой-то код где вы хотели бы использовать GoTo, то можете его опубликовать здесь и возможно мы сможем предложить лучшее решение без GoTo.
После опубликования полного списка команд подобных вопросов не возникнетНа самом деле мы не будем публиковать полный список, т.к. он слишком большой и т.к. это просто не нужно, ведь мы его даже не создавали. Суть в том, что в скриптах Simple-Scada 2 мы используем Object Pascal компилятор, поэтому обо всех командах и операторах можно прочесть в интернете на сайтах связанных с языками Pascal/Delphi. Здесь есть и goto (http://delphibasics.ru/Goto.php) (который мы так не рекомендуем) и exit (http://www.delphibasics.ru/Exit.php), описание типов данных (http://www.delphibasics.ru/1Types.php) и другие (http://www.delphibasics.ru/1Keywords.php). А все наши процедуры, функции и объекты опубликованы в Руководстве по скриптам.
Возможен ли запуск Simple-Scada Server в качестве службы ?Есть в планах, но трудно сказать когда именно мы сможем добраться до этого.
Отключить предупреждения сервера при запуске и сразу в трей (установкой флажка больше не показывать например)? (у меня работает в VMWare на сервере у админаА этот пункт постараемся решить быстрее, хотя пока остаются некоторые сложности.
Автоматический запуск выбранного проекта в Simple-Scada Server?сделаем.
в процедуре OnInitialization не происходит инициализация виртуальной переменной даннымиВозможно это из-за того, что проект не был сделан на демо-версии. В этом случае попробуйте просто открыть проект в редакторе Демо-версии и сразу сохранить проект (чтобы все скрипты перекомпилировались). Если это не устраняет проблему, то скажите: уверены ли Вы в том, что переменная на момент инициализации имеет значение не равное 0? Также был случай когда пользователь думал, что OnInitialization выполняется каждый раз при запуске клиента, что неверно, т.к. OnInitialization выполняется только после запуска проекта на сервере. И последний пункт в котором нужно убедиться, это то, что в проекте не используется более 64 тегов.
Может добавите функцию в Editor/Client/Server на тест целостностиВ редакторе теперь эта проблема возникать не будет, т.к. во все последующие версии будет встроено автоматическое пересохранение проектов. А для клиента и сервера добавим такую проверку, чтобы запуск некорректного проекта не заканчивался вылетом.
Доделайте пожалуйста подсветку ключевых слов в Editor (IntToStr и другие).Сейчас в редакторе скриптов подсвечиваются все ключевые слова (http://www.delphibasics.ru/1Keywords.php) языка Object Pascal, а подсветку функций IntToStr и т.п. мы не планируем, т.к. это обычные функции ио которых и строится основная часть кода и в этом случае почти всё будет подсвечено.
это обычные функции ио которых и строится основная часть кода и в этом случае почти всё будет подсвечено.Поставил Delphi.XE10.Lite.12.0 - посмотрел, действительно подсветка слов такая же как у Вас.
Если это не устраняет проблему, то скажите: уверены ли Вы в том, что переменная на момент инициализации имеет значение не равное 0? Также был случай когда пользователь думал, что OnInitialization выполняется каждый раз при запуске клиента, что неверно, т.к. OnInitialization выполняется только после запуска проекта на сервере. И последний пункт в котором нужно убедиться, это то, что в проекте не используется более 64 тегов.По высказанному абсолютно уверен (тегов 26 из них только 5 с opc сервера) - перепроверял несколько раз так и не понял на каком этапе при инициализации перестали читаться теги с OPC (Codesys OPC DA 2.0).
похоже на момент инициализации нет связи с OPCСкорее всего все так, как Вы и написали. Simple-Scada 2 запускает OPC-серверы в отдельных потоках и продолжает работу не дожидаясь полного запуска OPC-серверов, чтобы исключить лишнее ожидание и не терять времени. Можно сделать вызов OnInitialization после полной активации OPC-серверов, но тогда могут появиться лишние простои, если OPC-серверов несколько. Подумаем, может быть можно найти какое-то оптимальное решение.
Напишите у кого работает такая конструкция OnInitializationПроверили на 4 разных OPC-серверах, всё работает как нужно. Но этот тест нельзя назвать "чистым" т.к. мы не использовали реальных контроллеров из-за чего OPC-серверы запускаются быстро и проблем не возникает.
И пофантазирую) А можно ли сделать передвижной маркер, который можно таскать мышкой или двигать стрелками по графику и показывающий значение абсциссы и ординаты в данной точке? Такая возможность есть на цифровых осциллах, да и в скадах я такое виделА что он показывает когда тренд не пересекатся с линией заданной маркером?
И кстати, эта временная линия не совсем корректно отображает время, если тренд пишетсяСпасибо, исправляем.
Полезным была бы возможность добавлять дополнительные линии-уровни на трендСейчас можно быстро сделать отображение "нормальной зоны", ведь для каждой переменной задаются аварийные и предупредительные границы. При этом, если оператор будет менять их, они и в трендах будут меняться и не придется их двигать. А в будущем и доп. уровни можно добавить.
Так же иногда, для наглядности нужно раскрасить площадь ограничиваемую трендом и осью времениА с заполнением площади пока есть некоторые трудности в плане отрисовки заполнения.
Здравствуйте!Да, именно так и делаю.
Никакой разницы в настройках DCOM нет. Во второй версии Вы в редакторе переменных нажимаете кнопку "Импортировать с OPC-сервера" и в поле "Имя компьютера" вводите IP-адрес удаленного ПК? Какая появляется ошибка?
Возможно ли в будущем добавить к фигуре "Прямоугольник" свойство радиус скругления, по значению которого скруглялись бы его углы?да, но менять прозрачность такому прямоугольнику будет невозможно. С поддержкой прозрачности тоже можно сделать, но в этом случае скругление будет фиксированным, т.е. число вариантов скругления будет конечным. Например 4, 8, 16, 24, 32, 48 px. Подошел бы Вам такой вариант?
Также, хотелось бы иметь возможность рисовать наклонную линию (сейчас инструмент "Линия" рисует отрезки только под прямым углом)Эта задача пока отложена на будущее.
колонки под пользовательские наиболее часто используемые цвета, которые можно было бы один раз настроить и использовать во всех проектах?действительно хорошее предложение. Сделаем. Но не в ближайшем обновлении, т.к. на ближайшие обновления запланировано добавление других возможностей.
Рисуется аналогично заслонке только один из треугольников закрашен в черный цветСделаем.
С поддержкой прозрачности тоже можно сделать, но в этом случае скругление будет фиксированным, т.е. число вариантов скругления будет конечным. Например 4, 8, 16, 24, 32, 48 px.Да, такой вариант был бы наиболее оптимальным.
ShowMessageAll('Заголовок', 'Текст', clRed);
или
ShowMessageAll('Заголовок', 'Текст', $FF0000);
или
ShowMessageAll('Заголовок', 'Текст', RGB(255, 0, 0));
begin
if PLC1_TSM_emg_stop.ValueAsInt = 0 then
begin
ShowMessageAll('ВНИМАНИЕ!','Нажат АВАРИЙНЫЙ СТОП на TSM.' +
' Линия полностью остановлена.',RGB(255, 0, 0));
shEMG_zavod.Color := RGB(128,0,0);
shEMG_zavod.Alpha := 255;
bt_table_emg_stop.States[0].Color:= RGB(128,0,0);
end
else
begin
shEMG_zavod.Color := RGB(0,0,0);
shEMG_zavod.Alpha := 75;
bt_table_emg_stop.States[0].Color:= RGB(94,94,94);
end;
end.
можно сделать что бы временные тренды обновлялись не слева на право а с права на лево как в постоянных трендах, что бы не создавать путаницу для операторовМожно. Добавим такую возможность.
первой версии я копкой мог считывать состояние переменной и кнопка менялась при чтении, возможно ли реализовать такое в simle scada 2Сейчас так и работает, кнопка сама меняет свои состояния, в зависимости от значения тега.
begin
if Sender is TM_Object then
case TM_Object(Sender).ValueAsInt of
0 : Sender.Visible := False;
1 : Sender.Visible := True;
end;
end.
begin
if Sender is TM_Object then
case TM_Object(Sender).ValueAsInt of
0 : Sender.Color := clGray;
1 : Sender.Color := clLime;
end;
end.
Предлагаю на форуме сделать отдельную ветку с темами для готовых шаблонов кода по скриптам.Сделаем такую тему и будем переносить в неё полезные примеры скриптов из темы "Вопросы по скриптам в Simple-Scada 2 (http://simple-scada.com/forum/index.php?topic=145.0)", чтобы она оставалась "чистой".
Планируется ли возможность просмотра картинки с IP-камеры в реальном времени? Насколько сложна реализация?Пока не планируется. Возможно, только не в ближайшем будущем. Реализация сложна, т.к. видео нужно встроить в DirectX/OpenGL контекст, но выкрутиться можно.
begin
// связываем поле Field1 с переменной MyVariable
Field1.Variable := MyVariable;
end.
var
aVar: TM_Variable;
begin
// Ищем переменную с именем "MyVariable" и результат поиска записываем в aVar
aVar := GetVariableByName('MyVariable');
if Assigned(aVar) then // если переменная с таким именем найдена
Field1.Variable := aVar; // связываем поле Field1 с найденной переменной
end;
var
aVar: TM_Variable;
aName: string;
begin
aName := 'Var' + IntToStr(Sender.Tag); // получаем приставку к имени переменной в зависимости от Тега объекта (например Var1)
aVar := GetVariableByName(aName + '_SP'); // Получаем SP переменную
FieldSP.Variable := aVar; // связываем поле FieldSP с переменной VarX_SP
aVar := GetVariableByName(aName + '_PV'); // Получаем PV переменную
FieldPV.Variable := aVar; // связываем поле FieldPV с переменной VarX_PV
aVar := GetVariableByName(aName + '_MAN'); // Получаем MAN переменную
FieldMAN.Variable := aVar; // связываем поле FieldMAN с переменной VarX_MAN
end.
P.S. Так же возможно потребуется реализовать вызов тренда при нажатии на поле показаний датчика, а таких полей будет как минимум пару сотен.Вы говорите о временном тренде? Или постоянный тренд (который берется из БД)?
Вы говорите о временном тренде? Или постоянный тренд (который берется из БД)?Речь идет о графическом объекте "Временной тренд".
2) Через свойство Tag передавать окну ID переменной, но ID является свойством только для записи (так утверждает компилятор скриптов);А зачем вообще искать переменную по ID, если каждый объект хранит ссылку на саму переменную. Например, если исполнительный механизм представляет собой изображение, то можно выбрать у него переменную и затем передавать её куда угодно как Image1.Variable или для универсального скрипта как TM_Object(Sender).Variable.
Речь идет о графическом объекте "Временной тренд".Мы можем сделать так, чтобы у Временных трендов тоже можно было подменять переменные. Но при этом запись данных в тренд будет стартовать заново (т.к. временные тренды хранятся в оперативной памяти). Например Вы нажимаете на датчик и появляется окно с временными трендами, но они пусты и только начали записываться. Устроит ли вас такой вариант?
Т.е. вся проблема в том, что окну нужно передавать два параметра: "наименование аппарата + наименование ИМ или датчика"?Получается, что так.
А зачем вообще искать переменную по ID, если каждый объект хранит ссылку на саму переменную.Да, действительно, не сообразил. Скриптом вырезать необходимую часть имени переданной переменной и далее уже формировать имена других переменных.
Но при этом запись данных в тренд будет стартовать заново (т.к. временные тренды хранятся в оперативной памяти).Данная особенность работы временного тренда была реализована исходя из соображений экономии ресурсов ПК?
Скриптом вырезать необходимую часть имени переданной переменной и далее уже формировать имена других переменных.Да, можно связать каждый механизм со своей переменной, а затем по клику брать переменную и из её имени доставать нужную приставку. Затем на основе этой приставки получать остальные переменные и подменять их в окне.
Данная особенность работы временного тренда была реализована исходя из соображений экономии ресурсов ПК?Временные тренды это просто компонент, который пишет тренды средствами Клиента в оперативную память этого клиента, он не сохраняет их в постоянную память и соответственно не требует установки БД и соответственно не требует времени на загрузку из БД. Если таких компонентов создать много, то проблем не будет (хотя и потребует определенный объем оперативной памяти) и каждый будет писать свои данные с момента запуска проекта. Но если у них подменять переменные, то предыдущие накопленные данные придется удалить из оперативной памяти и писать заново для новых трендов.
Что касается временных трендов, вы решили остановиться на идее отображать оперативные данные?Именно "Временные тренды" останутся такими, как сейчас, т.е. максимально упрощенные, без зависимости от БД и сервера. На будущее возможно добавим компонент "Постоянные тренды" которые будут читать данные из БД на сервере + можно будет включить перемотку по времени и смену интервалов.
И еще возникла мысль, почему бы в меню выбора переменной для объекта не сделать поле настройки фильтра имен переменных, как сделано в БД (опять таки, актуально для больших проектов)?Фильтры постепенно добавим не только для переменных, но и для всех списков.
Планируется ли возможность выбора размера окна для каждого клиента? (options.exe)
Может пора создать тему "часто задаваемые вопросы"?) уверен таких не мало.Да, уже много популярных вопросов, обязательно сделаем.
ЦитироватьПланируется ли возможность выбора размера окна для каждого клиента? (options.exe)Сейчас ведь так и есть. В Options.exe, вкладка Simple-Client, список "Размер окна"
Можно ли сделать изменение координат X и Y объекта в реальном времени при перемещении объекта курсорными стрелкамиДа, конечно. Исправим этот момент.
Вопросы по трендам: почему только 10?) ну пусть скролится легендаЭто специальное ограничение, позволяет обеспечить достаточную скорость отрисовки и загрузки трендов (особенно на больших интервалах). Масштабирование трендов по Y и изменение размера шрифтов планируется, но мы всё никак не выделим время на реализацию, т.к. задач уже очень много.
Мне вот например надо отображать за 24 часа и при этом чтобы временная шкала сама двигалась.Это ограничение тоже сделано не просто так и касается производительности сервера и клиента и их взаимодействия. Мы уже давно работаем над обновленной системой трендов, где тренды сохраняются в несколько прореженных "слоев". Такая система позволит просматривать тренды в больших интервалах с очень высокой скоростью, не нагружая сеть. Плюс к этому можно будет снять ограничение на величину интервала в режиме "онлайн".
и можно в трендах стрелочки сделать с подсказками.Изначально они были с подсказками, но вскоре мы убрали подсказки, т.к. на наш взгляд они мешали подсказывая то, что и так очевидно. Вернем подсказки в будущем.
Планируем взять максимальную версию Вашей скады, но обязательно нужна поддержка двух мониторов. Как успехи в этом направлении, когда ожидается поддержка нескольких мониторов?Вот такой вопрос, когда то в разделе Simple-Scada 1.3.3 задавали вопрос про работу на двух мониторах, хотелось бы узнать как успехи?Да, делали такие тесты. Всё прошло успешно. После выхода Simple-Scada 2 начнем внедрять в неё поддержку нескольких мониторов.
А для чего нужно такое завершение работы и выключение?Такое завершение работы пригодилось бы, если в Simple-Scada можно было запретить закрытие клиента обычным пользователям.
Отключаем оболочку операционной системы (explorer.exe), вместо нее запускаем клиент и сервер Simple-Scada, диспетчер задач блокируем средствами Simple-Scada. Таким образом полностью перекрываем доступ к Windows. Кнопку завершения работы делаем доступной только для администратора.
При такой блокировке и запущенном Simple-Client Вы все равно можете получить доступ к Windows? Если да, то напишите каким способом можно этого добиться.Воспользовавшись комбинацией клавиш для выхода из клиента?
А для чего нужно такое завершение работы и выключение?Для понимания лучше было бы привести конкретные примеры:
Значит сделаем следующим образом: если тег только для записи, то скада всегда будет делать запись в него, даже если Вы попытаетесь ввести то же значение, которое уже (по мнению скады) в этом теге.Да, можно и так. Но это не уберет значок - нет связи по переменной с поля. И мне просто интересно, как происходит обмен. Вот если я буду пробовать изменять тег, который предназначен только для чтения, то скада будет пытаться его записывать в OPC?
Да, можно и так. Но это не уберет значок - нет связи по переменной с поля.Значок конечно уберем для переменных только для записи.
Вот если я буду пробовать изменять тег, который предназначен только для чтения, то скада будет пытаться его записывать в OPC?Очень просто: перед записью в тег проходит проверка, является ли он доступным для записи. Если да, то запись пройдёт. Если нет, то скада даже не будет пытаться выполнить запись в тег. Соответственно скада будет игнорировать попытку присвоения в тег для чтения.
Можно ли по возможности ввести элемент radio button?Подумаем над этим, возможно сделаем у кнопки свойство "номер группы", чтобы кнопки с одной группой работали как radio button.
в состояниях кнопок обнаружил небольшую ошибку на проверке ввода.Действительно, есть такое, спасибо. Исправим!
Обслуживающему персоналу выключать сервер кнопкой power на системном блоке. В этом случае сервер должен корректно завершить работу.Попробовал выключить сервер Simple-Scada кнопкой power на ОС Windows 7 (до этого пробовали только на Windows XP), теперь ясно, почему мы друг друга не понимали: Windows 7 без всяких вопросов завершает работу сервера, а Windows XP - нет.
...то блочится переключение шрифтов в редакторе.Спасибо за описание, проверим и устраним.
Если оно совпадает с уже существующим, то ввод отменяется.Это правильно. Система такая: Вы можете присвоить каждой строке определенное значение переменной. Например строка 1 = 100, строка 2 = 200. Когда переменная примет значение = 100 в списке отобразится первая строка, когда 200 - вторая. Если оставлять значения по-умолчанию, то значение переменной будет соответствовать номеру строки. А два одинаковых нельзя задать, т.к. в таком случае программа не сможет определить какую строку из двух нужно показать.
А при создании новой строки проверки на то, что существует строка с подобным значением не ведется.А это уже ошибка. Исправим.
Т.к. поле связано с переменной, то в нём отображается значение этой переменной. Все численные переменные инициализируются значением равным нулю. Поэтому когда Вы запускаете проект переменная инициализируется и ноль отображается в поле. На данный момент свойство "значение" используется только в редакторе для визуализации. В будущем при создании переменных можно будет задать значение которым нужно инициализировать переменную (вместо нуля).А можно инициализировать скриптом одноразовым :)
При инициализации, при присвоении значения этой переменной в скрипте границы не соблюдаются. Шкалы это лишь контроль на ручном вводе через поле и шкала на графике. Я просто немного другого ожидал.Здесь дело в том, что отдельной инициализации сейчас вообще нет. Когда переменная создается - она создается с нулевым значением и оно дополнительно никак не обрабатывается и не меняется и таким остается (касается только виртуальных переменных). Мы систему инициализации добавим и сделаем так, чтобы при этом проверялись границы и ниже минимума или выше максимума она уже не будет.
предложение - вопрос к уважаемой администрации. Насколько сложно допилить просто типизированные переменные?На будущее возможно добавим возможность создания глобальных модулей в которых можно будет описать в том числе любые пользовательские объекты, а затем использовать их в любых скриптах. Но когда мы сможем к этому приступить сейчас трудно сказать.
Не варианты, а классику, которая выступила бы глобальной для проекта.
А как лучше вам подавать досадные "мелочи"? письмами на сапорт, сюда? Поштучно, списками?Как Вам будет удобнее. Спасибо за список замечаний, часть из них уже есть в нашем списке, а часть добавим и постепенно будем устранять с выходом каждой новой версии скады.
Не важно какие действия гасят колебания - в чем проблема и как ее решить Вам написали. Вы думаете, что такая картина наблюдается у всех? Посмотрите на видео (https://www.youtube.com/watch?v=bSNU1BGyCK4) как все работает в нормальном режиме.
1. планируется-ли поддержка видео с IP камер?К сожалению, пока не планируется и остается только использовать сторонние приложения для вывода видеопотока.
2. планируется ли доступ по web-интерфесу или клиенты для ios и android. В Вашем примере с планшетом все же наименее распространенная операционная система (Win) для мобильных устройств.Да, в этом году планируем закончить разработку Web-клиента. Соответственно будет возможна работа в любых ОС. Это одна из главных задач на 2017 год. Точный срок окончания разработки трудно предсказать.
Можно ли сделать функцию вывода в строку сообщений и журнал сообщений вроде - ХочуВывестиСообщение ('сообщение', X), где X - это тип сообщения (предупреждение, авария и тд.)? Сейчас есть возможность вывести только фиксированное сообщение, а иногда нужно вывести сформированное по факту (с указанием времени).Да, можно сделать. Но такие сообщения будут видны только в группах: "Неподтвержденные" и "Все сообщения", т.к. у них не будет своего уникального идентификатора.
И вопрос по элементу Таблица, а конкретнее по ячейке таблицы(TM_TableCell). Сейчас для ячеек не предусмотрено событий. У элемента Поле есть стандартные OnDataChange и т.д., а у ячейки таблицы пока ничего нет. Это будет меняться или так задумано?Так задумано. Иначе пришлось бы хранить дополнительную информацию о скрипте для каждой ячейки таблицы (включая статические ячейки). "Идея" этого компонента в том, чтобы сделать его максимально легким и достаточно функциональным. Получается такой "экономный" компонент. Хотя доработка Таблицы планируется. А именно: загрузка в таблицу из БД, вставка таблицы в БД и возможность читать свойства ячеек таблицы по номеру ячейки (сейчас свойства ячеек недоступны из скриптов).
Да, можно сделать. Но такие сообщения будут видны только в группах: "Неподтвержденные" и "Все сообщения", т.к. у них не будет своего уникального идентификатора.Пойдет.
По таблице. Можно ли сделать тогда универсальный скрипт, относящийся к таблице?Да, можно. Это хороший вариант.
Т.е. если вы используете вирт. переменную для вывода сообщений, то вам не отвертеться от вывода ложных сообщений с 0 значением на старте проекта.Верно, ведь переменная должна иметь какое-то значение после старта и она равна нулю. И если есть сообщение которое соответствует нулю, то оно будет выдано. Этот вопрос также решится если в окно создания переменной добавить поле в котором будет указываться значение, которым нужно инициализировать эту переменную.
Интересует вопрос взаимодействия с ОРС сервером HDA, конкретно с Logika.HDA.2Simple-Scada 2 работает с OPC-серверами версии DA 3.0 и ниже. Серверы OPC-HDA не поддерживаются.
Simple-Scada 2 работает с OPC-серверами версии DA 3.0 и ниже. Серверы OPC-HDA не поддерживаются.
Рискну предположить, что вырезав объект он еще не уничтожен, потому вставляется уже не он, а новый. Посему, наверное, логичнее допилить кнопку "переместить".Дело было вечером..., а мне было интересно) Вообщем, проведя ряд опытов в редакторе я выяснил как формируется имя объекта. Имя объекта формируется так - базовое имя, например, Field + Cчетчик объектов типа Field. Вставляем объект. Счетчик + 1. А объект получает имя База + (Счетчик + 1) Удаляем объект. Счетчик - 1. А вот вырезание (-1) и вставка (+1) суммарно не изменяет счетчик. При вставке проверяется, существует ли объект с именем База + (Счетчик + 1). И если объект существует, то будет проверяться существует ли объект с именем База + (Счетчик + 2) и тд. Первое же свободное будет присвоено. И тут есть момент, который я сразу не понял. Счетчик при этом не меняется. Это именно счетчик объектов, он не завязан на имени объекта. Идея понятна, но не вот не всегда она работает хорошо.
А планируется такая поддержка? Вроде два отечественных производителяПока не планируется.
Может я хочу слишком много, но возможен ли хоть теоретически TM_control_х c несколькими переменными и соответственно с методами для них? Тогда многие задачи типа поиска дельты или еще какой простенькой математики существенно упростятся. Например типа TM_Field_х c возможностью выбора отображаемой переменной и событиями OnChange для каждой из них или любой.Расширение функций расчетов с скаде одна из приоритетных задач. Поэтому обязательно добавим возможности, которые позволят быстро выполнять расчеты на основе множества переменных. Как именно реализовать ещё подумаем, скорее всего сделаем специальные расчетные переменные.
Можно ли сделать по аналогии свойство - группа сообщений? И ввести соответственно группы для сообщений. Как бы я хотел, чтобы это работало.Да, можно. Так и сделаем. А группы сообщений создавать можно и сейчас, кнопкой "Добавить новую группу" (http://simple-scada.com/manual?section=messages).
В клиенте когда я нажимаю на строку сообщений, находясь на странице управления прибором №1, в ней будут системные сообщения и сообщения для прибора №1, а остальные скрыты. Так было бы очень удобно и просто.Т.е. выполняется переход в меню сообщений в заданную группу в которой видны только сообщения этой группы? Если так, то сейчас в принципе так и сделано, только переход выполнятся всегда в группу "Неподтвержденные", а мы сделаем возможность выбора, как сейчас сделано для трендов.
Вырезав (ctrl+x) объекты с 1й страницы я вставил (ctrl+v) объекты на подстраницу и сохранился.Исправим. Последовательность "Вырезать - Вставить" не будет приводить к смене имени.
Дело было вечером..., а мне было интересно) Вообщем, проведя ряд опытов в редакторе я выяснил как формируется имя объекта.В принципе Вы почти всё правильно поняли. Система очень проста: берем количество полей проекта (например 10) и начиная с этого кол-ва проверяем можно ли присвоить имя: field11, если нет, то field12 и так далее, пока не присвоится. Это позволяет очень быстро генерировать имя для новых объектов, что полезно например при копировании и вставке большого количества объектов.
Очень интересует копирование групп/разделов в трендах. Пускай даже с теми-же переменными. Поправить переменную проще чем тупо тыцять создавая 60 одинаковых разделов с кучей одинаковых групп и переменными отличающимися индексом.В будущем сделаем это не только для трендов, но и для сообщений.
А именно: выбираем до 10 (лучше 20) переменных, определяем цвет и строим графики (да-да, по имени переменной).Мы уже сделали редактируемые группы трендов. Т.е. Вы в редакторе включаете у группы свойство "Редактируемая" и пользователь подключаясь с клиента сможет менять тренды в группе выбирая из списка переменных. В сам список выводятся имена переменных, либо описание (если оно есть).
Можно ли сделать функцию "вытаскивающую" текст из сообщения?Да, сделаем как метод для переменной и вызов будет выглядеть примерно так: vrX.GetMessage;
Здравствуйте Ребята. Возможно ли добавить вывод даты в панель с часами?Да, сделаем.
Странно работает копипаста строки в редакторе. Затирает следующую строку и оставляет пустой. Очень неприятно, в купе с невозможностью отменить действие.Это при редактировании скрипта? Просто если скопировать и вставить строку? Не получается воспроизвести.
Странно работает копипаста строки в редакторе. Затирает следующую строку и оставляет пустой. Очень неприятно, в купе с невозможностью отменить действие.Это при редактировании скрипта? Просто если скопировать и вставить строку? Не получается воспроизвести.
по нажатии которой вид восстанавливается до начального при загрузке проектаПри загрузке проекта рабочая область выравнивается не по центру, а по левому верхнему краю зоны проекта.
procedure GoToTrendsGroupAll (AGroupID: Integer);
Описание: Переход в меню трендов к заданной группе на всех клиентах.
Пример кода:
begin
GoToTrendsGroupAll (1); // перейти в первую группу трендов на всех клиентах.
end.
или нужно создавать для каждого тренда свою группу.Перейти можно только к группе трендов. ID-группы можно увидеть в свойствах если выделить группу в Редакторе. Тренд можно создать только в группе. В одной группе обычно размещают несколько трендов (макс. 10).
А нельзя ли добавить возможность изменения шрифта (размера, цвета) заголовков окон?Можно, добавим такие возможности.
Где в SS2 используется камера? Я чего-то пропустил?Мы так называем перемещение зоны просмотра проекта в редакторе клавишами W, A, S, D. Сейчас поправим чтобы исключить путаницу.
Возможно ли таблицу, созданную в редакторе проекта, заполнять вручную при работе в клиенте?
Можно ли по аналогии с .AsSQLDateTime сделать .AsSQLTime для работы только со временем?Да, сделаем.
ограничивает возможность вывести сообщение только в папку подтвержденные/неподтвержденные.Если точнее в "Неподтвержденные" и в группу "Все сообщения" (в ней все сообщения независимо от того, были ли они подтверждены).
Можно ли доработать функцию AddMessage?Хорошая идея, но здесь будет проблема. Сообщения и группы хранятся с БД с уникальным ID-группы и ID-сообщения, по которым они и выбираются. Чтобы исключить повторения значений в индексируемых колонках, всем сообщениям добавляемым при помощи AddMessage выставляется зарезервированный ID, который гарантированно не будет использоваться при создании сообщений через редактор. Поэтому при добавлении в какую-то конкретную группу нужно чтобы пользователь (или скада) указал ID-сообщения, который никогда не повторится в будущем, а это невозможно.
Можно ли доработать объект Calendar? Сейчас, если скрыты секунды/минуты, то в переменной привязанной к этому объекту будут присвоены секунды/минуты, которыми этот объект был инициализирован при запуске проекта. А хотелось бы, чтобы были нули.Да, сейчас если нужны нули, то придется при запуске проекта установить минуты и секунды переменной в 00:00. Подумаем как лучше это реализовать в Календаре.
Центрование по точке на сетке ближе к мышке все еще "работает". По крайней мере для перемещения, остальное не проверял.Сейчас координаты смещение курсора относительно точки не влияет на смещение объекта. Но если объект изначально выровнен не по сетке, то при попытке начать перемещение он будет выровнен. Чтобы игнорировать выравнивание нужно выполнять перемещение удерживая Alt.
Предложения по интерфейсу редактора:Спасибо за список предложений. Обдумаем реализацию этих пунктов.
Не читал тему, может многое уже упоминалось.
Не сохраняются значения масштабирования для переменной.Действительно. Применяется только при создании новой переменной. Сейчас исправим, обновление сделаем завтра.
Я правильно понимаю, что мин/макс значения выбранной шкалы должны трансформироваться в значения мин/макс указанные в полях в режиме "Масштабирования"?да, верно.
Сейчас исправим, обновление сделаем завтра.
Спасибо, но перемещением здесь считается в т.ч. и просто повторный клик на достаточно мелком объекте (который весь попадает в зону перемещения).Центрование по точке на сетке ближе к мышке все еще "работает". По крайней мере для перемещения, остальное не проверял.Сейчас координаты смещение курсора относительно точки не влияет на смещение объекта. Но если объект изначально выровнен не по сетке, то при попытке начать перемещение он будет выровнен. Чтобы игнорировать выравнивание нужно выполнять перемещение удерживая Alt.
Попробуйте проверять были-ли произведены изменения при выходе, чтобы каждый раз выходя не сомневаться, а сохранило-ли?Сделаем в будущих обновлениях.
Пользователям МонстроСКАД такое и не снилось :DНемного затянули, но сделали лучше чем планировали. Скачать обновленную версию можно по этой ссылке (http://simple-scada.com/downloads/Simple-Scada%202.2.0.3%20(demo).rar). Если Вы уже сделали проект, то скопируйте его в папку Projects, затем откройте в обновленном редакторе и пересохраните его. Проект переведется на обновленную версию.
сделали лучше чем планировали
http://simple-scada.com/forum/index.php?topic=63.msg3030#msg3030
Можно ли расширить кол-во вариантов поля Время объекта Calendar? Сейчас там чч:мм:сс, чч:мм, чч. Например, ввести мм:сс.Да, конечно. Добавим.
И вопрос по работе функции ShowMessageAll(); Сейчас последнее вызванное сообщение затирает все предыдущие. А хотелось бы, чтобы это работало по-другому. Сколько раз вызвана функция - столько и окон с сообщениями.Можно так сделать, но не в ближайших обновлениях, т.к. придется менять текущую систему окон.
Когда я сохраняю проект и сервис Dropbox`a в этот момент синхронизирует файлы, то редактор у меня вываливаетсяМы изменим процесс открытия и сохранения файлов проекта и редактор не будет вылетать с ошибкой, вместо этого будет выведено предупреждение о том, что проект не удалось сохранить. Но при этом не решится проблема с порчей проекта если Dropbox решит удалить или синхронизировать файлы при сохранении. Т.е. будет выдано предупреждение, что сохранение не удалось (из-за этого проект на жестком диске возможно будет уже испорчен) и если повторно не выполнить корректное сохранение, то проект останется испорченным.
В итоге надо создать что-то типа ретейн переменной. Это можно сделать проще чем сохраняя и загружая их из файла/БД?Нет, только сохраняя и подгружая из файлов или БД.
Но при этом не решится проблема с порчей проекта если Dropbox решит удалить или синхронизировать файлы при сохранении. Т.е. будет выдано предупреждение, что сохранение не удалось (из-за этого проект на жестком диске возможно будет уже испорчен) и если повторно не выполнить корректное сохранение, то проект останется испорченным.Уж лучше пусть вылетает, но не портит) Вообще можно старый проект на время сохранения убирать во временную папку и если сохранение прошло успешно, то стирать ее. А если нет, то восстанавливать из нее. Конечно все это весьма случайно и редко происходит. Но если происходит, то можно потерять изменения в проекте минимум за день. Если дисциплинированно делать копии)
Вообще можно старый проект на время сохранения убирать во временную папку и если сохранение прошло успешно, то стирать ее.Думали об этом, но очень не хочется этого делать, т.к. время на сохранение проекта увеличится почти в два раза. С другой стороны, если этого не делать, то нормально организовать сохранение вместе с включенной синхронизацией Dropbox'а вряд ли удастся. Подумаем сейчас.
А если нет, то восстанавливать из нее.И ещё, с включенной синхронизацией восстановить скорее всего не удастся, т.к. восстанавливать придется поверх тех файлов, которые блокированы Dropbox'ом. Это ещё раз наводит на мысль о том, что для синхронизации нужно заводить отдельную папку.
Так и поступил, но возник еще глупый вопрос. Файл хранится на сервере или у клиента? Точнее увидят ли 2 клиента одно и то-же?В итоге надо создать что-то типа ретейн переменной. Это можно сделать проще чем сохраняя и загружая их из файла/БД?Нет, только сохраняя и подгружая из файлов или БД.
А как быть обладателям платной версии? Необходимо запрашивать обновления самостоятельно :'(?Пользователям МонстроСКАД такое и не снилось :DНемного затянули, но сделали лучше чем планировали. Скачать обновленную версию можно по этой ссылке (http://simple-scada.com/downloads/Simple-Scada%202.2.0.3%20(demo).rar). Если Вы уже сделали проект, то скопируйте его в папку Projects, затем откройте в обновленном редакторе и пересохраните его. Проект переведется на обновленную версию.
Так и поступил, но возник еще глупый вопрос. Файл хранится на сервере или у клиента? Точнее увидят ли 2 клиента одно и то-же?Файл хранится на сервере. Если Вы в скрипте не указали путь, то он хранится в папке "..\Simple-Scada 2\Projects\Папка_проекта\User files\". При этом все клиенты должны увидеть одно и то же, т.к. сервер автоматически отправляет изменения клиентам. Например, если Вы загружаете значение из файла во внутреннюю переменную, то на всех клиентах её значение будет одинаковым.
Почему при вставке, все что не влазит в окно - сваливается в одну большую кашу. Хай бы себе вылетало за пределы, как происходит, если уже после вставки окно уменьшить.Так и было изначально. В работе такой вариант тоже выглядит странно, а если на мнемосхеме за окном много объектов, то визуально объекты за пределами окна "смешиваются". Одно из решений - увеличить размер окна перед вставкой так, чтобы все объекты поместились без смещения, затем отредактировать их положение и размеры и уменьшить окно.
Еще просьба из раздела "хотелось бы" по редактору визуализации. В кореловском пакете есть очень удобное решение для выравнивания объектов.Да, сделаем, но скорее всего не в самое ближайшее время, т.к. сначала нужно решить более популярные запросы.
А можно попросить при выборе переменной кнопочку "не закрывать"(зафиксировать) на допменюшке?
Или у Вас есть возможность вносить исправления не только в demo версию и оперативно направлять обновления всем покупателям Simple-Scada 2 без дополнительного запроса?Конечно. Обладателям полной версии при выходе новой версии скады сразу отправляется ссылка на скачивание (отправляется на тот e-mail с которого заказывали скаду для покупки). Если Вы приобрели скаду через какую-то организацию, то напишите на support@simple-scada.com, мы внесем Ваш e-mail в список рассылки.
Почему версия предназначенная для работы с USB-ключом не позволяет запустить даже Demo-проект без ключа?В этом случае вся система защиты с USB-ключами потеряет смысл и у потенциального взломщика появится возможность любой проект представить скаде как демо-проект.
Можно ли из скады запускать сторонние приложения, дабы не гонять зря шедулер и не зависеть от него?Для запуска внешних приложений используется процедура RunApplication (http://simple-scada.com/scripts_manual?section=global_procedure), например:
begin
RunApplication(GetClientName, 'calc.exe', ' '); // запустить калькулятор на текущем клиенте.
end.
Для запуска внешних приложений используется процедура RunApplication (http://simple-scada.com/scripts_manual?section=global_procedure), например:Вот спасибо, хорошо...
пытаюсь открыть сторонний файл, вываливается ошибка...Вы говорите о текстовом файле, или о двоичном (бинарном)? Это имеет важное значение. Если файл текстовый, то все просто - он состоит из строк, которые, как было правильно отмечено - заканчиваются символами конца строки, только не #10#13, а #13#10 (0d0a). В текстовый файл все записывается и читается в текстовом виде. Т.е. если нужно записать число, то его нужно перевести в строку и только потом писать в текстовый файл. Если нужно считать число из файла, то сначала читаем его в виде строки, а затем переводим в число, например в Integer. Недавно мы отвечали на подобный вопрос в этой теме (http://simple-scada.com/forum/index.php?topic=344.msg3036#msg3036).
Не могли бы Вы добавить в инструмент "Список сообщений" возможность выбора выводимого списка.Присоединяюсь. Только, если можно расширить возможность выбора до пользовательской группы/групп. В идеале я бы хотел, чтобы это работало так. Я создаю инструмент - > выбираю какие группы сообщений, я хотел бы в нем видеть -> в работе вижу в данном списке только сообщения из групп, которые были к нему привязаны. И еще было бы здорово, если бы были дополнительные функции у этого инструмента. Например, подтверждение всех сообщений в данном конкретном Списке сообщений. Например, отработала программа - и я очищаю весь список для конкретного прибора. Сейчас я все это делаю дублированием журнала текстовыми сообщениями на соответствующем окне и это неудобно. У меня однотипные приборы и, соответственно, однотипные сообщения, и без фильтрации в сообщениях просто каша.
А можно добавить возможность изменения цвета и размера крестика, закрывающего окна?Сделаем чтобы цвет крестика зависел от цвета шрифта заголовка. Тогда все будет в гармонии.
Не могли бы Вы добавить в инструмент "Список сообщений" возможность выбора выводимого списка. Исходя из уже существующих групп:
Присоединяюсь. Только, если можно расширить возможность выбора до пользовательской группы/групп... И еще было бы здорово, если бы были дополнительные функции у этого инструмента. Например, подтверждение всех сообщений в данном конкретном Списке.Именно такая доработка компонента изначально планировалась и все описанное будет сделано в будущих обновлениях.
И еще было бы здорово, если функцию AddMessage можно было бы применить к конкретному списку сообщений.Подумаем об этом.
Можно ли как то ячейке таблицы при работе с переменной типа DateTime придать свойства инструмента Календарь.Уточните, какие именно свойства календаря требуются? Формат времени и кнопка для отображения панели выбора даты?
Уточните, какие именно свойства календаря требуются? Формат времени и кнопка для отображения панели выбора даты?Именно так - формат времени и кнопка.. Календарь ведь по-сути выполняет функцию форматированного ввода времени/даты. Но только для одного поля. Для ячейки таблицы при вводе времени/даты сейчас такого форматированного ввода нет. Поэтому я использовал календари. А все-таки правильней использовать таблицу для этого.
Добрый день.Я это решал через ***у :)
Подскажите, пожалуйста, существует ли сейчас возможность реализации, некой, панели управления.
*В моем понимании >> Панель управления - это отдельное окно без возможности его закрытия, присутствующие на всех страницах проекта.
т.е. даже элементарные функции управления должны на этом окне отсутствовать.
Если нет возможности в данный момент реализовать данный тип окна (панели управления) будьте любезны добавьте в следующих обновлениях.
Добрый день.Пока реализацию нужно делать как предложил Teodor. Сейчас эта функция очень слабо востребована и если будут поступать ещё предложения по реализации такой панели, то будем добавлять.
Подскажите, пожалуйста, существует ли сейчас возможность реализации, некой, панели управления.
case Marsh1_home{переменная WORD привязанная к первому "списку"}.AsInt of
0: cmbMarsh1_end{Второй "список"}.Clear;
1: begin
cmbMarsh1_end.Clear;
cmbMarsh1_end.AddItem('Не выбрано');
cmbMarsh1_end.AddItem('Силос 1');
cmbMarsh1_end.AddItem('Силос 2');
end;
2:
begin
cmbMarsh1_end.Clear;
cmbMarsh1_end.AddItem('Не выбрано');
cmbMarsh1_end.AddItem('Дмрт 110');
cmbMarsh1_end.AddItem('Биг-Бег');
end;
end;
Т.е. та строка которая должна была быть привязана к нулю не встает в первую строку, а встает первой в выпадающем списке.Сейчас для этого нужно чтобы прошло изменение переменной с которой связан список. Тогда строка которая соответствует значению переменной станет в список. Мы улучшим систему и сделаем чтобы эта проверка также происходила при каждом AddItem, тогда строка сама будет становиться в список.
И еще не очень удобно создавать скриптом строки по автомату подряд,. Хотелось бы создавая новую строку указывать ей "номер" и "значение" .Этого обещать в ближайшем будущем не можем.
И было бы вообще замечательно иметь возможность скрывать скриптом те или иные строки.
aReportName := 'Отчет по КПДС-1 с ' + DateToStr(vrTRM1_StartIn.Value) + ' ' +
IntToStr(HourOf(vrTRM1_StartIn.Value)) + '.' +
IntToStr(MinuteOf(vrTRM1_StartIn.Value)) + ' по ' +
DateToStr(vrTRM1_EndAt.Value) + ' ' +
IntToStr(HourOf(vrTRM1_EndAt.Value)) + '.' +
IntToStr(MinuteOf(vrTRM1_EndAt.Value)) ;
Здравствуйте. Мы приобрели ПРО АНЛИМРебята это конечно не мое дело, Но! Прежде чем покупать Вы хотя бы демку попробовали.
В компоненте "таблица", на сколько я понял нельзя объединить несколько ячеек?Такой возможности нет.
Предполагается ли в последующих обновлениях сделать график зависимости двух переменных друг от друга, т.к. некоторое испытательное оборудование требует наличие не только трендов?Какая именно зависимость нужна? Нужно выполнить расчет в отдельную переменную и вывести её на экран? Или нужно вывести тренд зависимости от двух других трендов?
Вопрос, насколько правильно назначать такие переменные и возможна ли более корректная работа с массивами?Переменные которые ссылаются на конкретный элемент массива будут работать также, как если бы они были взяты из отдельной OPC-переменной. В данный момент для работы с элементами массива, возможен только описанный Вами вариант. В будущих обновлениях будет добавлен тип "Массив" и не придется добавлять каждый элемент массива. А компоненты получат соответствующие свойства для работы с массивами.
Какая именно зависимость нужна? Нужно выполнить расчет в отдельную переменную и вывести её на экран? Или нужно вывести тренд зависимости от двух других трендов?
И тут получается трабл строки которые я создаю начинаются не с нуля. Т.е. та строка которая должна была быть привязана к нулю не встает в первую строку, а встает первой в выпадающем списке. Но как мне кажется она должна сразу занять место выбранного.
Мне нужно по какому-либо событию (не имеет значения) формировать список для того, чтобы оператор мог выбрать из него определенное значение. Этот список я беру из БД. Возник вопрос, каким компонентом пользоваться? Мне идеально бы подошла таблица, но, как я понял, ее нельзя заполнять из скриптов.Сейчас для этой задачи подойдет только компонент "Список". В дальнейшем возможности работы с таблицей из скриптов будут расширены, в том числе появится возможность заполнения таблицы данными из БД.
есть предложение по поводу изменения шкалы на графике в вертикальном положении, для удобства сравнивать два графика в более крупном масштабе, т.е. прокручивать шкалу вертикальноТакую функцию планируется добавить в дальнейшем.
И заодно предложение: в сообщениях можно добавит кнопку "активные аварии". Не просмотренные есть, но это не то - хочется видеть список только того, что нужно устранить на данный момент (человек может просмотрел - но не устранил...)Список активных аварий планируется добавить.
Перебивать кучу тагов после импорта не очень быстрое дело...В редакторе поддерживается групповое редактирование свойств переменных. Можно выделить все переменные группы (Ctrl+A), можно выделить необходимые переменные зажав Shift или Ctrl и кликая по переменным. Затем нажать кнопку "Изменить выделенные"(со значком карандаша) и установить требуемую шкалу. Также рекомендуем ознакомиться с полезными советами (http://simple-scada.com/manual?section=hot_keys) и ответами на часто задаваемые вопросы (http://simple-scada.com/faq)
Еще вопрос: есть объект поле, с вводом чисел все в порядке. А буквы не получается вводить с клиента. При этом в editor'е можно задать значение буквенное и оно отображается...Какой тип у переменной связанной с полем? Для того, чтобы вводить в поле буквы необходимо использовать переменную с типом данных (http://simple-scada.com/manual?section=data-type) "String".
GetObjectByName('Text_TRM' + aX + '_Activate').Text := 'Активирован "Стоп" - ' + DateTimeToStr(Now);Иначе остается только работать с оператором case.
Не очень она удобная - скрипты распухают и становятся нечитаемыми, но как есть.Для читаемости кода, наверно, максимум что можно предложить, это менять подобные конструкции:
begin
Text1.Text := GetVariableByName('variable' + IntToStr(Sender.Tag)).AsStr;
end;
var
aName: string;
aVar: TM_Variable;
begin
aName := 'variable' + IntToStr(Sender.Tag); // формируем имя
aVar := GetVariableByName(aName); // ищем переменную по имени
Text1.Text := aVar.AsStr; // используем
end;
Можно ли ввести по аналогии функцию GetObjectByName для того, чтобы обратиться к объекту в универсальном скрипте.Можно, но есть важные причины по которым мы не добавили эту функцию вместе с GetVariableByName. Нужно время.
Можно ли сделать так, чтобы они появлялись в списке через Ctrl + пробел в скрипте, если они в нем объявлены.Да, конечно. Так и сделаем в будущих обновлениях.
var
aName: string;
aVar: TM_Variable;
begin
aName := 'variable' + IntToStr(Sender.Tag); // формируем имя
aVar := GetVariableByName(aName); // ищем переменную по имени
if aVar <> nil then // если переменная найдена
Text1.Text := aVar.AsStr; // используем
end;
Организовать импорт/экспорт скриптов(желательно оптом), окон и страниц проекта...Импорт/Экспорт разных частей проекта обязательно сделаем в будущих обновлениях.
Как вариант - закоментировать, но тогда, по факту, скрипт есть и "вроде" исполняется. А где и какой так "исполняется" надо уже искать.Комментированный скрипт не будет исполняться. В будущем возможно добавим функцию быстрого включения/выключения скриптов.
Скрипт "исполняется", хотя по сути он пустой.Вы говорите о компиляции скрипта в Редакторе? Так и пусть компилируется, на самом деле он просто будет игнорироваться во время работы проекта на сервере. Или мы снова неправильно поняли?
Да... В большом проекте, который, к тому-же, постоянно меняется, очень несложно забыть, что ты "закоментировал" нечто. Совсем другое дело, когда при компиляции/сохранении скрипт будет помечен пустым/отключенным и появится некое предупреждение в стиле "а зачем у тебя там и там вот этот пустой скрипт прикручен?".ЦитироватьСкрипт "исполняется", хотя по сути он пустой.Вы говорите о компиляции скрипта в Редакторе? Так и пусть компилируется, на самом деле он просто будет игнорироваться во время работы проекта на сервере. Или мы снова неправильно поняли?
Хотел бы предложить добавить к сообщениям св-во "подпись". Тогда можно было бы составить набор стандартных событий и копировать сообщения, меняя только эту подпись.
И еще, если это возможно, для трендов хотелось бы задавать кол-во меток (как это реализовано для объекта timetrendviewer).
Добавьте пожалуйста историю ip адресов ( в виде выпадающего списка ), если есть токая возможность.Спасибо. Рассмотрим данные предложения для будущих обновлений.
aNTRM_State := 'TRM' + aX + '_State';
aVTRM_State := GetVariableByName(aNTRM_State);
А теперь предложение. Доработать выделение фрагментовСделаем.
Вы не рассматривали вариант постройки проги - "Обновлятора", которая сама бы подменяла файлики, с созданием резервных копий? Если честно, то хорошо что обновок много и почти все полезные... но больно уж геморно перебирать всех клиентов и их сервера. Так-же неплохо было бы отдельно пакет "клиента" иметь. Просто чтобы меньше и быстрее заливать на клиентскую машину.+++
Вы не рассматривали вариант постройки проги - "Обновлятора", которая сама бы подменяла файлики, с созданием резервных копий?Да, рассматривали. Но мы сделали такие выводы, что с подобной программой, скорее всего, возникнет много проблем у пользователей касаемо прав доступа, файрволлов и всевозможных разрешений. Все таки она должна будет копировать файлы по сети, среди которых есть .exe файлы, что часто будет воспринято как подозрительная активность. Несмотря на это пока не исключаем, что подобную программу можно будет добавить.
begin
case Sender.Tag of
1: begin
Window1.X :=10;
Window1.Y :=10;
end;
2: begin
Window2.X :=20;
Window2.Y :=20;
end;
3:..........
end;
end.
Привязка - по объекту. Проблема в том что эта привязка только при первом вызове окна - далее оператор начинает таскать окно по экрану - и после закрытия вновь вызванное это же окно открывается на последнем запомненном местеМы добавим в следующих обновлениях отдельное свойство "сохранять позицию" у окон.
Хотелось бы расширить опции привязки окна или допнастройки в свойствах.Также расширим функции редактирования групп и сортировки окон по группам.
с помощью какого графического редактора вы создаёте изображения? Какие требования предъявляете своему художнику (кратное 8 пикселям соотношение это понятно, что ещё)?Требования простые, это должно быть изображение в формате .PNG в минималистичном стиле, кратное 8 пикселям, с глубиной цвета 32 бита. Для создания графики мы используем Adobe Photoshop. Пользователи чаще используют Gimp и Paint.NET.
Не работает вызов окна от объекта уровень.привяжите скрипт:
Есть просьба к разработчикам:Можно, но скорее всего это замедлит копирование/вставку большого кол-ва объектов. Сейчас скада знает кол-во объектов каждого типа и благодаря этому генерирует новое уникальное имя очень быстро. Если брать за основу текущее имя объекта, то при большом количестве подобных имён придется делать перебор имён до тех пор, пока не встретится уникальное и это замедлит генерацию нового имени. Ещё подумаем, что можно сделать.
возможно ли сделать так, чтобы при копировании и вставке какого-либо объекта в редакторе, копировалось бы также его имя с неким увеличенным индексом? Сейчас при вставке создается объект с именем по-умолчанию.
Не работает вызов окна от объекта уровень.В данный момент так и должно быть, т.к. доступ к окнам и выполнение скриптов регулируется свойством "Доступен". У Уровня это свойство отключено по-умолчанию, поэтому клик по уровню не приводит к появлению окна и также не вызывает событие OnClick. Если включить доступ, то окно будет появляться по клику, но также у Уровня появится скролл. Подумаем над тем, чтобы добавить Уровню отдельное свойство для скролла.
Здравствуйте. Версия 2.2.1.2. Назрел список "хотелок":Спасибо за список пожеланий, обязательно учтем их. Некоторые уже есть в планах на реализацию.
Можно, но скорее всего это замедлит копирование/вставку большого кол-ва объектов. Сейчас скада знает кол-во объектов каждого типа и благодаря этому генерирует новое уникальное имя очень быстро. Если брать за основу текущее имя объекта, то при большом количестве подобных имён придется делать перебор имён до тех пор, пока не встретится уникальное и это замедлит генерацию нового имени. Ещё подумаем, что можно сделать.Может добавить это как опцию в настройках редактора и пусть пользователь сам выбирает нужно ему это или нет?
- не работает ctrl+Z на трубопроводеВ дальнейшем отмена действий будет работать и на трубопроводе.
- невозможно присоединить к существующему трубопроводу ответвление в любом месте,Трубопровод состоит из отрезков. Для добавления ответвления к существующему трубопроводу необходимо выбрать компонент "Трубопровод" и навести курсор на необходимый трубопровод - при этом возможные места присоединений отметятся зелеными точками(см. вложение). Если необходимо сделать ответвление например по центру какого-нибудь отрезка, то нужно выделить трубопровод укоротить необходимый отрезок, выбрать компонент "Трубопровод" и дорисовать ответвление. Если необходимо нарисовать трубопровод с разрывом, то при рисовании нужно нажать ПКМ, перенести курсор в необходимое место и продолжить рисование.
при попытке присоединить кусок другого трубопровода - тот помещается на другой слойТак и должно быть - два трубопровода это два разных объекта, которые не могут находиться на одном слое.
Попытался выйти из данной ситуации созданием ответвлений в нужных местах, но при попытке чуть сдвинуть созданное ответвление оно "отвязывается" от трубопровода, и обратно прицепить его уже нельзя, хоть и слои совпадают...Такое может произойти только если трубопровод перемещался по Alt+стрелки - при этом выравнивание по сетке сбилось. В следующих обновлениях добавим возможность двигать отрезки трубопровода по Alt+стрелки - это должно решить проблему.
Посмотрите на пример моего тренда. Скажите зачем масштабируется шкала показаний с отрицательными значениями и значениями выше, чем у шкалы(обратите внимание на шкалу с знаком "С")?Видимо у трендов включено свойство "Задать положение" и задан диапазон "От" и "До"? В этом случае шкала автоматически будет увеличена так, чтобы тренд расположился в заданном диапазоне.
Еще хочется иметь надписи на графике с названием линии. Можно выводить надпись только при печати. Печать ведется на ЧБ принтере линии трудно отличать.Сделаем в будущих обновлениях.
Да свойство заданно, но я и имел ввиду, что зачем такое масштабирование шкалы значения, если я, просто, смещаю график в пространствеПростым смещением тренд нельзя разместить в заданном диапазоне. В данном случае используется смещение + масштабирование тренда. Т.е. при включенном свойстве "Задать положение" скада должна взять основную шкалу тренда и разместить её в заданном диапазоне. Для этого шкала увеличивается, меняется её мин. и макс. таким образом, чтобы основная шкала тренда была вписана в заданный пользователем диапазон. Как мы поняли, Вы хотите, чтобы на шкале не отображались значения выше и ниже основной шкалы тренда, или что-то в этом роде?
Например, мне нужно взвешивать различные дозы продукта, один раз 340кг, другой 784кг, третий 516кг.Судя по описанию, здесь подойдет только переменная шкала, которая может меняться из скриптов.
Да. Вы поняли верно. Оператору трудно доказать, что температура была не -36, а это "всего лишь масштабирование, чтобы красивее было". А если серьезно, то трудно "поймать" значение тренда с таким масштабированием. А еще жду возможность копировать группу трендов с сохранением цветов и настроек.Сделаем.
Еще пара хотелок:присоединяюсь и от себя:
1. Добавить к фигуре прямоугольника радиус скругления углов;
2. Добавить выбор выравнивания внутри поля.
1. Добавить к фигуре прямоугольника радиус скругления углов;
2. Добавить выбор выравнивания внутри поля.
Хотелось бы иметь возможность сделать заливку контура, созданного линиейДанные функции возможно будут добавлены, но не в ближайшее время, из-за низкой востребованности. Сейчас есть большое количество более популярных задач. Надеемся на понимание.
сделайте, чтоб можно было получить номер строки таблицы, по которой кликнули мышейЭтот вопрос будет решен уже в ближайшем обновлении.
Windows Defender .....Аналогичная ситуация, но выход есть,- раскрывать скачанный архив только в каталоге, который в исключениях.
Огромная просьба изобразить автосохранение проекта. За последние 2 дря редактор вывалился 3 раза, и 2 из них очень неожиданно.Teodor мне кажется еще рановато для автосохранения, так как пока не реализована полноценная отмена всех действий.
Огромная просьба изобразить автосохранение проекта. За последние 2 дря редактор вывалился 3 раза, и 2 из них очень неожиданно.Планируем реализовать автосохранение в будущем. Ошибки вылета редактора вчера выявили и устранили. Обновление постараемся опубликовать на следующей неделе.
Для этого один час программы там каких-либо ограничений? Это Profesional вы?Да, это Profesional версия, но работает только один час. Других ограничений нет.
А можно обнаглеть в корень и попросить увеличить к-во тегов?Количество тегов привязанных к объекту? Теоретически, можно, но есть причины по которым мы не добавили переменное количество тегов. А Вашу задачу не решить используя GetVariableByName для поиска 4 переменных, например по тегу объекта? Т.е. берём тег объекта и ищем на его основе нужные переменные (любое кол-во) и работаем с ними.
Суть. Не могу покрасить в разные цвета, разные участки трубопровода.Пока вариант только создавать разные трубопроводы со стыковкой по прямой, как на скрине во вложении. В будущем попробуем как-то улучшить этот момент.
Есть 2 объекта на сетке. Один копипастим в окно, двигаем окно (по сетке), копипастим второй - сетка съехала, объекты стоят не ровно, выравниваем по сетке первый, все ок.Да, действительно, было неправильное смещение по Y. Исправили. Обновление завтра вечером сделаем.
1. Более удобный редактор скриптов, хотя бы отмену действий.?В завтрашнем обновлении уже будет повтор/отмена действий в скриптах.
При свернутом проекте или например открытом меню пуска в полноэкранном режиме, звука при авариях нет, может есть способ это исправить?К сожалению, способа проигрывать звук когда окно не в фокусе - нет.
Входят ли переменные, которые используются в скриптах и добавленные в переменные в это число?Входят только внешние переменные, которые получены с OPC-серверов. Любые внутренние переменные и переменные внутри скриптов без ограничений.
Возможно ли где-то прописать путь к своим проектам, вне стандартной папки Projects?Сейчас это невозможно. Добавим такую возможность в будущем.
А можете ли вы ввести процедуру таймера? Чтобы это работало так. Я передаю этой процедуре запуска таймера уставку в виде переменной типа TDateTime, переменную типа TDateTime для текущего значения таймера, и переменную типа Boolean для выхода таймера и запускаю обратный отсчет до 0. Отработала уставка - переменная выхода таймера установилась в 1 и включился скрипт "Сработал таймер" наподобие скрипта "Выполнен SQL запрос".Т.е. требуется запустить таймер и только однажды (когда отсчет дойдёт до нуля) выполнить скрипт? Или нужно чтобы таймер работал циклично, пока пользователь не остановит его?
Т.е. требуется запустить таймер и только однажды (когда отсчет дойдёт до нуля) выполнить скрипт? Или нужно чтобы таймер работал циклично, пока пользователь не остановит его?Я так понимаю что таймер должен работать по аналогии с FB TON в ПЛК.
Т.е. требуется запустить таймер и только однажды (когда отсчет дойдёт до нуля) выполнить скрипт?Именно так. У меня в проекте реализован отложенный запуск прибора. Оператор вводит время и запускает. Идет обратный отсчет и в положенное время прибор запускается. Все работает. Но если будет глобальная процедура, я ее использую. Да и другим будет полезна такая процедура.
Как deldemo выше написал, процедура должна работать как обычный таймер в ПЛК. Только вместо входа IN отдельные процедуры. Запуск, останов, пауза, сброс.Обдумаем предложение с таймерами.
Тут другая логика... На сервере может бегать несколько проектов одновременно, а клиент может быть подключен к любому из проектов на любом из серверов, только чтобы был доступ по сети.
...хотелось бы видеть список объектов (на наких странцах/окнах), и скриптов (строка) где она используется.Поддерживаю просьбу.
Добрый день подскажите в будущем будете использовать такую архитектуру сети, у клиента например в SS иметь возможность отображать три объекта где установлены сервераНет, пока не планируем. Правильнее всего (и значительно дешевле) использовать один сервер, который подключен к множеству станций и к нему уже подключать клиентов. Как и описал Teodor, можно создать три отдельных проекта при необходимости и подключаться к удаленных OPC-серверам (для этого требуется настроить DCOM (https://simple-scada.com/help/manual/dcom-set.html)). Если использовать один сервер невозможно, то остается только вариант с использованием трёх отдельных серверов и трёх отдельных клиентов, т.е. на клиентской стороне должно быть три компьютера.
Кстати, о окнах... А насколько сложно изобразить элемент "панель"?Обязательно добавим панель, а также возможности группировки объектов.
Огромная просьба к разработчикам. Очень нужна такая фишка как "глобальный поиск". Если есть некая переменная, то хотелось бы видеть список объектов (на наких странцах/окнах), и скриптов (строка) где она используется.Эту функцию добавим уже в ближайшем обновлении.
Можно ли добавить функцию Find&Replace в пределах скрипта?поддержу, очень не хватает
Можно ли добавить функцию Find&Replace в пределах скрипта?Да, добавим.
Уважаемые, подскажите пожалуйста как в отчетах отнять значения одного столбца от другого?Очень просто, поставьте в бэнд компонент "Текст" (или редактируйте уже существующую ячейку), затем дважды кликните его и в открывшемся окне, в разделе "Выражение" в фигурных скобках введите нужную формулу. См. пример во вложении.
Можно, как то, сделать что бы панель "переменные " можно было скрывать или изменять размер?Добавим такую возможность.
Было бы очень удобно работать в эдиторе в одном мониторе, в то время как в других отображаются различные клиенты.Подключение к серверу скады нескольких клиентов создаст дополнительную ненужную нагрузку на сервер. Правильнее было бы добавить поддержку многомониторного режима , тогда к серверу будет подключен только один клиент, но отображаться он будет на нескольких мониторах. Мы планируем внедрить многомониторный режим в ближайшем будущем.
А если мне нужно поставить не целочисленное значение границы, как быть?В будущих обновлениях постараемся добавить поддержку вещественных значений. Сейчас это можно реализовать только скриптами, используя процедуры для работы с сообщениями (https://simple-scada.com/help/script/message-methods.html), например:
begin
if Sender is TM_Object then
with Sender as TM_Object do
if AsFloat > 90 then // если значение больше 90
AddMessage(Now, mkAlarm, 'Превышение верхней границы!', True, True)
else
if AsFloat < 10 then // если значение ниже 10
AddMessage(Now, mkAlarm, 'Превышение нижней границы!', True, True);
end.
ShowMessageAll('Предупреждение!', 'Высокая температура', clRed);
TeNQ, здравствуйте. Можем сделать выбор цвета шрифта в настройках проекта для каждого из трёх типов сообщений. Это подойдёт?Подойдет, только я не совсем понимаю как это будет работать. Ведь функция вывода сообщения не привязана к типу. Там вводится заголовок, текст и фон. Если только сделать новую функцию, которой передается заголовок, текст, тип сообщения(с настройками в проекте)?
Подойдет, только я не совсем понимаю как это будет работать. Ведь функция вывода сообщения не привязана к типу.Это мы перепутали с другими процедурами. Добавим отдельный параметр в процедуру ShowMessageAll как Вы и писали Выше.
Можно ли как-то сделать, чтобы имя связанной переменной редактировать было нельзя, но выделить для вставки в буфер можно.Да, можно, сделаем.
Те же объекты в поле зрения, то же увеличение и т.д. Это удобно. Но можно ли сделать такую же стрелку для возврата в скрипты? Это было очень удобно.Можем в ближайшем обновлении сделать, чтобы при переходе в скрипты через меню "Проект - Скрипты" (или комбинацию клавиш "Alt + S" переход осуществлялся к скрипту, который редактировался последним.
Предлагаю сделать простое решение: в настройках запуска(эдитор, клиент) добавьте элемент управление поле со списком, в котором будет отображаться перечень доступных рабочих столов. на выбранном в этом элементе управления рабочем столе и будет запускаться приложение. Либо введите оконный режим работы приложений. тогда можно будет перетаскивать приложения в нужные рабочие столы самостоятельно.Рассмотрим этот вариант. Также обратите внимание, что клиент скады будет запущен в окне, если в Options.exe выбрать разрешение меньше чем текущее разрешение экрана.
Можем в ближайшем обновлении сделать, чтобы при переходе в скрипты через меню "Проект - Скрипты" (или комбинацию клавиш "Alt + S" переход осуществлялся к скрипту, который редактировался последним.Спасибо. Было бы здорово.
1. Алгоритм когда кнопка в режиме без фиксации сама генерирует 1->0 это мягко говоря неправильно. Она должна посылать команду в контроллер 1, а контроллер сам должен сбрасывать команду "0" по исполнению.Да, кнопка сама пишет в переменную 1 и 0. Способ который Вы описали можно было бы реализовать, но только по нашей статистике он не подойдет 80% пользователей, т.к. они не используют сброс на 0 на контроллере. Для Вашей задачи должна подойти кнопка с фиксацией и одним состоянием с значением = 1.
Могу представить ситуацию когда несколько клиентов в одно время посылают 1->0. Мягко говоря бардак.Не совсем понятно что именно беспокоит Вас в присваивании 1 -> 0. Команды поступят на OPC-сервер по-порядку и также по-порядку выполнятся.
Мне нужно чтобы в разных режимах (авто и ручной для оборудования) кнопка либо работала, либо нет. Просто деактивировать кнопку - это логично, но нужно чтобы ещё оператор знал что кнопка неактивна.Допустим у Вас есть переменные: vrMode ("ручной/авто") и vrValue (переменная значение которой меняет кнопка). Тогда нужно связать основную переменную кнопки с переменной vrValue, а доп. переменную кнопки с vrMode. Теперь на событие OnDataChangeEx можно поставить универсальный скрипт (такой скрипт подойдёт и другим подобным кнопкам):
begin
if Sender is TM_Button then // проверяем, что Sender это кнопка
with Sender as TM_Button do // далее работаем с Sender'ом, как с кнопкой (тип "TM_Button")
case VariableEx.AsInt of // если значение доп. переменной кнопки равно
0 : States[0].Color := clGray; // изменить цвет на серый
1 : States[0].Color := clGreen; // изменить цвет на зеленый
2 : States[0].Color := clRed; // изменить цвет на красный
end;
end.
Скриптом я этого не могу: цвет зависит от режима - в данном случае "без фиксации".Вы можете изменить цвет кнопки как показано в примере выше. Кнопка состоит из множества состояний, в каждом состоянии она может принимать разный цвет. При изменении цвета кнопки через скрипты нужно менять цвет в каждом состоянии.
4. Пожелание: инструмент "заменить" в редакторе скриптов.Замена будет добавлена в будущих обновлениях.
Нужно предоставить пользователю право выбора - удалять подвязки или нет.Эта задача есть в планах. Но быстро добавить такую возможность не получится, потребуется время. Сейчас есть возможность массового обновления свойств переменных только из CSV-файла определенной структуры. Импорт из CSV описан здесь (https://simple-scada.com/help/manual/variable-import-csv.html).
Когда планируете реализовать? В данной ситуации это критично чтобы не писать скрипт на оншоу.В ближайшем обновлении уже будет доступно. Постараемся опубликовать как можно скорее.
Столкнулся с такой ситуацией: руками запускаю OPC-сервер, затем СКАДУ, значения принимаются скадой и передаются через OPC в контроллер.Здравствуйте. Скада не делает никаких различий между OPC-сервером запущенным пользователем и OPC-сервером, который запустила сама. Как Вы производите запись из скады? Вводите значение через поле, или нажимаете какую-то кнопку? Вы уверены, что у скады достаточно прав на взаимодействие с OPC-сервером и что она не блокируется файрволлом/антивирусом или другим ПО? Если запускать сервер скады от имени администратора, то ничего не меняется?
Если сразу запустить СКАДУ (Клиент), она сама запускает OPC-сервер, чтение данных из него происходит, а вот записать из СКАДЫ в контроллер и OPC не получается.
СКАДА v2.2.2.0. OPC-сервер от производителя контроллера (Regul OPC DA Server v1.0.0.22). В их техподдержке сказали что от клиента нет запроса на запись переменной, при запуске сервера клиентом.
С помощью arOPC возможно подключение только по modbus? Какое устройство необходимо выбрать при добавлении?Полный список протоколов можно посмотреть здесь (http://www.ardsoft.ru/protocols.html). Также можно задать вопрос разработчикам arOPC на этом форуме в разделе arOPC (https://simple-scada.com/forum/index.php?board=9.0).
Как Вы производите запись из скады? Вводите значение через поле, или нажимаете какую-то кнопку?Ввожу значение в поле, пробовал тип BOOL и REAL, при этом тонкая рамка вокруг поля мерцает, а запись не происходит. Данные из контроллера продолжают отображаться.
Вы уверены, что у скады достаточно прав на взаимодействие с OPC-сервером и что она не блокируется файрволлом/антивирусом или другим ПО?Да, так как при запуске в последовательности: ручной запуск OPC-сервера -> Сервер СКАДЫ от админа -> Клиент от админа - все работает нормально.
Если запускать сервер скады от имени администратора, то ничего не меняется?Изменений замечено не было.
Вопрос в том , как теперь установить визуализацию на комп. оператора . Нужно-ли устанавливать все программы?Здравствуйте. Для работы с Simple-Scada 2 достаточно установить саму скаду, OPC-сервер и СУБД MySQL (если нужны функции архивации трендов и сообщений) и можно приступать к разработке проекта в скаде. Кратко процесс разработки скада-проекта обычно проходит так: конфигурируется OPC-сервер и настраивается связь с конечными устройствами; создаётся новый проект в редакторе скады (Editor.exe); с OPC-сервера в проект импортируются теги (https://simple-scada.com/help/manual/variable-import-opc.html) (или добавляются вручную); строится интерфейс проекта; запускается сервер скады (Server.exe); клиент скады (Client.exe) подключается к серверу. Полное руководство на русском языке доступно по этой ссылке (https://simple-scada.com/help/manual/index.html).
В интернете много видеороликов , но не понятно , как сделать готовый к работе проект . Чтобы оператор открыл файл на рабочем столе и работал.
Уточните, в какое расположение установлена скада?Исходя из руководства, скада установки не требует. Папка со скадой находится на рабочем столе (так же пробовал C:\Simple-Scada\). Запускать просто или от имени администратора разницы нет (по крайней мере не было замечено). Имя проекта не содержит кириллицу.
Но желтый на clLime вообще никак не бликует. Другие цвета - да, хоть и не совсем так как хотелось бы (видимо что-то с распознаванием оттенков серого).Здравствуйте. Дело в том, что цвет накладывается поверх текстуры и происходит смешивание цветов. Если нужно добиться полной смены цвета, то текстура должна быть белой. Поэтому для создания такого клапана нужно либо использовать множество кадров с поочередной сменой для мигания, либо составлять клапан из трёх отдельных текстур белых треугольников с перекрашиванием каждого треугольник отдельно (тогда можно и стандартное мигание использовать). Но лучше всего, конечно, встроить дополнительный трехходовой клапан в скаду, такая идея есть, но пока до конца не ясно как выработать решение, которое подойдёт всем пользователям.
встроить дополнительный трехходовой клапан в скаду, такая идея есть, но пока до конца не ясно как выработать решение, которое подойдёт всем пользователям.Лично я для себя нарисовал кучу картинок с вариациями открытия трёхходового, описал в универсальном скрипте все вариации индикаций в зависимости от подвязанных основной и доппеременной. Схему управления записал в тэг картинки. В итоге вставляю картинку - подвязываю два di тега и выставляю тэгом схему.
И сразу вопрос: для TM_TimeViewer.Interval есть планы снять ограничение read-only?Да, ограничение будет снято в будущих обновлениях скады.
Или тут шедулер сугубо булевый, вкл/выкл?Да, вкл/выкл, при этом можно задать значение вкл. и значение выкл. в соответствующих свойствах расписания. В будущих обновлениях мы постепенно будем дорабатывать этот компонент, как и другие компоненты. Все пожелания обязательно учтём.
Подскажите , как сделать таблицу с почасовым потреблением ( например электроэнергии ) чтобы или на мнемосхеме отображалась за сутки и в течении недели , или где-то на компьютере файл сохранялся . Скорость импульсов от датчика не более 1 с секунду .Для этого можно по какому-либо событию делать пользовательский запрос к БД на выборку архивных данных, а затем в цикле проходить по результатам выборки и производить необходимые расчеты. Такой способ плох сложностью разработки и тем, что при работе с большими объемами данных (например за неделю) вычисления станут слишком медленными. Поэтому сейчас правильнее всего было бы использовать систему отчетов для этих целей и, например, по нажатию кнопки строить отчет за нужный интервал времени с таблицей. Примеры для работы с системой отчетов можно посмотреть здесь (https://simple-scada.com/help/report/index.html).
рассматривали ли вы вариант поддержки запуска скады на планшетах? для этого требуется поддержка виртуальной клавиатуры и элементы управления с поддержкой сенсора. Нужны какието элементы управления в окне приложений для их закрытия и сворачивания. Сейчас скада у меня крутится на планшете, не хватает всего описанного выше.Всё описанное уже давно есть в Simple-Scada 2. Включите виртуальную клавиатуру на планшете через Options.exe -> вкладка "Simple-Client" (https://simple-scada.com/help/manual/settings-simple-client.html). Кнопки закрытия и сворачивания Вы можете создать самостоятельно и разместить их где угодно. Для этого добавьте кнопку и на событие OnClick напишите следующий код:
begin
MinimizeApplicationClient(GetClientName);
end.
begin
CloseApplicationClient(GetClientName);
end.
Редактировал шрифт в ячейке - не применялся.Здравствуйте. Он не применялся, т.к. у ячейки свойство "Шрифт" выбрано "как у колонки", а значит все свойства шрифта будут взяты у колонки. Если выбрать какой-то конкретный шрифт, то цвет и другие свойства будут меняться.
Попробовал редактировать цвет шрифта у всей таблицы - получил скрин.Проблема повторяется если снова открыть проект и проделать те же действия? Можете ли Вы отправить нам проект c указанием проблемной таблицы на почту support@simple-scada.com?
возможно ли в будущих обновлениях организовать импорт чертежей из автокада векторной графикой?нет, таких возможностей не планируется, но инструменты рисования линий и фигур со временем будем дорабатывать.
Вообще то, если вести речь о DXF, то в общем можно вести эту доработку на его основе и его же потом гонять туда-назад. Кстати, в автокаде есть такой элемент "Блок" - импортированный кусок графики, который не подлежит редактированию. В общем, импортированная DXF картинка вполне может быть таким блоком, отрисоваваясь, прямо из файла.Цитироватьвозможно ли в будущих обновлениях организовать импорт чертежей из автокада векторной графикой?нет, таких возможностей не планируется, но инструменты рисования линий и фигур со временем будем дорабатывать.
begin
if not (Sender is TM_Object) then Exit;
with Sender as TM_Object do
if (Variable <> nil) and (VariableEx.IsGoodQuality=true) then
begin
Variable.Value:= VariableEx.Value*2500;
end;
end.
Никак нельзя, например, трубопровод заменить отдельными кусками труб, которые можно самому разбирать и собирать в группы труб (трубопроводы) на свое усмотрение.Большинство пользователей такой метод как раз не устраивает и занимает гораздо больше времени. Если на мнемосхеме предполагается большое количество трубопроводов, то собирать их из множества элементов не самая удобная и быстрая задача. С текущей же системой трубопроводов нарисовать большое количество трубопроводов не займет много времени - элементы трубопровода автоматически соединяются между собой.
Зависимо от состояния моторов и клапанов активные участки должны подсвечиваться. Т.к. они сначала были нарисованы, то вся труба это один трубопровод. Теперь сижу, копирую, из одной копии вырезаю одно, из другой, другое, потом, опять копирую-нарезаю. Короче мрак.Если необходимо, чтобы участки трубопровода подсвечивались, то нужно было изначально рисовать эти участки отдельными трубопроводами - тогда бы не пришлось ничего переделывать. Даже если бы Вы собрали трубопровод из отдельных элементов, то сейчас Вам все равно пришлось бы разбивать его на группы и писать скрипты подсвечивания для этих групп, а это тоже не удобно и требует времени. Поэтому, самый быстрый вариант это сразу планировать, какие участки трубопровода нужно подсвечивать и изначально рисовать их отдельными трубопроводами.
Мaks448, у Вас разрешение экрана на компьютере 1920x1080, верно? А проект сделан под разрешение 2048 на 1152. Если сменить разрешение проекта на 1920x1080, то все отображается корректно? Также уточните, у Вас в операционной системе задано дополнительно масштабирование экрана?Да, дело было в масштабировании, еще раз спасибо! А как можно свернуть окно работающего клиента?
Да, дело было в масштабировании, еще раз спасибо! А как можно свернуть окно работающего клиента?Нажать сочетание CTRL+M. Или можно сделать кнопку, по нажатию на которую клиент будет сворачиваться - для этого используйте процедуры MinimizeApplicationAll (https://simple-scada.com/help/script/minappall.html) и MinimizeApplicationClient (https://simple-scada.com/help/script/minappclient.html).
Как я могу защитить мои проект не будет открыт в редакторе ?Не дать доступ до редактора. Запускать клиента из папки где нету проекта.
Снаружи приходит составная переменная статуса кнопок, они подсвечваются и тут-же гаснут, т.к. переменная скидывается в 0, что вообще не есть хорошо.Кнопки могут влиять только на основную переменную. Если статусная переменная у них задана как дополнительная, то они её точно не будут сбрасывать. Может ещё в каких-то скриптах проходит сброс этой переменной?
Здравствуйте. Бьюсь над проблемой по имени "CoDeSys.OPC.02 (localhost) ошибка при добавлении новых тегов: Unspecified error". Уже несколько раз - всё работает как надо, выключил компютер, на следующий день при включении с ПЛК не связывается, SCADA теги не видит. Что за наваждение?Во всем виноват OPC server(если Вы конечно "родной" используете"). Нужно пересоздать соединение с проектом в CoDeSys OPC Configurator
Во всем виноват OPC server(если Вы конечно "родной" используете"). Нужно пересоздать соединение с проектом в CoDeSys OPC ConfiguratorЯ так и понимаю... на всякий случай снёс кодесис, ставлю самый свежий с их сайта. Спасибо.
Доброго дня! существует ли такая возможность разместить в среде таймер у которого были бы события, чтобы управлять объектами по времени, не прибегая к задействованию теговЗдравствуйте. Отдельного компонента для таймера нет и создать таймер сейчас можно только на основе тегов (можно использовать внутренние теги, они не ограничены). Вот последовательность действий для создания таймера:
const
INTERVAL = 60; // Интервал таймера в секундах
var
aSeconds: Int64;
begin
{ если vrTimer ещё не инициализирована, то инициализируем её и прерываем скрипт }
if vrTimer.Value < 1 then vrTimer.Value := Now;
{ получаем кол-во секунд с последнего срабатывания таймера }
aSeconds := SecondsBetween(Now, vrTimer.AsDateTime);
{ если прошло больше, чем INTERVAL секунд с последнего срабатывания таймера }
if aSeconds >= INTERVAL then
begin
// КОД РАЗМЕЩЕННЫЙ ЗДЕСЬ БУДЕТ ВЫПОЛНЯТЬСЯ ПО ТАЙМЕРУ
vrTimer.Value := Now;
end;
end.
Практикуете ли вы авторизацию специалистов по внедрению?Нет, пока такой возможности нет.
будет ли скидка на последующие за первой приобретенной лицензией на программу?Отправили информацию Вам на почту.
А есть-ли, хотя-бы теоретическая, возможность при внесении изменений в проект не перезапускать ВЕСЬ проект. Например я передвинул пару элементов, поменял права, добавил сообщений и т.п., но не лез в переменные, тренды, скрипты и т.п.К сожалению, без полного перезапуска проекта не обойтись, т.к. новые объекты должны обязательно регистрироваться компилятором, что и происходит при перезапуске. Теоретически можно отслеживать все изменения и дорегистрировать только их, но для этого нужно разработать целую систему.
Нельзя-ли добавить к свойствам объекта "Поле" BackgroundColor ?Т.е. нужно менять цвет фона Поля? Используйте свойство Color. Это и есть цвет фона. Или Вы говорите о чем-то другом?
Того, что есть в закладке управления тревогами не всегда достаточно.
:)Привет! Поковырял, может не полностью,но почему при работе с трендами (Окно Тренды) ,не показываются границы (аварии и предупреждения) ? Может не там смотрел :-[Выберите интервал "Пользовательский" чтобы просмотреть тренды за любой указанный интервал. Вывести аварийные и предупредительные границы в тренды пока нельзя. Меню трендов подробно описано здесь (https://simple-scada.com/help/manual/client-trends-view.html).
Как посмотреть тренды за 3 дня например?
Масштаб графика как увеличить?! Колесиком не получается.Масштабирование трендов осуществляется с помощью шкал трендов. Шкалы трендов можно перемещать по вертикали при помощи курсора, а масштабировать колесиком мыши (если включена опция "Масштаб и перемещение шкалы (https://simple-scada.com/help/manual/index.html?editor-settings.html#set_trends)"). При клике ПКМ по шкале произойдет возврат к оригинальному виду шкалы. Меню трендов подробно описано здесь (https://simple-scada.com/help/manual/client-trends-view.html).
Когда круглые индикаторы появится ?Каких-то сроков назвать не можем. Сейчас решаются более востребованные задачи.
Т.е. нужно менять цвет фона Поля? Используйте свойство Color. Это и есть цвет фона. Или Вы говорите о чем-то другом?
begin
Case Image1.ValueAsInt of
1: Image1.Colour := clRed;
2..4: Image1.Colour := clGreen;
5: Image1.Colour := clYellow;
end;
end.
При компиляции сообщение - undeclared identifier Image1Это значит, что у Вас в проекте нет объекта "Image1". Создайте изображение с именем "Image1" или замените в скрипте "Image1" на имя изображения, которое есть у Вас в проекте и скрипт будет компилироваться.
Объект "Поле (https://simple-scada.com/help/script/tmfield.html)" также обладает свойствами классов TM_Control (https://simple-scada.com/help/script/tm_control.html) и TM_Object (https://simple-scada.com/help/script/tm_object.html), в которые входит и свойство Color (https://simple-scada.com/help/script/color.html).ЦитироватьПри компиляции сообщение - undeclared identifier Image1Это значит, что у Вас в проекте нет объекта "Image1". Создайте изображение с именем "Image1" или замените в скрипте "Image1" на имя изображения, которое есть у Вас в проекте и скрипт будет компилироваться.
var
aField : TM_Object;
begin
aField := GetObjectByName('имя поля');
if aField <> nil then
if aField is TM_Field then
with aField as TM_Field do
aField.Variable := 1;
var
aField: TM_Field;
begin
aField := GetFieldByName('имя поля');
if aField <> nil then
aField.Variable := 1;
end.
Было-бы очень удобно при наличии переменных загруженных с устройств иметь возможность выгрузить их в .csv-файл, чтобы потом можно было их отредактировать в этом выгруженном файле и потом снова загрузить.В ближайшем обновлении появится возможность экспорта в .csv.
У вас есть возможность загрузки из .csv, но выгрузка была-бы очень кстати.
Метод "RunSQL" не вызывает скриптов по завершению запроса или по ошибке.Скрипты на события "Выполнен SQL-запрос" и "Ошибка SQL_запроса" вызываются только для глобальной процедуры RunSQL (https://simple-scada.com/help/script/workbd.html). Для одноимённого метода таблицы Table.RunSQL (https://simple-scada.com/help/script/trunsql.html) данные события не вызываются, но при этом текст ошибки (в случае её возникновения) отображается прямо в таблице (см. скрин во вложении).
Добавить для Таблицы свойство выбор ячейкиСейчас Вы можете обратиться к свойствам ячейки таблицы через столбец таблицы. Например обращение к ячейке во второй колонке и пятой строке будет выглядеть так:
var
aCell: TM_TableCell;
begin
aCell := Table1.Columns[1].Cells[4];
end.
3. Разрешить запись в "Text" для "Ячейки"Сейчас возможна запись, но только через переменные. Т.е. ячейка связывается с переменной и любое изменение значения переменной отображается в ячейке. В будущем постараемся разрешить смену текста без привязки к переменным.
Доброго дня! практически все известные OPC серверы модбас предоставляют возможность подключения не более 32 тегов. Ваша бесплатная версия позволяет подключать 64 тега. 2 разных опс сервера запустить нельзя. натолкните пож. на мысль, с помощью каких механизмов можно запустить у клиента стартовую задачку(там надо как минимум 44 тега) именно на модбас(контроллеры у меня свои с поддержкой модбаса).Вы имели в виду, что ДЕМО серверов читают не более 32 тегов... Кстати, к часовой демо в комплект взять лектус. У него тоже есть демо анлим, но по времени.
если все таки это возможно, ответьте на мой вопрос. существует ли вариант использования вашей бесплатной версии с устройствами модбас на все 64 тега с использованием "льготного" ОПС. может вы могли бы договориться с производителями ОПС серверов также чуток расширить функционал до 64 тегов в демо режиме(вариант на час не катит, так как клиентам нужно время увидеть и ощутить надежную работу скады на небольшом участке ).Разработчики OPC-серверов никак с нами не связаны, это отдельное ПО которое разрабатывают другие люди и соответственно мы не можем повлиять на их решения касаемо количества бесплатных тегов.
Это нужно для корректного отображения названий трендов (редактируемый тренд). Можно ли ожидать снятия запрета read only или существует возможность по-другому решить проблему? Описание переменой лежит в другой текстовой Tm_Variable.А почему не подходит способ просто в редакторе задать правильное описание архивируемых переменных и затем когда на редактируемый тренд Вы будете выбирать одну из таких переменных, то скада будет брать соответствующее ей описание. Т.е. допустим есть переменная которая отображает "температуру в сборнике А". Адрес переменной нельзя менять во время работы проекта, а значит переменная всё время будет отображать именно "температуру в сборнике А". Тогда зачем менять описание этой переменной?
у трендов есть свойство «задать положение» для диапазона и процентовкиЭто свойство работает довольно просто. Вся область просмотра (см. ссылку) (https://simple-scada.com/help/manual/client-trends-view.html) трендов представляет собой зону от 0 до 100%. Вы можете у тренда включить свойство "Задать положение" и указать диапазон, например от 50 до 100%. Тогда скада возьмёт шкалу переменной (https://simple-scada.com/help/manual/edit-scale.html)[/b] и автоматически впишет её в заданный диапазон.
у временных трендов есть минимум и максимум шкалы - при их применении данные отражаются некорректно - то есть шкалы смещаются, а сами тренды - нет.Свойства минимум шкалы и максимум шкалы у компонента временные тренды никак не влияют на отображение самих временных трендов, это просто визуальные значения для отображения шкалы. Ведь временных трендов может быть несколько и у каждого может быть своя шкала. А при отрисовке временных трендов берётся минимум и максимум шкалы переменной (https://simple-scada.com/help/manual/edit-scale.html) и эта шкала вписывается в высоту компонента.
На разных стадиях необходимо контролировать разные участки шкалы - например на 1 этапе колеблется 15-20, потом 30-50, потом 70-80, соответственно нужно делать шкалу в районе +\- 10% от значения чтобы видеть подробности (для 15-20 разбега - шкала 10-25). На шкале 0-100 ничего не видно.В будущих обновлениях постараемся добавить автодиапазон шкалы.
Есть ли функция, которая позволит отправить определенный отчет сразу на принтер без его предварительного просмотра?Нет, сейчас печать возможна только с предпросмотром, но уже в ближайшем обновлении (будет скоро) появится возможность печати без предпросмотра.
И очень не хватает масштабирования мнемосхемы в клиенте колесом мыши , планируется ли подобное нововведение?Масштабирование в стандартном клиенте скады не планируется. К концу года планируем опубликовать web-клиент для Simple-Scada Professional и в нём можно будет масштабировать страницы средствами браузера (CTRL + Колесико мыши).
begin
Page1.GoToPageClient(GetClientName); // переход на страницу Page1 на клиенте, который вызвал скрипт
end.
var
aPage: TM_Page;
begin
{ ищем страницу с именем Page + значение свойства Тэг }
aPage := GetPageByName('Page' + IntToStr((Sender as TM_Button).Tag));
if aPage <> nil then // если страница существует
aPage.GoToPageClient(GetClientName); // то, перейти на нее
end.
begin
GoToNextPageClient(GetClientName); // переход на следующую страницу на клиенте, который вызвал скрипт
end.
begin
GoToPrevPageClient(GetClientName); // переход на предыдущую страницу на клиенте, который вызвал скрипт
end.
Да, это выход. но вы не планируете сделать стандартное решение этой проблемы? в виде многорядных закладок?Сейчас с помощью панели страниц можно разместить в проекте 800x600 и более 16 страниц, например создав четыре страницы, на каждой из которых будет четыре подстраницы - это и есть стандартное решение. Если такой вариант Вам не подходит, то нужно скрыть панель страниц и воспользоваться способами описанными в прошлом сообщении. При этом Вы можете сделать кнопки страниц любого размера, расположить их рядами или в столбец и т.д.
а нельзя ли в одно расписание включить несколько тегов?Если необходимо по расписанию менять значение нескольких тегов, то напишите скрипт на событие OnDataCahange расписания, в котором управляйте нужными тегами, например:
var
aValue: Integer;
begin
aValue := (Sender as TM_Schedule).AsInt; // берём значение основной переменной связанной с расписанием
{ присваиваем его в другие переменые }
Var1.Value := aValue;
Var2.Value := aValue;
Var3.Value := aValue;
end.
вы не планируете сделать не просто включение/выключение а задание уровня в расписании? нельзя ли в расписании предусмотреть автомтические вещи типа графика восхода/захода солнца?Такой функционал не планируется.
Разбираюсь с компонентом TM_Table, правильно ли я понимаю, чтоСейчас таких возможностей нет. Возможно они появятся в будущем.
1) программно невозможно изменить цвет фона ячейки;
2) нет возможности определить ввод значения в ячейку, т.к. отсутствует событие типа OnDoneInput;
Протестировал возможность изменения description Tm_Variable скриптом: свойство действительно меняется, при запросе чтением скрипты выдают обновленное значение. Однако на графических объектах (пкм) клиента и в трендах свойство остаётся таким же, каким было выставлено в редакторе по-умолчанию.Видимо мы невнимательно прочитали Ваше прошлое сообщение с просьбой открыть запись в свойство переменной Description и не обратили внимание на то, что при этом требуется обновлять описание переменной на клиентах. К сожалению, по ряду причин это невозможно реализовать.
видимо тогда лучше обратно закрыть доступ к редактированию и дать доступ к свойствам описания трендов, или к тексту для произвольных трендов и работать с трендом по id.Доступ к описанию трендов невозможно открыть по тем же причинам, что и к описанию переменной.
Хотелось бы иметь возможность интегрировать проект Скады с системами IP-видеонаблюдения.Такой возможности не планируется.
Хотелось бы иметь возможность интегрировать проект Скады с системами IP-видеонаблюдения......С одной стороны это интересная мысль, но если поразмыслить логически, то картинка с видео потоком будет перекрывать мнемосхему тех. процесса этого узла или сопутствующих, что не позволит адекватно реагировать в сложившейся ситуации. Более того, оператору понадобятся дополнительные манипуляции для управления в момент аварийной ситуации( допустим переместить окно с видео в другое место). По мне правильно, когда видеонаблюдение находится на отдельной машине и занимается своим делом, тем более IP-видеонаблюдение достаточно требовательно к сетевым ресурсам, что будет негативно сказываться на общей производительности сервера.
var
aPage: TM_Page;
begin
{ ищем страницу с именем Page + значение свойства Тэг }
aPage := GetPageByName('Page' + IntToStr((Sender as TM_Button).Tag));
Хотелось бы иметь возможность интегрировать проект Скады с системами IP-видеонаблюдения......С одной стороны это интересная мысль, но если поразмыслить логически, то картинка с видео потоком будет перекрывать мнемосхему тех. процесса этого узла или сопутствующих, что не позволит адекватно реагировать в сложившейся ситуации. Более того, оператору понадобятся дополнительные манипуляции для управления в момент аварийной ситуации( допустим переместить окно с видео в другое место). По мне правильно, когда видеонаблюдение находится на отдельной машине и занимается своим делом, тем более IP-видеонаблюдение достаточно требовательно к сетевым ресурсам, что будет негативно сказываться на общей производительности сервера.
И еще вопрос по расписанию. Допустим система упала по какимто причинам.Я похожий вопрос задавал - в случае когда проект всегда запущен на сервере, то работа логики расписания работает корректно, и контроллер пожалуйста отключай/подключай.
Если перестартовали контроллеры а скада нет, то система читает с них теги а они в 0-х, работа по расписанию нарушается. но если перезапустить клиента, то при его старте сохраненное расписание актуализируется и контроллеры выводят правильные значения.
Возможно ли какимто способом в случае восстановления опроса с контроллеров(не важно по какой причине он пропал) атоматически кореллировать состояния расписаний на выходах контроллеров без перезапуска клиента?
как можно одной кнопкой перевести несколько кнопок в состояние нажато(к кнопкам привязаны выходы контроллера), а другой в состояние отжатоДля этого, нужно написать скрипты на событие OnClick кнопок, которые будут управлять другими кнопками.
begin
Var1.Value := 1;
Var2.Value := 1;
end.
begin
Var1.Value := 0;
Var2.Value := 0;
end.
И еще вопрос по расписанию. Допустим система упала по какимто причинам.Вы вероятно используете версию Simple-Scada 2.2.5.0 или более старую. В них запись в переменную расписания происходила единожды при входе или выходе текущего времени в заданный интервал расписания. В версии 2.2.6.0 компонент "Расписание" перезаписывает переменную, если она имеет значение отличное от того, которое должно быть в текущий момент по расписанию. Обновитесь до версии 2.2.6.0 и проблема решится.
Если перестартовали контроллеры а скада нет, то система читает с них теги а они в 0-х, работа по расписанию нарушается. но если перезапустить клиента, то при его старте сохраненное расписание актуализируется и контроллеры выводят правильные значения.
То есть аналогичного метода как для страниц для кнопок не существует?В скриптах можно использовать любые доступные функции поиска (https://simple-scada.com/help/script/search-functions.html), все зависит от конкретной задачи и возможности применения в ней данных методов.
В моей задаче оператор должен иметь возможность вмешаться в работу по расписанию и самостоятельно на какое то время включать и отключать выходы, контролируемые расписанием. и должен быть метод типа Refresh для расписания, который я мог бы вызвать чтобы потом возобновить автоматическую работу расписания.
begin
if vrSelect.AsBool then
Out1.Value := vrAuto.Value
else
Out1.Value := vrManual.Value
end.
Только Ваша SCADA не вызвала никаких вопросов и действительно является предельно простой и понятной в освоении. Плюс ко всему она действительно интересно выглядит (отличная реализация концепции HP HMI)!Спасибо за хороший отзыв, стараемся.
Отлично, значит вопрос с созданием панелек закрыт. Шаблонизацию анимации для вывода технологических параметров вчера тоже закрыл через скрипты. Но некий шаблонный объект с заранее настроенными скриптами и анимацией в любом случае будет полезен в будущем, ведь всегда полезно изменить все экземпляры объекта внеся правки лишь в одно место.
Есть возможность подмены переменных у объектов через скрипты. Это позволяет, к примеру сделать некое шаблонное окно
в редакторе можно создавать группы/подгруппы сообщений и тогда при просмотре сообщений на клиенте это позволит переключаться между группами и видеть только сообщения, принадлежащие выбранной группе.Вот момент именно с фильтрацией при просмотре я упустил. Что ж, отличная возможность! Ну а настройку классов, думаю, несложно будет прикрутить, поле "Kind" - это ведь и есть своего рода класс?
По просмотру трендов: сейчас изменять масштаб шкалы времени можно вращая колесико мыши. Шкалы трендов можно перемещать по вертикали при помощи курсора, а масштабировать колесиком мышиДа, это, конечно, удобно, но зачастую требуется быстро выделить именно какую-то характерную область, чтобы проанализировать в ней ход процесса, крутить "ручки наводки" в этом случае не слишком удобно, естественнее и привычнее именно выделить её мышью.
Уважаемый! сообщите пожалуйста где посмотреть ваш UA OPC он под линуксом работает?В моём случае, сервер, так сказать, аппаратный. Входит в состав ПЛК (SIMATIC CPU 1510SP-1 PN). А вообще можно попробовать сервер от Insat (http://insat.ru/products/?category=2350)или Matricon (http://www.matrikonopc.com/drivers/driver-types.aspx).
как перемещать сообщения между группами? Приходится дублировать сообщение, вырезать его и вставлять в другую группу.Пока переместить сообщение можно только так. В дальнейшем работа с сообщениями будет улучшена.
Ну а настройку классов, думаю, несложно будет прикрутить, поле "Kind" - это ведь и есть своего рода класс?Поясните пожалуйста, какое поле "Kind" имеется ввиду? Если Kind из таблицы сообщений в базе данных, то его номер соответствует типу сообщения (https://simple-scada.com/help/script/tm_messagekind.html): 0 - Аварийное; 1 - Предупредительное; 2 - Обычное.
планируется ли добавление поддержки OPC UA?Да, планируется. Сейчас основная задача это разработка Web-клиента, которого планируется завершить к концу года. После этого приступим к добавлению поддержки OPC UA. На данный момент работа с OPC UA возможна только через различные туннелеры/шлюзы, например Matrikon OPC UA Tunneller (https://www.matrikonopc.com/opc-ua/products/opc-ua-tunneller.aspx), OPC UA Client от Kepware (https://www.kepware.com/en-us/products/kepserverex/drivers/opc-ua-client/), OPC UA CLIENT от Insat (http://insat.ru/products/?category=1604).
Если Kind из таблицы сообщений в базе данных, то его номер соответствует типу сообщения: 0 - Аварийное; 1 - Предупредительное; 2 - Обычное.
При покупке нескольких копий Simple-Scada для одного предприятия, тех. поддержка оплачивается для каждой отдельно?Техподдержка осуществляется в рамках Регламента технической поддержки (https://simple-scada.com/support-reg). Доступна в течение года с момента приобретения любой версии Simple-Scada, а также при наличии действующей подписки на обновления. В течение одного года после покупки вы будете получать техподдержку и обновления Simple-Scada бесплатно. При покупке Simple-Scada можно сразу приобрести подписку на обновления на 1,2 или 3 года. Приобретать подписку для каждой версии отдельно на одном предприятии не нужно.
Здравствуйте, такое предложение- в журнале сервера пишется время подключения и отключения клиента, неплохо было бы что бы писалась еще и дата, и еще я конечно не знаю как будет организованно разделение прав, хотелось в настройках вводить список IP адресов клиентов которым можно подключаться к серверу.
Можно ли добавить отчетность как дополнительный платный модуль?Добавление такой возможности не планируется. Если требуются отчеты, то необходимо использовать версию Professional.
begin
Table1.RunSQL('SELECT * FROM `my_table`', tsAll);
end.
begin
Table1.RunSQL('SELECT * FROM `my_table`', tsAll);
Table2.RunSQL('SELECT * FROM `my_table`', tsAll);
end.
begin
Table1.RunSQL('SELECT `id`, `timestamp`, `value` FROM `my_table`', tsAll); // три колонки выводим в первую таблицу
Table2.RunSQL('SELECT `id`, `quality` FROM `my_table`', tsAll); // две колонки выводим во вторую
end.
SELECT @l_msgstring = 'Info: started login user.'
-- EXECUTE csp_writelogmessage 'LOGIN', @l_msgstring, @l_sp
SELECT DISTINCT
RCL_RAWMATBIN_ID
,RCL_BINNUMBER
,RCL_BINNAME
,(RCL_MAXVOLUME * (AR_DENSITY/0.001)) AS RCL_MAXVOLUME
,RCL_ACTUALSTOCK
,RCL_MINSTOCK
,RCL_MAXSTOCK
,AR_ARTICLECODE
,AR_NAME
,AR_UNIT
,MUN_DESCRIPTION=dbo.svfGetTranslation(
@culture
,MUN_DESCRIPTION_EN
,MUN_DESCRIPTION_NL
,MUN_DESCRIPTION_DE
,MUN_DESCRIPTION_FR
,MUN_DESCRIPTION_SP1
,MUN_DESCRIPTION_SP2
,MUN_DESCRIPTION_SP3
,MUN_DESCRIPTION_SP4
,MUN_DESCRIPTION_SP5
,MUN_DESCRIPTION_SP6
)
FROM CFG_RAWMATERIAL_BIN
INNER JOIN CFG_RAWMATERIAL ON RCL_RAWMAT_ID = RM_RAWMAT_ID
INNER JOIN CFG_ARTICLE ON RM_RAWMAT_ID = AR_ARTICLE_ID
INNER JOIN CFG_UNIT_DEVICES ON UDS_DEVICE_ID = RCL_DEVICE_ID
INNER JOIN CFG_MEASURING_UNITS ON AR_UNIT = MUN_UNIT_ID
WHERE RCL_IN_BIN_SELECTION = 1
AND RCL_MODIFYTYPE <> 'D'
ORDER BY RCL_RAWMATBIN_ID
RETURN 0
-- Error and log
SELECT @l_error = @@error
,@l_rowcount = @@rowcount
IF @l_error <> 0
BEGIN
GOTO error_section
END
Хотелось, как бы спрятать колонки которые она будет выводить в таблицу , но не исключать полностью дабы использовать в последующих операциях.deldemo, обсудим такой вариант и возможно добавим свойство видимости у колонок.
Допустим в таблице я хочу видить только три колонки, но при работе с выделенной строкой мне нужна четвертая колонка в которой есть данные для последующей работы или последующего запроса. Возможно можно добавить некий пункт в меню колонок таблицы где можно поставить "птичку" показывать или скрыть колонку.
Что касаемо обычного тега, я про это знаю. Меня интересует что делать при автозаполнении таблицы?В данном случае скада просто выполняет запрос к БД и отображает его результаты в неизменном виде. Если требуется любой нестандартный формат отображения, то нужно указывать этот формат в запросе. Например для обязательного отображения четырёх знаков после десятичной запятой можно использовать такие выборки:
Просто обрезать или добавлять знаки после запятой на стороне сервера ни есть хорошо. Это конечно не составит большого труда, но все же мне кажется это должна делать СКАДА
SELECT FORMAT(`value`, 4) AS `FormatValue` FROM `my_db`.`trends_data`;
SELECT FORMAT([Value], '0.0000') AS 'FormatValue' FROM [my_db].[dbo].[trends_data]
Автор: Simple-ScadaСпасибо большое. Это было предложение. Просто опять же повторюсь в клиенте это делать удобней. Взять хотя бы "отчеты", там форматирование запроса делается в самом приложении а не на стороне сервера SQL(то есть не в запросе) что гораздо сокращает время разработки. Еще раз спасибо !
« : Сегодня в 16:24:21 » Цитата
.....Такого, вроде, ни у кого из конкурентов нет....К большому сожалению уже есть. Компания ОВЕН, а точнее ее OPC сервер, уже отправляет сообщения через бота в телеграм.
Есть такое предложение: внедрить отправку аварийных сообщений, помимо e-mail и смс, в мессенджер Телеграм.В будущем возможно добавим. Сейчас основной приоритет у разработки web-клиента.
Цитировать2. планируется ли доступ по web-интерфесу или клиенты для ios и android. В Вашем примере с планшетом все же наименее распространенная операционная система (Win) для мобильных устройств.Да, в этом году планируем закончить разработку Web-клиента. Соответственно будет возможна работа в любых ОС. Это одна из главных задач на 2017 год. Точный срок окончания разработки трудно предсказать.
Господа разработчики а на чем будет реализован сервер для web клиентов?На Websocket.
Лицензирование будет по количеству одновременных сессий или по тэгам?Лицензирование не изменится, описание версий и цены доступны здесь (https://simple-scada.com/products). Web-клиент будет доступен только в версии Professional и он будет считаться так же как и обычные клиенты. Покупать его отдельно не потребуется. Например, в версии Professional в комплекте идут три клиента, т.е. можно будет подключиться к серверу тремя клиентами одновременно, не важно web-клиент это или обычный клиент. Если требуется больше клиентов их можно будет докупить.
Запускать проект планируется в конце февраля, начале марта. Вопрос, на сколько реальна перспектива, что к тому времени появится встроенный OPC UA Client?Сейчас активно ведется разработка Web-клиента. После его завершения можно будет приступить к добавлению OPC UA. Какие-то сроки появления OPC UA пока назвать трудно, поэтому не стоит рассчитывать на его появление в феврале.
По Web клиентам. Можно ли будет выставить приоритет рабочим компьютерам или хотя бы какому-то главному операторскому месту?Мы подумаем над этим.
Не нашел возможности скомпоновать наработки из разных проектов.Возможности переносить объекты из проекта в проект пока нет. Можно только сохранить существующий проект под другим именем, открыть его, удалить все лишнее и на его основе разрабатывать другой проект.
На форуме были только решения по перекидыванию файлов между ними, но, как я понял, это небезопасный путь.Производить какие-либо манипуляции с файлами в папке проекта нельзя. Это может привести к повреждению проекта.
Здравствуйте.Очень ждал, но -
Web-клиент будет доступен только в версии Professional
Здравствуйте, а будет ли реализована возможность просмотра значений тренда (в окне временных трендов), при при наведении курсора показывалось имя переменной и её значение в это время. Очень информативно было бы.Да, мы планируем улучшение возможностей компонента "Временные тренды" в будущем.
Нужна функция задержки (delay, sleep или pause)Возможно в будущем добавим функцию задержки. Сейчас задержки можно реализовать только с помощью таймеров или событий.
То есть любителям домашней автоматизации придется искать другую Scadу. Очень жаль. Уже привык, да и нравится....Возможность удаленного подключения к серверу (https://simple-scada.com/help/manual/client.html) скады останется как и сейчас - только через стандартный клиент скады (Client.exe).
Да и при копировании неплохо бы сделать как с дублированием переменных, т.е. добавлять цифру в конце названия объекта, а само название не менять при этом.Да, про это уже вроде была просьба.
То есть при конфигурации Windows XP SP3 - SP2 и MS SQL ваша скада будет работать в качестве сервера с архивированием данных ПК?Да, все должно работать нормально. Проверили на Windows XP SP3 + MS SQL 2008 - проблем не обнаружено.
Вы где то писали что выпуск версии под Linux планируется будет ли это версия идти как обновление или её нужно будет приобретать отдельно?
А почему у таблиц не реализована функция подтверждения действия при изменении оператором данных в ячейках. Не планируете добавить?Добавим.
Здравствуйте!Windows XP + MS SQL 2005, пол года, полет нормальный.
Simple Scada 2 последней версии или с обновлением до версии 2.2.8.0 по прежнему поддерживает MS SQL 2008?
В проекте есть окна в которых расположены кнопки без фиксации. Так вот.... Если этот проект запустить на локальной машине, то кнопки отрабатывают отлично. Но если этот же проект я запускаю на клиенте удаленной машины, то кнопки в проекте срабатывают с задержкой в пол секунды(если удерживать кнопку), иногда вообще не срабатывают. Из уточнений: Связь между "ПК Клента" и "ПК Сервера" проходит через туннель OpenVPN. Кнопки работают с битами переменной WORD.Проверьте следующее: нажимайте на кнопки и не менее чем на секунду удерживайте их нажатыми и только затем отпускайте. Всегда ли срабатывают ли в этом случае кнопки?
Добрый день, сегодня получил от оператора вопрос: а можно ли сделать панель с сообщениями шире и квитировать по нажатию на сообщение, а переход в меню со всеми видами аварий и сообщений по кнопке которая сейчас отвечает за квитирование. Я конечно же перепроверил в редакторе, но там все так же скудно по данной панели. сделать ничего нельзя. Будет ли реализована возможность изменения габаритов и т.д. у панели сообщений?Стандартная панель сообщений (как и панель страниц) не имеют каких-либо доп. опций. Если нужна уникальная панель, то можно просто выключить панель сообщений и на её месте создать свою с любой комбинацией элементов. Для вывода сообщений можно разместить компонент "Список сообщений" (https://simple-scada.com/help/manual/message-viewer.html) выбрать в нём группу "Неподтверждённые" и свойство количество задать равным "1". Также можно разместить кнопку для перехода в меню сообщений. Для этого на событие OnClick можно написать такой скрипт:
begin
GoToMessagesClient(GetClientName);
end.
Проверьте следующее: нажимайте на кнопки и не менее чем на секунду удерживайте их нажатыми и только затем отпускайте. Всегда ли срабатывают ли в этом случае кнопки?
Здравствуйте.А квитирование сообщения нажатием на него возможно сделать? самый интересный момент это квитирование нажатием по сообщению
Стандартная панель сообщений (как и панель страниц) не имеют каких-либо доп. опций. Если нужна уникальная панель, то можно просто выключить панель сообщений и на её месте создать свою с любой комбинацией элементов. Для вывода сообщений можно разместить компонент "Список сообщений" (https://simple-scada.com/help/manual/message-viewer.html) выбрать в нём группу "Неподтверждённые" и свойство количество задать равным "1". Также можно разместить кнопку для перехода в меню сообщений. Для этого на событие OnClick можно написать такой скрипт:
Аналогично можно создать кнопки для подтверждения последнего сообщения или всех сообщений, а также кнопки авторизации пользователя.
Проверил на нескольких машинах. Да, действительно, если удерживать кнопку более одной секунды она всегда срабатывает.Проблема связана с тем, что кнопка работает с битами и при быстрой смене битов "0 -> 1 -> 0" выполняются излишние оптимизации из-за чего событие OnDataChange может не выполниться. Попробуем изменить систему и добавить "задержки" на этот случай.
А квитирование сообщения нажатием на него возможно сделать? самый интересный момент это квитирование нажатием по сообщениюКонечно. Можно использовать любой компонент, не обязательно Кнопку. Создаёте компонент "Список сообщений" и на событие OnClick назначаете следующий скрипт:
begin
ConfirmMessage(GetClientName);
end.
Если ячейка таблицы не связана с переменной, то сделать запись в нее из скриптов нельзя?Сейчас запись в ячейки можно выполнить только через переменную (можно использовать внутреннюю переменную).
Если ячейка таблицы не связана с переменной, то сделать запись в нее из скриптов нельзя?Сейчас запись в ячейки можно выполнить только через переменную (можно использовать внутреннюю переменную).
Возможно ли в инструмент "Поле" добавить свойство ВыравниваниеВнесли в список на доработку.
Как в скрипте вставить в строку символ деления (÷)? Даже если я его вставляю то при запуске проекта в инструменте "Текст" вместо "÷" отображается "?"Вероятно это из-за разницы типов у строк UTF8String и String. Чтобы прибавить к тексту символ деления нужно писать так:
begin
Text1.Text := Text1.Text + UTF8Encode('÷');
end.
в редакторе добавить функцию поиска и замены.поддержу, давно хотел предложить.
п.с. ну и конечно же чтобы это действие генерировалось автоматом) как и аварийные сообщения по превышению границ. Галочку поставил и вуаля)Автоматически в данный момент реализовать нельзя, только на основе скриптов. Т.е. расположить в области страницы какой-либо элемент и менять его цвет из скрипта , если одна из аварий страницы активна. Мы планируем добавить возможность устанавливать связь между объектами и авариями и возможность их отображения на страницах, но сначала нужно решить более популярные задачи.
хочу сделать надписи на бункерах с информацией о хранимом сырьеКак вариант сейчас можно в хинте сделать.
А вот для свойств "Неподтвержденные" и "Активные" пиктограмм нет. Можно ли просто добавить в ряд после пиктограммы для звука две пиктограммы галочка/крест для этих свойств?Да, добавим иконки для этих свойств.
Можно ли добавить в режим записи архивного тренда "По изменению" запись в архив граничных значений?Пока трудно сказать, рассмотрим это вариант.
Список сообщений. Можно ли таки сделать вывод на этом элементе вывод определенной группы сообщений?Да, эта задача уже есть в списке.
Можно ли добавить для полей ввода и текста атрибут горизонтальной и вертикальной ориентации?Произвольный угол наклона текст установить нельзя. Для вертикального размещения текста разделите текст пробелами и уменьшите зону текста так, чтобы каждый символ был на новой строке (см. скрин во вложении).
Произвольный угол наклона текст установить нельзя. Для вертикального размещения текста разделите текст пробелами и уменьшите зону текста так, чтобы каждый символ был на новой строке (см. скрин во вложении).Это всё конечно хорошо для однократной фиксированной надписи, но текст (а ещё лучше если это сразу будет окно ввода) будет изменятся оператором, не объяснять же ему что пробелами разделять каждый символ.
Добавьте, пожалуйста, вывод окна "Недостаточно прав!" для кнопки, как у поля или уровня. Сейчас при нажатии на кнопку без соответствующих прав вообще ничего не происходит, что может запутать оператора.Сделаем.
Может кому пригодится - для реализации вертикального текста сделал небольшой скрипт. Оператор вводит текст в горизонтальное поле, он отображается на бункере вертикально:{}Можно ли добавить для полей ввода и текста атрибут горизонтальной и вертикальной ориентации?Произвольный угол наклона текст установить нельзя. Для вертикального размещения текста разделите текст пробелами и уменьшите зону текста так, чтобы каждый символ был на новой строке (см. скрин во вложении).
var
Str: UTF8String;
obj: TM_Text;
i: Integer;
l: Integer;
begin
With Sender as TM_Field do
begin
obj := GetTextByName('Name_'+IntToStr(Tag)); //Поиск объекта Текст по свойству поля "Тег" для записи результата
Str := Text; //Запись значения поля в переменную
end;
l := UTF8Length(Str); //Вычисление длины строки
for i:=2 to l+(l-1) do //Цикл вставки пробелов после каждого символа
begin
UTF8Insert(' ',Str,i);
i:=i+1;
end;
obj.Text := Str; //Запись результата в нужный объект Текст
end.
var
aQuery: string;
begin
aQuery := 'INSERT IGNORE INTO `new_table` (`time`, `post_1`) ' +
'VALUES (NOW(), ' + QuotedStr( post_1.AsStr) + ')';
RunSQL(aQuery, nil, 0);
end.
Я правильно понимаю, что эта идея нереализуема в демо64?Здравствуйте. Да, Вы все правильно поняли. Для работы с БД Вам необходимо приобрести лицензию или воспользоватся Demo-Time (https://simple-scada.com/download-simple-scada) версией.
А есть ли в планах реализация фильтра OPC-тегов по имени в окне импорта OPC-тегов?А для чего фильтровать переменные при импорте тегов? Можно просто импортировать все переменные. Те, которые уже существуют не будут добавлены повторно, а новые будут добавлены. Или Вы говорите про экспорт (из скады в .csv-файл) в CSV?
Так же было бы неплохо осущестлвять проверку, существует ли импортируемый тег в БД или нет.Такая функция не планируется.
А для чего фильтровать переменные при импорте тегов? Можно просто импортировать все переменные. Те, которые уже существуют не будут добавлены повторно, а новые будут добавлены.Бывают случаи, когда необходимо добавить пару OPC-тегов, но все теги, которые имеются в OPC-сервере, в проекте не нужны. А когда тегов в OPC-сервере несколько тысяч, и они отсортированы не по алфавиту, поиск необходимого тега занимает очень много времени.
Можно ли добавить форматированный ввод/вывод в ячейку таблицы...Да, добавим свойство формат для ячеек таблицы.
А когда тегов в OPC-сервере несколько тысяч, и они отсортированы не по алфавиту, поиск необходимого тега занимает очень много времени.Обычно переменные разбивают на группы и подгруппы на OPC-сервере для удобства навигации по тегам, чтобы они не были все в куче. В будущем возможно добавим дополнительный фильтр по OPC-переменным.
В будущем возможно добавим дополнительный фильтр по OPC-переменным.Спасибо, было бы удобно!
Можно просто импортировать все переменные. Те, которые уже существуют не будут добавлены повторно, а новые будут добавлены.При импорте с OPC-сервера уже существующих тегов происходит дублирование переменных. Или речь была про импорт из csv-файла?
Или речь была про импорт из csv-файла?Да, мы говорили про импорт из .csv-файла.
На 27" мониторе страница с разрешением 16:9 > 1920х1080 не помещается в видимой области редактораИспользуйте клавиши W, A, S, D для перемещения области редактирования. Либо нажмите колесико мыши и удерживая его перемещайте курсор. Подробнее о горячих клавишах и комбинациях клавиш смотрите здесь (https://simple-scada.com/help/manual/hot-keys.html).
Я пока вижу только один, вариант, это переводить наш парсер для работы с MySQL.Да, возможен только такой вариант.
означает ли это, что SIMPLE-SCADA 1.3.3 не умеет работать с MySQL ?Simple-Scada 1.3.3 не может работать с базами данных. Данные архивируются в ней в свои файлы и доступны только для вывода в тренды. Simple-Scada 2 может работать с СУБД MySQL и SQL Server. Работать с данными из БД можно через скрипты, используя процедуру RunSQL (https://simple-scada.com/help/script/workbd.html). Примеры работы с БД можно найти здесь (https://simple-scada.com/help/script/dbscripts.html). Процедура RunSQL доступна только в версиях Standard, Professional и Demo-Time.
begin
vrGroup1.Value := 1;
vrGroup2.Value := 2;
vrGroup3.Value := 4;
..
end.
var
I: Integer;
aVar: TM_Variable;
begin
for I := 1 to 3 do
begin
aVar := GetVariableByName('vrGroup' + IntToStr(I));
if aVar <> nil then
AddMessageToGroup(Now, mkMessage, aVar.AsInt64, 'Текст', True, False);
end;
end.
var
aVar: TM_Variable;
begin
{ получаем переменную с ID группы для третьего прибора }
aVar := GetVariableByName('vrGroup3');
if aVar <> nil then
AddMessageToGroup(Now, mkMessage, aVar.AsInt64, 'Текст', True, False);
end.
Добавить можно, но будет ли пользоваться этой функцией кто-то ещё.Я не знаю, за других гадать не буду.
...Добавить процедуру выдающую ID группы по номеру ее позиции...Тогда уж лучше по названию.
Предложение№4. Разработайте функцию архивирования проекта и все, что в него входит картинки, логи, звуки. Но это предложение возникло месяца 2 назад. И на форуме читал вроде Вы над этим уже работаете. Если моно просто потвержите да/нет.Начиная с версии 2.2.9.0 во время установки Simple-Scada пользователь задаёт два пути: для системных файлов (обычно "C:\Program Files\") и для пользовательских (обычно папка "Мои документы"). После установки на рабочем столе создается ярлык указывающий на папку пользовательских файлов. В этой папке хранятся все несистемные файлы скады: проекты, отчеты, пользовательские изображения/звуки/файлы импорта переменных и т.д. Для создания резервной копии достаточно просто скопировать (или архивировать) всё содержимое этой папки.
Предложение№5. При удалении тренда из группы довольно часто вылетает проект с ошибкой записи в память для чтения.Удалось повторить вылет редактора при удалении группы трендов. Исправили. В ближайшем обновлении ошибки не будет.
Вопрос №1. Свойства кнопки перепутаны надписи?Нет. Первое состояние называется "Отпущена" и после запуска проекта кнопка находится в этом состоянии. При нажатии на кнопку выполняется переход ко второму состоянию "Нажата" и т.д.
Вопрос №2. В хелпе в описании команды SetBit написан тип int64, в эдиторе описание longint (хотя logint = int64). Наверное это опечатка?Спасибо. Исправим. Используется тип int64.
Цитировать
Вопрос №1. Свойства кнопки перепутаны надписи?
Нет. Первое состояние называется "Отпущена" и после запуска проекта кнопка находится в этом состоянии. При нажатии на кнопку выполняется переход ко второму состоянию "Нажата" и т.д.
Добрый день. OPC считывает слово (Word) - оно используется как битовая маска состояния насосов. Как можно вытащить отдельный бит во внутренний тэг формата BOOL или побитно обратиться к переменной?вроде и сами понимаете что нужно делать), однако вариант быть может проще -
Добрый день. OPC считывает слово (Word) - оно используется как битовая маска состояния насосов. Как можно вытащить отдельный бит во внутренний тэг формата BOOL или побитно обратиться к переменной?С помощью функции GetBit (https://simple-scada.com/help/script/getbit.html).
Будет ли в ближайших обновлениях добавлена функция экспорта/импорта событий в csv? Так было бы куда удобнее редактировать большое количество однотипных событий.Импорт/экспорт объектов, мнемосхем, скриптов, сообщений и трендов это одна из популярных задача. Но сначала добавим просмотр архивных трендов в web, т.к. это более популярная задача. Затем начнем реализацию импорта/экспорта.
OPC считывает слово (Word) - оно используется как битовая маска состояния насосов. Как можно вытащить отдельный бит во внутренний тэг формата BOOL или побитно обратиться к переменной?Например:
begin
// извлекаем первый бит из myWordVar
myBoolVar.Value := GetBit(myWordVar.Value, 0);
end.
Далее пользователь кликает на графический объект и выводится подробная информация по этой точке замера.Здравствуйте. Какая именно информация? Примитивы связаны с какими-то переменными и нужно вывести текущие значения этих переменных? Или какая-то информация хранится в БД и нужно получить её?
var
aShape: TM_Shape;
begin
{ если объект по которому кликнул пользователь является фигурой (TM_Shape) }
if Sender is TM_Shape then
begin
{ здесь мы можем работать с любыми свойствами объекта. Например
можно вывести имя фигуры }
ShowMessageAll('Информация', 'Пользователь кликнул объект с именем ' + TM_Shape(Sender).Name);
end;
end.
Пароль на проект - максимальный уровень защиты?Да, но при желании можно избавиться от некомпилированных файлов используя способ описанный pan2000.
есть ли возможность выдавать скриптами команды в com-порт? м быть не напрямую.Здравствуйте. Сейчас нельзя работать с COM-портами из скады.
Это значит, что у Вас нет дополнительных клиентов. Поэтому к серверу скады Вы сможете подключиться максимум с трёх разных клиентов, т.к. в версию Professional входит три клиента.
Здравствуйте! Есть ПЛК, который мониторит объект и пишет в базу (mysql or sqlite) необходимые параметры. Скорость течения процессов - очень маленькая. При потере связи между скадой и плк (пару дней, недель) необходимо "синронизировать" базы в ПЛК и скаде, чтобы на трендах не было "провалов". Как это лучше сделать?Заполнить тренды скады, используя тренды в ПЛК не получится. В скаде они имеют один формат и записываются в несколько слоев, а на ПЛК другой формат и один слой.
Если я буду формировать базу из скриптов, то тренды к этой БД вообще никак не подключить? Скриптами нельзя дописать данные в таблицы trends_data, trends_day, trends_hour, trends_minute?Здравствуйте! Есть ПЛК, который мониторит объект и пишет в базу (mysql or sqlite) необходимые параметры. Скорость течения процессов - очень маленькая. При потере связи между скадой и плк (пару дней, недель) необходимо "синронизировать" базы в ПЛК и скаде, чтобы на трендах не было "провалов". Как это лучше сделать?Заполнить тренды скады, используя тренды в ПЛК не получится. В скаде они имеют один формат и записываются в несколько слоев, а на ПЛК другой формат и один слой.
Скриптами нельзя дописать данные в таблицы trends_data, trends_day, trends_hour, trends_minute?В теории это возможно. С помощью простых SQL-запросов Вы можете заполнить таблицы трендов. Но правильно их заполнить будет сложно. В таблицах слоёв данные должны быть прорежены (trends_day, trends_hour, trends_minute). В основном слое (trends_data) должны быть все данные. Также точка разрыва в тренде должна иметь качество равное 3. А первая точка после разрыва качество равное 2. И последнее, каждый график должен соответствовать ID какой-либо переменной, без привязки к переменной график вывести не получится. Если у Вас получится заполнить данные таблицы таким образом, используя пользовательские SQL-запросы, или через любое стороннее ПО, то графики можно будет просмотреть.
Последний момент - данные в базе должны быть выровнены по дате?Нет, в таблицах трендов столбец времени включен в индекс, поэтому СУБД сама будет сортировать данные по времени. Это же касается и столбца ID.
begin
if Sender is TM_Valve then // проверяем, что Sender это заслонка
with Sender as TM_Valve do // приводим Sender к типу "TM_Valve"
{ если бит доп. переменной(с номером = свойству "Тэг") заслонки равен TRUE, то изменяем цвет заслонки }
if GetBit(VariableEx.AsInt, Tag) = TRUE then
Color := clGreen
else
Color := clGray;
end.
Можна работать с этим:Да, можно, но мы бы рекомендовали не меньше 2 GB RAM.
В связке с DameWare Mini Remote Control может не работать?Возможно, зависит от того, как DameWare перехватывает события кликов мышью. Тестировали пока только с TeamViewer, с ним проблем не возникало. Есть возможность временно отключить DameWare и проверить проходят ли клики?
Ходил по месту, то же самое. Не активны все кнопки. Может проблема с win10?Проверили на Win 10 с установленной DameWare - все работает без проблем. В предыдущем сообщении Вы писали, что на ПК используется большой монитор - возможно на данном ПК установлено ПО для разделения экрана на несколько частей, которое может влиять на координаты окна скады. Либо установлено какое-то другое ПО перехватывающее клики мыши или влияющее на позиционирование окна скады.
Принципиально ли копировать только папку с картинками вместе с папкой проект?Если Вы говорите о копировании на ПК-клиент, то при добавлении в проект новых изображений их нужно скопировать на ПК-клиенты в папку "\Simple-Scada\Pictures" или целиком скопировать папку "Pictures" с сервера на клиенты. При этом, папку с проектом копировать на клиенты не требуется. Если Вы ведете разработку проекта на одном ПК, а затем переносите его на ПК-сервер, то необходимо копировать на ПК-сервер папку с проектом и папку "Pictures".
Если прописать какой-нибудь скрипт на событие OnClik, то при нажатии кнопки мыши по полю этот скрипт выполнится один раз. Если еще раз нажать по этому полю, то скрипт больше не выполнится, пока поле не потеряет фокус и снова не получит его.Верно, когда ввод уже начат, клики в поле будут работать на установку позиции курсора в текст. Возможно стоит разместить рядом с Полем другой компонент, например Кнопку и выполнять скрипт по клику на кнопку.
Если "Поле" TM_Field используется только для вывода значения переменной, то я перевожу свойство "Доступен" в false, чтобы пользователь случайно не изменил его, но при этом у поля перестают работать скрипты по событию (OnClick к примеру).В ближайшем обновлении для решения этой проблемы добавим компоненту Поле отдельное свойство "Разрешить ввод". Тогда можно будет оставить компонент доступным, но ввод запретить. Т.е. скрипты по клику будут выполняться всегда, но ввод будет запрещён.
Верно, когда ввод уже начат, клики в поле будут работать на установку позиции курсора в текст. Возможно стоит разместить рядом с Полем другой компонент, например Кнопку и выполнять скрипт по клику на кнопку.Кнопка мне не пойдет, потому что по нажатию мне нужно менять цвет рамки Поля используя Sender. Но, учитывая следующее:
В ближайшем обновлении для решения этой проблемы добавим компоненту Поле отдельное свойство "Разрешить ввод". Тогда можно будет оставить компонент доступным, но ввод запретить. Т.е. скрипты по клику будут выполняться всегда, но ввод будет запрещён.
Скажите пожалуйста, есть ли возможность в данной скаде регистрировать фазы работы установок, как например польской скаде ASIX. Фото прилагаю.Для получения ступенчатого графика можно у необходимой переменной на вкладке "Архив (https://simple-scada.com/help/manual/index.html?variable-new.html#var_archive)" включить архивацию и установить свойство "Тип отрисовки тренда" -> "Ступенчатый". В этом случае тренд будет отрисовываться как у Вас на скриншоте. При этом, описания стадий размещенные у Вас на скриншоте слева и справа отобразить в области просмотра трендов не получится.
Есть ли здесь возможность создать свой элемент чтобы и у него были все настройки как у встроенных, например заслонка. Пока я смог сделать так - два отдельных .ПНЖ рисунка, наложить один на другого и скрывать один из них по "ОНДатаЧейнж"Возможности создать свой элемент нет. В Вашем случае проще использовать одно изображение с несколькими кадрами(пример во вложении), при помощи утилиты Pictures.exe (https://simple-scada.com/help/manual/pictures.html) разбить его на кадры и по событию OnDataChange менять кадр изображения, например:
begin
if Sender is TM_Image then // проверяем, что Sender это изображение
with Sender as TM_Image do // приводим Sender к типу "TM_Image"
{ если значение переменной (в виде целого числа),
которая связана с изображением равно 1, то }
if AsInt = 1 then
Frame := 1 // показать первый кадр изображения
else // иначе
Frame := 2; // показать второй кадр изображения
end.
Как будет вести себя повторное событие OnClick по Полю, у которого будет отключено свойство "Разрешить ввод"? Ведь позицию курсора в поле уже не нужно будет менять.При отключенном свойстве "Разрешить ввод" скрипты по клику будут выполняться всегда, но ввод будет запрещён.
При отключенном свойстве "Разрешить ввод" скрипты по клику будут выполняться всегда, но ввод будет запрещён.Спасибо, это то, что нужно.
Здравствуйте. Скажите пожалуйста, есть ли возможность в данной скаде регистрировать фазы работы установок, как например польской скаде ASIX. Фото прилагаю.Вот что у меня получилось. Я взял элемент "временные тренды" , растянул шкалу так, что число в переменной тренда соответствует фазе или операции (тех. процесса) а по бокам соотв. текст с самими фазами роботы.
возможно ли с помощью элемента "календарь" просматривать историю не переключаясь на тренды (Alt + T), а оставаясь в данном окне с растянутым элементом "временные тренды"?Нет. Компонент "Временные тренды" предназначен для просмотра временных трендов с интервалом времени не более 1 часа. Просматривать архивные тренды через него нельзя.
Если нет такой возможности, то может быть такое реализовано в новых версиях СКАДы или какую альтернативу можно придумать, чтобы выйти с положения на данный моментПросматривать архивные тренды сейчас можно только через меню просмотра трендов (https://simple-scada.com/help/manual/client-trends-view.html). Для получения ступенчатого графика можно у необходимой переменной на вкладке "Архив" включить архивацию и установить свойство "Тип отрисовки тренда" -> "Ступенчатый". В этом случае архивный тренд будет отрисовываться как у Вас на скриншоте. При этом, описания стадий размещенные у Вас на скриншоте слева и справа отобразить в области просмотра трендов (https://simple-scada.com/help/manual/client-trends-view.html) не получится. Для решения Вашей задачи нужен отдельный компонент "Архивный тренд", который будет брать данные из БД. Мы планируем добавить такой компонент, но когда он появится сказать сложно - сейчас решаются более востребованные задачи.
А форму отрисовки я выбрал ступенчатую, но она немного трапециевидная.Свойства переменной на вкладке "Архив (https://simple-scada.com/help/manual/index.html?variable-new.html#var_archive)" не влияют на отображение временных трендов. Они действуют только на архивные тренды. Если Вы добавите архивный тренд (https://simple-scada.com/help/manual/editor-trends.html) по переменной, у которой свойство "Тип отрисовки тренда" -> "Ступенчатый", то при просмотре трендов (https://simple-scada.com/help/manual/client-trends-view.html) он будет отображаться ступенчато, как на Вашем скриншоте.
А может действительно дело в opc, и далеко не все могут отдавать данные с такой скоростью.Здесь дело в чем-то другом. Если в OPC-сервере можно задать частоту опроса 50 мс., значит он может отдавать данные с этой скоростью, иначе зачем нужна эта частота. Совсем не ясно что можно предложить для решения проблемы, т.к. частота опроса определяется только настройками частоты в окне редактирования переменной и в меню настройки проекта. У Вас эти переменные опрашиваются только одним проектом? Может быть есть ещё один проект в котором эти переменные опрашиваются с другой частотой?
Здравствуйте. Скажите пожалуйста, есть ли возможность в данной скаде регистрировать фазы работы установок, как например польской скаде ASIX. Фото прилагаю.Вот что у меня получилось. Я взял элемент "временные тренды" , растянул шкалу так, что число в переменной тренда соответствует фазе или операции (тех. процесса) а по бокам соотв. текст с самими фазами роботы.
Вопрос: возможно ли с помощью элемента "календарь" просматривать историю не переключаясь на тренды (Alt + T), а оставаясь в данном окне с растянутым элементом "временные тренды"? Если нет такой возможности, то может быть такое реализовано в новых версиях СКАДы или какую альтернативу можно придумать, чтобы выйти с положения на данный момент? Спасибо.
А форму отрисовки я выбрал ступенчатую, но она немного трапециевидная.
begin
GoToTrendsClient(GetClientName);
end.
Не понимаю куда "прикрутить" имя/название тренда.Через скрипты перейти к просмотру тренда по его имени или ID нельзя. Процедура GoToTrendsClient (https://simple-scada.com/help/script/gototrendsclient.html) предназначена для перехода в меню трендов на заданном клиенте. Если нужно перейти в определенную группу трендов, то можно использовать процедуру GoToTrendsGroupClient (https://simple-scada.com/help/script/gototrendsgroupclient.html), которая позволяет перейти в меню трендов к заданной группе.
есть ли возможность запретить закрытие работающего клиентаМожно изменить сочетание клавиш для выхода - см. опцию "Комбинация клавиш для выхода (https://simple-scada.com/help/manual/index.html?settings-simple-client.html#qcontrol)" в Options.exe на вкладке "Simple-Client".
как можно скопировать/экспортировать страницу с одного проекта в другойТакой возможности пока нет - в будущем планируем добавить. Сейчас можно только сохранить проект под другим именем и удалить из него все лишнее.
begin
if Sender is TM_Image then
with Sender as TM_Image do
if AsInt = 1 then
Frame := 3
else
Frame := 1;
end.
begin
if Sender is TM_Image then
with Sender as TM_Image do
if AsInt = 1 then
Frame := 1
else
Frame := 2;
end.
var
wbit_run: Boolean;
wbit_err: Boolean;
obj: TM_Image;
i: Integer;
begin
for i:=0 to 15 do // обрабатываем все клапана в проекте, например 16 штук
begin
wbit_err := GetBit(ErrValve.Value,i);
wbit_run := GetBit(RunValve.Value,i);
obj := GetImageByName('valve_'+IntToStr(i));
if obj <> nil then
if wbit_err = FALSE then
if wbit_run = TRUE then obj.Frame := 2
else obj.Frame := 1
else obj.Frame := 3;
end;
Вообщем я разобрался почему у меня не получалось сделать аним. картинку, ошибка в программе Pictures.exe. Попробуйте создать несколько разных анимашек подряд, а будет работать правильно лишь первая.Создали несколько анимированных изображений подряд - все работает корректно. Убедитесь, что для каждого нового изображения Вы не забываете установить необходимое кол-во кадров по ширине/высоте и нажать кнопку "Сохранить". Если есть возможность, пришлите видео Вашего процесса создания анимации.
Проблема: когда дополн. переменная в состоянии "1", то включается третий кадр, а когда переходит в "0" то картинка не меняется.В обоих скриптах Вы работаете со значением основной переменной, а в скрипте по OnDataChangeEx Вам нужно проверять значение доп. переменной(свойство VariableEx (https://simple-scada.com/help/script/variableex.html)). Правильный скрипт будет таким:
begin
if Sender is TM_Image then
with Sender as TM_Image do
if VariableEx.AsInt = 1 then
Frame := 3
else
Frame := 1;
end.
kolya_asu, предлагаю тебе сделать вариант который использую во всех проектах.Спасибо Вам Timofei и модераторам форума за помощь. Ваш вариант попробую позже. Второй вариант заработал! Только вот дошел до одного исполнительного устройства у которого авария (третий кадр) вызывается по двум разным переменным, а дополнительная переменная то одна!
Только вот дошел до одного исполнительного устройства у которого авария (третий кадр) вызывается по двум разным переменным, а дополнительная переменная то одна!Опять же Вам лучше в таком случае использовать один общий скрипт с типом "Изменились переменные" чем много скриптов OnDataChange для каждого объекта.
Мне, далекому пока что от Делфи, пришла идея выйти из положения так: создать еще один внутр. тег и вписать его в поле дополнительная переменная и связать его с логическим "или" двух переменных которые вызывают аварийное сообщение.
if (err1 = FALSE) && (err2 = FALSE) then // Если обе булевых аварии 0, клапан открыт или закрыт
if open1 = TRUE then valve_1.Frame := 2
else valve_1.Frame := 1
else valve_1.Frame := 3;
Только вот дошел до одного исполнительного устройства у которого авария (третий кадр) вызывается по двум разным переменным, а дополнительная переменная то одна!Если требуется отображать общую аварию исполнительного устройства, то оптимальным вариантом было бы создать на контроллере переменную общей аварии и использовать ее в скаде. Например, создать Bool переменную и записывать в нее 1 если имеется какая-либо авария или использовать целочисленную переменную, каждое значение которой будет соответствовать состоянию исполнительного устройства(к примеру: 0 - остановка, 1 - работа, 2,3 - аварийные состояния). Если возможности сделать это на контроллере нет, то можно создать скрипт по событию "Изменились переменные (https://simple-scada.com/help/script/changemulvar.html)", добавить в него необходимые переменные аварий и записывать результат в отдельную внутреннюю переменную общей аварии:
begin
CommAlm.Value := (aVar1.AsBool) or (aVar2.AsBool);
end.
Еще вопрос, посоветуйте мне пожалуйста хорошую, проверенную книгу(и) с примерами хорошо бы, возможно есть видео уроки для "чайников". Т.к. литературы много разной, а хочется начать с проверенных источников для быстрого освоения Симпл Скада.Для того, чтобы использовать скрипты не обязательно изучать Delphi. В скриптах Simple-Scada в основном используются готовые процедуры, функции и свойства объектов описанные в руководстве по скриптам (https://simple-scada.com/help/script/script-editor.html). Обо всех командах и операторах присущих языкам Pascal/Delphi можно прочесть в интернете на сайтах связанных с языками Pascal/Delphi. Например, описание типов данных (http://www.delphibasics.ru/1Types.php) и ключевые слова (http://www.delphibasics.ru/1Keywords.php).
Еще такой вопрос. В СКАДЕ есть такая возможность, чтобы по состоянию переменной можно было бы останавливать, присваивать определенное значение или скрывать какой-либо тренд?Если нужно записать значение одной переменной в другую, то можно использовать свойство переменной "Value (https://simple-scada.com/help/script/varvalue.html)". Чтобы скрыть временный тренд (https://simple-scada.com/help/manual/time-trends.html) нужно использовать свойство "Visible (https://simple-scada.com/help/script/ttvisible.html)". Другие доступные из скриптов свойства компонента "Временный тренд" можно найти по ссылке (https://simple-scada.com/help/script/tmtimetrendviewer.html). Архивные тренды нельзя скрывать из скриптов.
Добавить к подписи поля свойство шрифт, которое изменяется независимо от шрифта самого поля, т.к. иногда нужно сделать цифры чуть крупнее чем подпись.Добавление свойств плохо сказывается на производительности, а именно на скорости загрузки/сохранения проекта и компиляции скриптов, поэтому мы стараемся использовать как можно меньшее кол-во свойств. Вы можете разместить вместо подписи компонент Текст с произвольным шрифтом для решения этой задачи.
2. Наверное уже писали, хотелось бы иметь возможность рисовать диагональные линии или поворачивать нарисованные.Эти пункты постараемся реализовать по мере выхода обновлений.
3. Добавить объект "Окно диагностики", что-то вроде консоли, в который будут писаться ошибки с сервера и можно из скриптов писать сообщения как уже реализована запись в логи. Реально было бы удобно при отладке сразу видеть что скрипт не работает из-за ошибки и выводить какие-то промежуточные данные в это окно.
4. Если это возможно, сделать поиск использования переменных и объектов проекта по всем скриптам со ссылками на их использование.
5. Изменить стандартную шкалу переменных по-умолчанию на -4294967296..4294967295, потому что при попытке записать в переменную из скрипта число более 100 (особенно при работе с битами), туда записывается 100 и, если значение никуда не выводится, это происходит неочевидно.Этого точно не будет, так как тренды, временные тренды и уровни зависят от шкалы и при шкале -4294967296..4294967295 практически любой тренд будет прямой линией, а менять значение через компонент Уровень станет сложно, перетягивание его на один пиксель приведёт к огромному приращению. Кроме этого нет никаких ограничений на запись значения через скрипты. Напишите пример кода при котором не удаётся присвоить значение более 100. Вот пример присвоения из скриптов:
myVar.Value := 150;
6. Добавить возможность скрывать не только всю панель страниц, но и отдельные вкладки панели, т.к. когда страниц много, они накладываются друг на друга, а переход на них хочется реализовать только через GotoPage(), но при этом иметь возможность открывать основные страницы кликом. Конечно можно сделать кнопками основные вкладки, а панель скрыть, но если не сложно хотелось бы видеть такую схему.Сейчас скрывать страницы/подстраницы можно для отдельных пользователей (https://simple-scada.com/help/manual/editor-users.html). Т.е. можно сделать так, что один пользователь будет видеть одни страницы, а другой пользователь - другие. Также можно скрыть панель страниц и разместить вместо неё кнопки со скриптами перехода и при необходимости скрывать их через скрипты, например: myButton.Visible := False;
И еще вопрос, может быть все таки есть какой-то способ вывести информацию о значениях тренда в каком-либо месте?Все доступные возможности просмотра трендов описаны здесь (https://simple-scada.com/help/manual/client-trends-view.html). В указанной Вами на скриншоте области отображаются значения трендов согласно положению визира в области просмотра трендов. Добавить какую-либо другую информацию или объекты в меню просмотра трендов нельзя.
поддержка HDAТакже жду этого функционала.
Напишите пример кода при котором не удаётся присвоить значение более 100. Вот пример присвоения из скриптов:С внутренними переменными работает, а вот с переменными с ОРС нет. Вот пример - на экране окно вывода связанное с переменной Tag1, которая является внешней - тип int64, шкала 0..100. Также на экране четыре фигуры со свойствами "Тэг" равными 3,8,12 и 15. На событие Onclick этих фигур написан следующий скрипт:Код: (delphi)Запишет значение 150 в переменную myVar, даже если у неё шкала 0..100.myVar.Value := 150;
Tag1.Value := InverseBit(Tag1.Value,Sender.Tag);
Примерно два года назад Вы писали, что поддержка HDA пока не планируется. Что-то изменилось за это время? Стоит ждать? :)Здравствуйте. Мы добавили поддержку HDA в список на разработку, но трудно сказать когда именно дойдём до реализации.
С внутренними переменными работает, а вот с переменными с ОРС нет.Уберём ограничение на присваивание из скриптов для внешних переменных. Этого ограничения быть не должно, видимо по ошибке добавили его в одном из обновлений.
Здравствуйте, можно ли подтянуть проекты одному клиенту из разных серверов, что бы были в списке не набирая IP адреса серверов.Здравствуйте. Так сделать нельзя. Можно создать на рабочем столе два отдельных ярлыка в каждом из которых указать свой сервер. IP-адрес сервера и порт указываются в параметрах ярлыка клиента. Также можно указать проект который нужно запустить с этого ярлыка, например: "C:\Program Files (x86)\Simple-Scada 2\Client.exe" -192.168.1.44 -8750 -"Demo-проект".
И как открыть EDITOR в полно-экранном режиме не на главном мониторе, а на втором мониторе?Сейчас редактор всегда запускается на мониторе, который в ОС является основным. Поэтому можно только сделать второй монитор основным, чтобы окно редактора отображалось на нём.
Сейчас редактор всегда запускается на мониторе, который в ОС является основным. Поэтому можно только сделать второй монитор основным, чтобы окно редактора отображалось на нём.На данный момент так и делаю. Но немного не удобно так как постоянно нужно сворачивать приложение что бы пользоваться другими приложениями((((
Здравствуйте. Заметил такую вещь, если выбираю свечение лампочки ярко желтым цветом clYellow($FFFF00), то при анимации цвет всегда темнее. С красным и зеленым также!? Скажите пожалуйста в чем может быть причина?Скорее всего стоит Прозрачность не 255.
begin
if Sender is TM_Image then //
with Sender as TM_Image do //
if AsInt = 1 then
Frame := 2 //
else //
Frame := 1; //
end.
begin
if Sender is TM_Image then //
with Sender as TM_Image do //
if VariableEx.AsInt = 1 then
EXIT
if AsInt = 1 then
Frame := 2 //
else //
Frame := 1; //
end.
Попробовал с фигурой - не получается заставить светиться фоновым цветом, отображается черная дыра - желтый!Не понятно, что именно не получается и что в Вашем понимании означает "отображается черная дыра - желтый"? Пример проекта с изменением цвета и миганием для объекта "Фигура" во вложении. Запустите его, посмотрите, затем откройте через редактор и посмотрите скрипты. Примеры других скриптов для изменения цвета или мигания можно найти по ссылке (https://simple-scada.com/help/script/sample-scripts.html).
Еще... смотрел ваши проекты и мне понравились рисунки на мнемосхемах. В какой программе Вы их создаете?Это проекты, которые пользователи присылают и выкладывают самостоятельно, поэтому нам не известно какие графические редакторы использовались при создании проекта. Для создания изображений и анимации подойдет любой графический редактор поддерживающий работу с ".png" изображениями, например PaintNET, Gimp, Photoshop и т.д.
begin
if Sender is TM_Shape then // проверяем, что Sender это изображение
with Sender as TM_Shape do // приводим Sender к типу "TM_Image"
{ если значение переменной (в виде целого числа),
которая связана с изображением равно 1, то }
begin
FlashColor := clNone;
case VariableEx.AsInt of // если значение переменной равно:
1:
begin
Color := clSilver;
FlashColor := clYellow; // включить мигание зеленым цветом
end;
end;
end;
end.
begin
if Sender is TM_Image then //
with Sender as TM_Image do //
if VariableEx.AsInt = 1 then
EXIT
if AsInt = 1 then
Frame := 2 //
else //
Frame := 1; //
end.
begin
if Sender is TM_Image then //
with Sender as TM_Image do //
if VariableEx.AsInt <> 1 then
if AsInt = 1 then
Frame := 2 //
else //
Frame := 1; //
end.
begin
if Sender is TM_Image then // проверяем, что Sender это изображение
with Sender as TM_Image do // приводим Sender к типу "TM_Image"
if VariableEx.AsInt = 1 then
Frame := 3 // показать 3-й кадр изображения
else
Frame := 1 // показать 1-й кадр изображения
end.
Frame := 1 // показать 1-й кадр изображения
begin
if Sender is TM_Image then // проверяем, что Sender это изображение
with Sender as TM_Image do // приводим Sender к типу "TM_Image"
if VariableEx.AsInt = 1 then Frame := 3; // показать 3-й кадр изображения
end.
Но когда переменная ЕХ переходит обратно в "0" то она всегда переводит картинку в кадр№1,Правильно, т.к. выполняется скрипт OnDataChangeEx по изменению доп. переменной.
хотя в данный момент основная переменная уже находилась в "1" и должен отображаться кадр №2.Скрипт OnDataChange по основной переменной выполнится только при ее изменении, а так как она не изменилась, скрипт не выполнился и кадр не сменился на второй.
begin
if Sender is TM_Image then
with Sender as TM_Image do
if VariableEx.AsInt <> 1 then
if AsInt = 1 then
Frame := 1
else
Frame := 2
else
Frame := 3;
end.
Что это значит : max 72 ?Это максимальное количество изменений тегов в секунду.
Пожалуйста, пришлите мне пример на emoxristov@abv.bgПример отправили.
Здравствуйте.
Необходимо, чтобы GSM-модем поддерживал работу через COM. После установки драйверов модем должен определяться в диспетчере устройств как COM-порт (возможно эмулировать COM-порт). Если модем может принимать и выполнять AT-команды через COM-порт, то отправка SMS выполнится успешно.
...но было бы наверное очень здорово чтобы на базе появившегося web-сервера появился бы и какой нибудь API.В ближайшем будущем API не появится, слишком много других популярных вопросов.
Вопрос к данному сообщению: а если на той стороне ModBus Slave устройство подключенное к удаленному модему тоже через COM порт то с ним сервер может установить соединение (дозвон) и далее запустить через это соединение обмен используя драйвер ModBus RTU ? Канал связи CSD, не путать с вариантом когда используется интернет и с обеих сторон GSM роутеры, именно дозвон, коннект и обмен через организованный таким образом COM портСкада может работать с GSM-модемом только через COM-порт на том ПК, на котором установлен сервер скады. Также чтение/запись переменных по Modbus или другим протоколам должны выполняться через соответствующий OPC-DA / OPC-UA сервер.
Так как организован опрос приборов в системах учета типа ЛЭРС или подобные
var
A, B: Integer;
begin
(*
A := 1;
B := A + 100;
*)
end.
Чего-либо нового я не заметилПоследнее обновление практически не содержит визуальных изменений. Полный список изменений описан здесь (https://simple-scada.com/forum/index.php?topic=178.msg6816#msg6816).
Можно ли как-то откатиться на предыдущий релиз?Если вы делали резервную копию проекта перед обновлением, то достаточно установить пред. версию скады и поместить резервную копию проекта в папку "Projects\". Если резервную копию не делали, то вышлите проект на почту поддержки, мы откатим его вручную.
Касаемо работы клиентов были сделаны незначительные изменения. Вы уверены что клиент стал "тормозить" из-за обновления, а не из-за других причин (изменения в проекте / изменения в работе клиентского ПК или ОС / влияние стороннего ПО)?Существенных изменений в проекте не было, в работе ПК и ОС также. Только обновление версии Simple-Scada.
Здравствуйте. Извините за задержку с ответом. Можно добавлять значения введённые оператором в БД, а затем отображать все значения на мнемосхеме в компоненте Таблица. Пример с записью в БД и выводом в таблицу подробно описан здесь (https://simple-scada.com/help/script/dbreciepes.html) на примере рецептов.
1. Удаление проекта. Я являюсь разработчиком проекта и часто бывает, что создаю тестовые проекты, которые периодически приходится их удалять. Как я понял, удаление проектов возможно только в ручную из папки с проектами. Возможно ли добавить кнопку в редакторе "удалить проект"?После вызова меню "Проект" - "Открыть" (https://simple-scada.com/help/manual/menu-project.html) (или "Сохранить как..."), в открывшемся окне напротив каждого проекта отображается кнопка удаления.
2. Импорт/экспорт проектов.Обязательно добавим импорт/экспорт, это востребованная задача.
3. Возможность выбора папки с проектами.Сейчас системная часть скады и часть с пользовательскими файлами отделены друг от друга и задаются во время установки. Системную часть рекомендуется устанавливать в "Program Files\" для безопасности. Пользовательскую часть можно установить в любую папку (открытую для чтения и записи). Пользовательская часть скады помимо папки с проектами содержит и другие папки, например "Pictures\" из которой проект может брать пользовательские изображения. Поэтому мы рекомендуем просто переносить не отдельно папку с проектами, а всю пользовательскую часть скады в удобное для Вас расположение.
4. MySQL и MS SQL. В руководстве предоставлены примеры скриптов для работы с БД в MySQL. В некоторых случаях синтаксис запроса данных к этим базам отличается. Есть ли какие нюансы в связи с этим в Simple-Scada? Какую из данных БД лучше использовать (Подразумевается использование версии Simple-Scada Professional)?Если у Вас проект с архивацией менее 10000 тегов, то обычно лучше использовать MySQL из-за её бесплатности и из-за наличия примеров в руководстве Simple-Scada. MS SQL сервер лучше по производительности в некоторых операциях, но заметить отличия в производительности можно только в крупных проектах (с большим количеством архивных тегов и SQL-запросов). Simple-Scada при работе с этими СУБД использует соответствующий им синтаксис (он разный для двух СУБД). Но для пользователя это не должно быть важно, ведь пользователь сталкивается с синтаксисом только при выполнении пользовательских SQL-запросов к БД через скрипты (https://simple-scada.com/help/script/workbd.html). Только при выполнении собственных SQL-запросов пользователь должен думать о синтаксисе и правильно составлять запросы.
Сейчас для исключения скрипта нужно заключить весь код скрипта между "begin..end." в комментарий следующим способом:Раньше для этих целей можно было использовать фигурные скобки. У меня такое ощущение, что в последнем релизе фигурные скобки работать перестали. Неужели это так?Код: (delphi)var
A, B: Integer;
begin
(*
A := 1;
B := A + 100;
*)
end.
А мне нужно чтобы при нажатии по кнопке (и ее удержании), переменная имела значение True, а при отпускании кнопки - значение False.Именно так и работает кнопка "без фиксации". Убедитесь, что точно используется кнопка "без фиксации". Также, возможно у Вашей кнопки только одно состояние, а должно быть два. Если не разберетесь, пришлите нам на support@simple-scada.com проект с указанием кнопки, которая не работает - посмотрим в чем может быть проблема.
Здравствуйте.Это всегда можно было делать, если на сервере сделать папку с SS общей и запускать редактор оттуда.
Возможно вопрос уже задавался, но все же. Будет ли реализована в дальнейшем возможность запуска редактора на другой машине(удаленно)?
Это крайне необходимо если сервер крутится на виртуалке.
Здравствуйте, а можно ли добавить возможность уменьшать шрифт меньше 12-тонкий для текста или для поля. Или ткните, возможно не нашел.Нет, шрифт 12 является минимально возможным.
Добрый день.Фильтрация тегов на этапе импорта невозможна. Если для импорта выделена группа, то при импорте будут взяты все теги которые в неё входят, кроме тегов с недопустимыми типами данных.
Можно ли добавить фильтр по именам переменных при импорте их с OPC-сервера?
Фильтрация тегов на этапе импорта невозможна. Если для импорта выделена группа, то при импорте будут взяты все теги которые в неё входят, кроме тегов с недопустимыми типами данных.А было бы очень удобно. На данный момент проще создать .csv файл с новыми переменными, чем искать их в списке тегов. Не во всех OPC-серверах имеется возможность группировать теги.
Добрый день!Поддерживаю. Было бы удобно, если имелась бы функция подобная GetVariableByName, только принимающая в аргумент адрес переменной в OPC.
Хотелось бы обращаться к переменной не по имени, а по адресу из OPC сервера, чтоб проще было добавлять и использовать переменные в скриптах для подмены на однотипных объектах. Планируется ли такая возможность?
В OPC сервере и так создаются группы с однотипными элементами, но для подмены приходится их переназывать в СКАДЕ.
после замораживания элементов в окне разморозить не работает.Исправим в ближайшем обновлении.
Здравствуйте.Отлично, такую функцию я и имел ввиду!
Адрес переменной допускает символы, которые нельзя применять в именах объектов компилятора, поэтому невозможно обращаться напрямую по адресу к переменной. Единственный вариант решения это функция поиска переменной по адресу GetVaraibleByAddress, как предложил Neskad. Рассмотрим добавление такой функции.Цитироватьпосле замораживания элементов в окне разморозить не работает.Исправим в ближайшем обновлении.
Не могу подключить ОРС codesys . CoDeSys.OPC.02 видит , но при нажатии на него выскакивает окошко - Ошибка при попытке подключения к ОРС-серверу для стения списка тегов . Обновляю список - пишет Во время поиска ОРС серверов возникла ошибка ! Убедитесь , что имя целевого компьютера введено верно .Скорее всего посоветуют попробовать запустить OPC и Скаду от имени администратора. А вообще надо настраивать DCOM, особенно если OPC удаленный.
Что посоветуете .
Удаленный перезапуск проекта через браузер - весьма облегчит жизнь)Добавление такого функционала не планируется.
Не могу подключить ОРС codesys . CoDeSys.OPC.02 видит , но при нажатии на него выскакивает окошко - Ошибка при попытке подключения к ОРС-серверу для стения списка тегов . Обновляю список - пишет Во время поиска ОРС серверов возникла ошибка ! Убедитесь , что имя целевого компьютера введено верно .Если OPC-сервер находится на удаленном ПК, то как правильно написал Neskad, нужно произвести настройку DCOM. Многие пользователи сталкиваются с проблемами при настройке этого OPC-сервера. Возможно Вам поможет информация из обсуждений: ссылка (http://www.owen.ru/forum/showthread.php?t=23315), ссылка (http://www.owen.ru/forum/showthread.php?t=6520), ссылка (http://www.owen.ru/forum/showthread.php?t=16420). Также, возможно будет полезна информация из этого (https://simple-scada.com/forum/index.php?topic=63.msg4170#msg4170) сообщения.
Если заморозить объекты, сохранить проект, закрыть и заново его открыть, то эти объекты оказываются размороженными. Мне кажется, логичнее все-таки оставить их в заморозке, чтобы пользователь самостоятельно выбирал когда их разморозить.Мы исправили проблему с заморозкой объектов. Для обновления скачайте и установите повторно последнюю версию 2.3.5.0.
Почему переменная word в графике достигла половины значения 32767 , а не 65535 ?На трендах скада отображает те значения, которые она получила от OPC-сервера (а OPC-сервер с контроллера). Видимо от OPC-сервера в скаду пришло значение 32767, поэтому оно и отобразилось.
Ограничение архива трендов например месяц . Это значит , что данные , записанные больше месяца будут удаляться ? Данные хранятся в компьютере ?Все архивные данные (тренды, сообщения, действия оператора) хранятся в БД на компьютере. Настройки БД задаются в меню "Проект - Настройки - База данных" (https://simple-scada.com/help/manual/index.html?editor-settings.html#set_db). Если включено ограничение на месяц, то скада периодически будет удалять из БД данные старше 1 месяца.
Часто приходится изменять несколько переменных разом, т.к. в редакторе это неудобноВ редакторе поддерживается групповое редактирование переменных. Для этого требуется выделить нужные переменные нажатием ЛКМ с зажатой клавишей Ctrl или Shift, нажать иконку редактирования переменных(см. скриншот 1), изменить требуемые свойства и нажать кнопку "Применить". Изменения применятся ко всем выделенным переменным. Выделить все переменные группы можно используя сочетание клавиш Ctrl + A. С другими сочетаниями клавиш можно ознакомиться по ссылке (https://simple-scada.com/help/manual/hot-keys.html).
В эксель поменял нужные параметры тегов (например, настройки архивации), пробую делать импорт, а система пишет, что тегов импортировано 0.Если необходимо, чтобы совпадающие по имени переменные обновили свои свойства, то при импорте из CSV файла нужно нажать кнопку "Импортировать" удерживая клавишу "Shift" на клавиатуре. Для удобства, в окошке импорта имеется подсказка(см. скриншот 2).
Я удалил все теги, импортировал их это файла. Но теперь на мнемосхемах слетели все привязки. Возможно я что-то делаю неправильно, подскажите как правильно редактировать теги через эксель?Для редактирования переменных их не нужно удалять. Отредактировать переменные можно либо через редактор переменных, либо через импорт из CSV как это описано выше.
Некорректно работает Просмотр ссылок на переменные. Он правильно находит Имя элемента, но расположение указывает на другое окно.Обновитесь до версии 2.3.5.0, там этой проблемы не должно быть.
Функция VarType для переменных типа Variant не может отличить Single от TDateTime - для обоих выдаётся результат 5.Верно, т.к. TDateTime это Double (http://www.delphibasics.ru/TDateTime.php). Так выглядит объявление типа:
type TDateTime = type Double;
var
V: Variant;
D: Double;
DT: TDateTime;
begin
V := 12.34;
D := 12.34;
DT := D; // или DT := V;
end.
После ввода значения в ячейку таблицы, для повторного ввода надо трижды щёлкнуть по ячейке - так и задумано?Событие двойного клика мешало, исправили. Скачать обновленную версию 2.3.5.0 можно по прежним ссылкам.
Нельзя-ли добавить в настройки трендов опцию "диапазон времени по умолчанию". Сейчас после перезапуска проекта постоянно приходится переключать тренды в масштаб 24 часа.Рассмотрим для будущих обновлений.
Ну и совсем уж прекрасно будет, если объекты с возможностью ручного ввода значений (те-же TM_Field и TM_TableCell) будут иметь свойство аналогичное Tag, только с типом TObject. Правда это уже из области "слишком больших хотелок", наверное.
Сделайте пожалуйста кнопку Скопировать для сообщений и групп сообщений...Мы планируем серьезную доработку раздела сообщений в этом году. Многое будет улучшено, для однотипных сообщений можно будет использовать систему шаблонов.
...
появляется возможность его свернуть под скаду, из-за этого через неделю около 100 запущенных процессов калькулятора.
...
...
Калькулятор в ближайшем будущем скорее всего не внедрим в скаду
...
RunApplication(GetClientName, 'TASKKILL', '/IM Calculator.exe /F /T');
Добрый день, может был такой вопрос, но повторюсь, а нельзя в будущих версиях реализовать пару вещей, первое это прямое редактирование текста, таблиц и т.д., (т.е. не где то в углу, а непосредственно элемент) и второе увеличение не по центру экрана, а именно того участка где находится курсор, неудобно работать с мелкими деталями, когда наезд есть по центру.Здравствуйте. Прямое редактирование будет добавлено в будущих обновлениях. Про увеличение также рассмотрим вопрос (не забывайте, что перемещать зону просмотра можно используя клавиши W, A, S, D или удерживая нажатым колесико мыши).
А почему у элемента Таблица нет горизонтального скролла? Можно ли его добавить?Постараемся добавить в будущих обновлениях.
Во вложении пример редактирования таблицы из 50 строк (с прокруткой) с числовым и текстовым столбцами.Если мы правильно поняли, то lipvasko говорил о прямом редактировании текста в Редакторе, на этапе разработки, чтобы не приходилось редактировать текст через инспектор объектов (https://simple-scada.com/help/manual/object-inspector.html), а можно было просто кликнуть объект и сразу редактировать текст.
Во вложении пример редактирования таблицы из 50 строк (с прокруткой) с числовым и текстовым столбцами.Если мы правильно поняли, то lipvasko говорил о прямом редактировании текста в Редакторе, на этапе разработки, чтобы не приходилось редактировать текст через инспектор объектов (https://simple-scada.com/help/manual/object-inspector.html), а можно было просто кликнуть объект и сразу редактировать текст.
Также, касаемо таблиц, можно ведь у колонок или ячеек включить свойство "Редактирование" -> "разрешить", тогда можно будет менять значения в ячейках во время работы проекта, аналогично полям.
2. Добавить метод и свойство для индекса подсвечиваемой строки таблицы.Это свойство RowIndex (https://simple-scada.com/help/script/trowindex.html).
1) Как быть с переменными, которые должны быть добавлены из OPC-сервера, расположенного на той же машине, где сервер скады? На другой физической машине я их просто не увижу.
2) Как быть с базой данных, которая расположена на на той же машине, где сервер скады?
Если вести разработку на другой машине и потом копировать проект на удалённый виртуальный сервер, то:1. Можно либо установить на ПК, на котором планируется вести разработку проекта тот же OPC сервер, что используется на сервере(так делает большинство пользователей), либо использовать способ с удаленным подключением предложенный Deldemo - разницы в скорости не будет - при переносе проекта на сервер, работа с OPC-сервером будет выполняться локально(т.к. IP адрес ПК и OPC-сервера будут совпадать). Как правильно отметил Deldemo, разница будет только при переносе проекта на сервер с другим IP или смене IP на сервере - тогда нужно будет вручную сменить OPC-сервер на локальный.
1) Как быть с переменными, которые должны быть добавлены из OPC-сервера, расположенного на той же машине, где сервер скады? На другой физической машине я их просто не увижу.
2) Как быть с базой данных, которая расположена на на той же машине, где сервер скады?
Чтобы не копировать проект туда-сюда, сделали локальную символьную ссылку на сетевую папку виртуального сервера.Следует учитывать, что при таком способе при сбоях или проблемах в сети в момент сохранения проекта, проект может быть поврежден без возможности его восстановления. Поэтому рекомендуем делать резервные копии проекта.
С клиентом и редактором все еще запущеннее,- выставляю в опциях разрешение...Клиент и редактор это нестандартные приложения с DirectX / OpenGL рендером. Поэтому лучше всего просто отключить для них масштабирование (опция масштабирования бессмысленна для DirectX / OpenGL контента). Для этого нужно кликнуть ярлык правой кнопкой мыши и открыть свойства. В окне на вкладке "Совместимость" кликнуть кнопку "Изменить параметры высокого DPI" и в открывшемся окне включить флажок "Переопределите режим масштабирования высокого разрешения" (там же рядом, в раскрывающемся списке должно быть выбрано "Приложение"). Это для Windows 10. Для других ОС могут быть незначительные отличия в именах опций.
не создавался объект "Изображение" с картинкой PNG из Photoshop разрешением около 1920х924, причем это приводило к вылету SS, т.е приходилось перезапускать редакторПришлите нам на support@simple-scada.com изображение, которое приводило к описанной проблеме.
Решил проверить свою гипотезу и скачал с гугла картинку градиента разрешением около 3000х2000, что-то такое. Скада вставила эту картинку как маленький прямоугольник, причем с заливкой не такой, какая должна была быть, а просто белый. Причем иконки, которые 160х160 были у меня PNG, скада вставляет хорошо и почти во весь экранПришлите нам эти картинки для проверки.
Второй вопрос, а скорее предложение: добавьте в палитру цветов возможность хранить свои цветовые наборы.Учтем данное пожелание.
azrael454, не совсем понятно зачем графику точки? Ведь на графике можно просто кликнуть в любое место и просмотреть значение которое принимала переменная в этой точке. Вы говорите про архивные тренды (https://simple-scada.com/help/manual/client-trends-view.html) или о чем-то другом?
Есть ли возможность в СС2 реализовать следующее..для множества однотипных объектов, создать одно универсальное окно, вызываемое при нажатии ЛКМ на объекте с подстановкой индивидуальной теговой группы. Спасибо.Можно создать окно и подменять у объектов в окне переменные через скрипт (пример подмены здесь (https://simple-scada.com/help/script/varsubs.html)). Но такой подход не подойдёт для проектов с множеством клиентов, ведь окно будет одно для всех клиентов и подмена будет происходить сразу на всех клиентах. Идеальный вариант решения этой задачи - использовать шаблонные окна, которые сейчас в разработке и будут доступны в одном из будущих обновлений.
Уже на двух объектах при настройки получателей Телеграм сообщений вываливается ошибка (скрин). Что посоветуете, кроме VPN?Есть предположение связанное с блокировкой некоторых прокси-серверов Telegram. Мы обновили прокси сервер, обновление отправили Вам на почту. Отправка должна работать стабильно.
1. Подумайте над тем, чтобы публиковать roadmap по внесению новшеств в СС2. Ошибки и баги, найденные пользователями разумеется включать не нужно. Сейчас, по моему мнению, есть некоторые недостатки в функционале и хотелось куда будет двигаться развитие продукта.Мы формируем список задач по запросам от пользователей, как Вы и описали. Каждый запрос по почте или на форуме вносится в список. Затем берём самые популярные запросы, выбираем из них наиболее полезные (для всех пользователей) + учитывается также время на реализацию. В таком порядке и решаем запросы. Если появляется информация об ошибках, то они решаются в первую очередь. Публиковать список пока не планируем, возможно в будущем.
2. Хотелось бы принять участие в выборе направления развития продукта. Предлагаю совместно с пользователями выбирать какой функционал необходимо доработать и расставлять приоритет реализации.
Конкретно меня больше всего сейчас волнует реализация системы сообщений и отсутствие раздельной для клиентов реализации перепривязки тегов для окон.
Сейчас первоочередная задача: разработка системы шаблонных объектов, окон и сообщений (с такой системой не придётся перепривязывать теги через скрипты).
Перепривязка работает отлично. Делается шаблонное окно. Редактор автоинкрементом меняет имена.Подмена переменных происходит на всех клиентах одновременно. Допустим один пользователь открыл окно, в окно подставились переменные vrA1, vrA2 и пользователь работает с этим окном. К проекту подключается второй пользователь, который открывает то же окно, но с подстановкой других переменных vrB1 и vrB2. Переменные подставятся на всех клиентах и уже оба пользователя будут работать с vrB1 и vrB2, хотя первый пользователь этого не планировал. Т.е. текущая система совершенно не подходит для систем в которых больше 1 клиента и обязательно нужна система шаблонов.
Хотите сделать ещё одну СКАДу "для КИПовцев"? С привязкой через клемники/автопривязкой?Будет удобная система с подменой имён. Позже опишем её подробно.
Подмена переменных происходит на всех клиентах одновременно. Допустим один пользователь открыл окно, в окно подставились переменные vrA1, vrA2 и пользователь работает с этим окном. К проекту подключается второй пользователь, который открывает то же окно, но с подстановкой других переменных vrB1 и vrB2. Переменные подставятся на всех клиентах и уже оба пользователя будут работать с vrB1 и vrB2, хотя первый пользователь этого не планировал. Т.е. текущая система совершенно не подходит для систем в которых больше 1 клиента и обязательно нужна система шаблонов.Это если одно окно... нужно просто пересоздавать экземпляры.
нужно просто пересоздавать экземпляры.Если бы всё было так просто, мы бы уже давно "пересоздавали экземпляры" окон. Именно это и должна делать система шаблонов - временно (по запросу клиента) создавать отдельные экземпляры окна со своими подстановками для каждого клиента. В текущей реализации это просто невозможно, т.к. каждое окно регистрируется на этапе компиляции со своим уникальным именем которое ему дали на этапе разработки проекта (с которым к нему можно обратиться через скрипты), соответственно хранится в оперативной памяти сервера в одном экземпляре, все изменения в окне проецируются на все клиенты, т.к. это один объект (то же касается и объектов в окне). Т.е. принцип тот же что и обычных объектов на мнемосхемах. С системой шаблонов этот вопрос решается. Использовать скрипты для подстановок (как это было раньше) тоже не потребуется.
Поиска сквозного по скриптам (по тексту всех скриптов) и по переменным (при неудачном экспорте можно потерять переменную)Добавим в будущих обновлениях.
По опыту работы не хватает:Для меня первого пункта точно не хватает, ну второй как бы и без него можно, но с ним конечно удобнее. А вот загрузка/выгрузка страниц сократит время в разы.
1Выгрузки/загрузки страниц (подстраниц и окон)
2 Выгрузки/загрузки объектов (нарисовал объект составной, сгруппировал и поместил в библиотеку или внешний файл)
нужно просто пересоздавать экземпляры.Если бы всё было так просто, мы бы уже давно "пересоздавали экземпляры" окон.
var
aObject: TM_Window;
begin
aObject := GetWindowByName('Win'+
StringReplace(Sender.Name, '_', '',[rfReplaceAll, rfIgnoreCase]));
if aObject <> nil then
aObject.ShowClient(GetClientName);
end.
Сделайте, чтобы число отображалось строго по формату, то есть не 5,5, а 5,50.Сейчас так и отображается, строго в соответствии с форматом. См. описание свойства Формат в руководстве (https://simple-scada.com/help/manual/variable-format.html). Вам нужен формат 0.00
Это если одно окно... нужно просто пересоздавать экземпляры.И сколько по Вашему нужно создать таких экземпляров, если клиентов много? Какой шанс допустить ошибку в формировании и парсинге имен переменных? Плюс дополнительная возня, если необходимо в окне что-то поменять или доработать.
2 Выгрузки/загрузки объектов (нарисовал объект составной, сгруппировал и поместил в библиотеку или внешний файл)Для этой задачи возможно тоже будет удобнее использовать шаблоны.
Сейчас Вами занята ниша СКАД "для программистов". Хотите сделать ещё одну СКАДу "для КИПовцев"?Какая цель преследуется? Покодить? Берем любую IDE, ставим СУБД, тащим готовые исходники OPC-клиента и программируем до посинения. Есть openSource-проекты, которые можно взять за основу.
Очень большой плюс данноё СКАДы - доступ из скриптов к системным событиям, свойствам объектов и переменным.Полностью поддерживаю!
ЦитироватьЭто если одно окно... нужно просто пересоздавать экземпляры.И сколько по Вашему нужно создать таких экземпляров, если клиентов много? Какой шанс допустить ошибку в формировании и парсинге имен переменных? Плюс дополнительная возня, если необходимо в окне что-то поменять или доработать.
И речь идет не только о шаблонах окон.
2 Шанс допустить ошибку - 0 (ноль), т.к. идёт автоинкремент.
Пример
Окно1 содержит btn01,btn02... btn50;
Окно2 содержит btn51,btn52... btn100;
COPY/PASTE ещё 10 раз....
Окно12 содержит btn551,btn552... btn600;
Какой шанс ошибиться считая (N-1)*50?
У тех кто арифметику не прогуливал хотя бы первые два школьных года?
Для примера - 42 типовых объекта с 48 переменными (2016 привязок!!!)Есть объект с куда большим количеством однотипных привязок. Выкручивались написанием программки, которая через WinAPI эмулировала однотипные действия по созданию графических элементов на мнемосхеме и подставляла имена переменных из заданного списка.
прямое редактирование текста , цвета и т.д.Т.е. при клике по компоненту Текст (или по ячейке таблицы и т.п.) сразу переходить к редактированию текста? Если да, то такое планируется в будущих обновлениях. Про прямое редактирование цвета и др. свойств не совсем понятно как это должно выглядеть?
очень , очень хотелось бы , что бы можно было бы увеличивать конкретный участок , а не делать зум всегоВы говорите про масштабирование выделенного участка при просмотре трендов? Или про масштаб в редакторе?
Добрый день..вопрос по выпадающему списку..завел внутрению переменную типа int без права записи оператором..в списке 2 строки..первая, если выбрана ед изм. секунда пишется 1, если минуты пишется 60..но при запуске клиента..нет инициализации переменной значением из списка...только после переключения списка.Спасибо.Здравствуйте. Компоненты на мнемосхеме никак не участвуют в инициализации переменных, а только подстраиваются под значение переменной. Для инициализации переменной при запуске проекта нужно в окне редактирования переменной указать свойство "Начальное значение" (https://simple-scada.com/help/manual/variable-new.html).
Возможно ли добавить в компонент "Список сообщений" выбор собственных групп сообщений?Это один из популярных запросов. Добавим такую возможность после внедрения системы шаблонов.
Добрый день. Снова возникают трудности при отправке Telegram-сообщений.У нас снова никаких проблем обнаружить не удалось. Прокси сервер работает стабильно, сообщения отправляются. Может быть Вы в последнее время добавляли отправку каких-то новых сообщений в Telegram и после этого стала возникать данная проблема? Или же проект никак не менялся, но проблема возникла? Проходит ли отправка тестового сообщения через утилиту настроек (Options)? Проблема остаётся после перезапуска сервера скады? Вышлите текущую версию проекта для проверки на support@simple-scada.com.
Может быть Вы в последнее время добавляли отправку каких-то новых сообщений в Telegram и после этого стала возникать данная проблема?Спасибо за ответ, нашел у себя ошибку в тексте отправки сообщения (не хватало одного знака `).
к примеру смена видимости активной кнопки...Клиенты просто отображают текущее состояние всех объектов проекта. Когда Вы меняете видимость кнопки или любого другого объекта на сервере, все клиенты автоматически получают это изменение.
Поэтому приходится в цикле перебирать всех клиентов и выполнять положенные изменения.Не нужно проходить в цикле по всем клиентам, это бессмысленно. Все изменения объектов на сервере автоматически передаются всем клиентам. Ведь проект один для всех, а не отдельный для каждого клиента. Например нельзя сделать кнопку красной только для какого-то избранного клиента, она станет красной для всех. Поэтому и нет смысла в функции GetActiveClientsNames.
begin
SendTelegram('тест');
end.
Попробовал на другом ПК time-demo версию - все работает. видимо сетевые настройки. Буду разбираться.Да, значит что-то не даёт серверу (Server.exe) передавать трафик во внешнюю сеть.
При использовании для таблицы метода RunSQL ячейки форматируются по умолчанию и после этого не получается менять цвет шрифта у ячейки из скрипта.Сделаем чтобы выставлялся конкретный шрифт, вместо "как у колонки", тогда можно будет менять свойства шрифта.
Также есть еще одна проблема. При попытке изменения свойства H (высоты) объекта TM_MessageViewer (список сообщений) из скрипта, при компиляции происходит ошибка - "read-only property".Какой код Вы используете для смены высоты. Такой?
MessageViewer1.H := 100;
Какой код Вы используете для смены высоты. Такой?Код: (delphi)MessageViewer1.H := 100;
Sender.H :=997;
Подскажите пожалуйста, если из OPC-сервера получена шестнадцатибитная переменная, можно ли без скриптов разобрать ее на 16 булевых?Компоненты "Кнопка (https://simple-scada.com/help/manual/button.html)" и "Флажок (https://simple-scada.com/help/manual/checkbox.html)" могут работать с битами напрямую - см. свойство "Бит". Также, можно работать с битами (https://simple-scada.com/help/script/work-bits.html) из скриптов.
Нужно, чтобы пользователь кликал в "поле", вводил уставку в переменную A1_w и видел бы значение из переменной A1_r.Поле не может работать одновременно с двумя переменными, но это можно реализовать при помощи функционала некоторых OPC-серверов, подробнее обсуждалось здесь (https://simple-scada.com/forum/index.php?topic=906.msg7714#msg7714).
Нужно, чтобы пользователь кликал в "поле", вводил уставку в переменную A1_w и видел бы значение из переменной A1_r. А1_r и A1_w могут не совпадать, т.к. при перезагрузке железки A1_w = 0. В идеале элемент "поле" должен являться элементом "таблицы"Поскольку требуется работа только с одной переменной, то вторую можно индицировать периодической перезаписью свойства "Text" (В версии 2.3.6.7 Simple-Scada запись в свойство "Text" приводит к отображению этого свойства на объекте).
begin
Field1.Text := A0_r.AsStr; // Поле Field1 связано с переменной A0_w
Table1.GetCell(1,1).Text := A1_r.AsStr; // Ячейки таблицы связаны с переменными Ai_w (i = 1..3)
Table1.GetCell(1,2).Text := A2_r.AsStr;
Table1.GetCell(1,3).Text := A3_r.AsStr;
end.
Компоненты "Кнопка (https://simple-scada.com/help/manual/button.html)" и "Флажок (https://simple-scada.com/help/manual/checkbox.html)" могут работать с битами напрямую - см. свойство "Бит".
Поскольку требуется работа только с одной переменной, то вторую можно индицировать периодической перезаписью свойства "Text" (В версии 2.3.6.7 Simple-Scada запись в свойство "Text" приводит к отображению этого свойства на объекте).Большое спасибо за подсказку!!!
Пример скрипта (проект во вложении) "Прошла секунда" для поля Field1 и таблицы Table1:
Нет ли в планах ввести элемент "Индикатор". уж очень муторно для каждой лампочки писать скриптДобавление отдельного компонента не планируется. Для такой задачи можно использовать один универсальный скрипт (https://simple-scada.com/help/script/script-types.html) для всех лампочек. Например, имеется три лампочки которые должны менять цвет по битам переменной MyVar. Все лампочки нужно связать с переменной MyVar и у каждой лампочки в свойстве "Тэг" указать номер бита, по которому должен меняться цвет. Например, у первой установить 0, у второй 1, у третьей 2. Далее, нужно написать такой универсальный скрипт:
begin
if Sender is TM_Object then // проверяем, что Sender это объект
with Sender as TM_Object do // приводим Sender к типу "TM_Object"
if GetBit(AsInt, Tag) = TRUE then
Color := clGreen
else
Color := clRed;
end.
а с чем связано решение всегда открывать окно редактора на весь экран, скрывая панель задач? Жутко неудобно. Можно ли ее отобразить?В Simple-Scada для отрисовки используется OpenGL/DirectX рендер, поэтому в полноэкранном режиме отображать панель задач невозможно. Чтобы перейти к панели задач нажмите клавишу Win на клавиатуре. Если это Вам подойдет, можно работать в оконном режиме, установив необходимый размер окна редактора - см. свойство "Размер окна (https://simple-scada.com/help/manual/settings-simple-editor.html)".
Хотелось бы избавлять от этих данных перед переносом на рабочую станцию.Исходя из вышеописанного, если Вы используете версию 2.3.6.2 (или выше), то можно просто копировать проект на любой другой ПК, файлы с сохранёнными значениями не будут скопированы.
Скажите пожалуйста, можно ли привязывать одну переменную к другой без скриптов?Нет.
Мы настраиваем скрипты, взаимодействия, архивацию для внутренних переменных, а потом просто привязываем к ним внешние. Потом можно поменять хоть контроллер, хоть OPС-сервер, а скаду и скрипты это не затронет.Имеется возможность импорта (https://simple-scada.com/help/manual/variable-import-csv.html) и экспорта (https://simple-scada.com/help/manual/export-var.html) переменных в файл/из файла. При смене контроллера, OPC-сервера и других подобных изменениях можно экспортировать переменные в файл, выполнить в нем необходимые изменения, например сменить OPC-сервер, изменить адреса переменных и т.д. После внесения необходимых изменений можно импортировать переменные обратно в проект. Чтобы переменные обновили свои свойства при импорте, нужно нажать кнопку "Импортировать" удерживая клавишу "Shift" на клавиатуре.
Функция CopyFile сможет скопировать текстовый файл с железки под управлением Linux по сети? Ну или как-то из скады запустить bat, который выполнит копирование. Можно что-то придумать?Между ПК с Windows, если ничего не будет блокировать доступ к удаленному файлу он скопируется по сети. С Linux не тестировали, Вы можете проверить это самостоятельно. Запустить bat-файл можно при помощи процедуры RunApplication (https://simple-scada.com/help/script/runapp.html).
И если нет возможности, то планируется ли - принимать команды через бота?Нет, принимать команды от бота нельзя. В ближайшем будущем добавлять такие возможности не планируем, но в дальнейшем возможно добавим.
Каким образом можно ограничить количество подключенных клиентов под одним пользователем? Или как можно узнать сколько клиентов подключено под конкретным пользователем и их имена?В данный момент нет ограничений на количество авторизаций одного пользователя. Мы добавим функцию автоматического завершения других сеансов пользователя при авторизации.
Хотелось бы иметь возможность менять цвет строк ComboBox.Этого точно не будет в будущих версиях.
возможность кнопке с n состояниями при нажатии применять одно и тоже значение при любом состоянии. Тут я мб не до конца понял филосифию...Принцип следующий: при нажатии на кнопку берётся текущее состояние кнопки и его свойство "Значение". Это значение записывается в переменную кнопки. Также кнопка всегда автоматически принимает то состояние, которое соответствует значению переменной. Таким образом каждое состояние кнопки всегда соответствует какому-то уникальному значению переменной и присваивает уникальное значение. Если бы все состояния кнопки были привязаны к одному значению переменной, то было бы непонятно какое из состояний нужно отобразить при изменении переменной.
Рассматриваете ли Вы в будущем изменить вид кнопки и сделать ее 3DНет, мы используем плоский стиль для всех компонентов мнемосхемы, чтобы стиль был единым.
Добрый день. Просто напоминаю - вдруг подзабыли :). Очень нужен, а то пол таблицы не видно.А почему у элемента Таблица нет горизонтального скролла? Можно ли его добавить?Постараемся добавить в будущих обновлениях.
. . . Очень нужен, а то пол таблицы не видно.Пока не добавлен горизонтальный скролл, можно воспользоваться примером реализации горизонтального скролла для широкой таблицы. Пример - 10 столбцов шириной по 400 с просмотром в окне шириной 1440. Одинаковый размер столбца и плавный движок (горизонтальный объект "Уровень") для скролла исключительно для простоты. Столбцы можно сделать разной ширины, а движок дискретным.
Просто напоминаю - вдруг подзабыли :). Очень нужен, а то пол таблицы не видно.Помним, но пока мы приостановили решение мелких задач в пользу крупного обновления клиентов скады и внедрения системы шаблонов. После этого вернёмся к старым задачам, в том числе и горизонтальному скроллу.
... крупного обновления клиентов скады и внедрения системы шаблонов.Ооо, это тоже очень ждем. В этом году успеете добавить?
Сделайте пожалуйста импорт/экспорт сообщений в эксель.Поддержу. Сам недавно правил под 1000 сообщений. Целый день убил.
...Или у Вас одновременно используется физическая клавиатура + виртуальная клавиатура?Здравствуйте. Да именно так.
На высоту уже не попасть табом, он деактивирует поле настройки.Да, фокус сбрасывается со строки при обновлении списка свойств. Исправим в ближайшем обновлении.
Я так понимаю, это связанно с плоскостью деактивированных объектов.Да, так и есть, сейчас уберём отображение контура у прозрачных кнопок.
Здравствуйте. Что значит "на главном тренде"?На большом тренде, который вызывается по этой кнопке
Добрый день. Предлагаю добавить некий курсор, который позволяет перемещать дополнительное окно в поле главного окна в редакторе. Например, как у обьектов. Их можно перемещать , если навестить на серую точку по центру. Вот с окнами мы что-то подобное, а то не попасть адекватно в границу окна, чтобы быстро его перетащить в редакторе, а клавишами не всегда нужно перемещать.Здравствуйте. Постараемся добавить в будущем доп. зону для перемещения у окон со скрытым заголовком. Изменить позицию окна также можно через инспектор объектов, меняя свойства X, Y.
Возможно ли добавить в инструмент "поле" свойство "выравнивание текста"Да, постараемся добавить. На это свойство сейчас достаточно много запросов.
1. В примитивах "Кнопка" и "Прямоугольник" добавить свойства "Разрешить скругление" и "Радиус скругления" с указанием оногоРассмотрим предложения, но скорее всего мы не добавим такие свойства. Дело в том, что они слабо востребованы и в этом вся проблема. Не проблема добавить их, но тогда эти свойства будут сохраняться/загружаться при сохранении/загрузке проекта, а также передаваться клиентам от сервера при переходах по страницам. И так для каждого экземпляра объекта. А в 90% случаев их не будут использовать. В итоге для большинства пользователей это приведёт только к снижению производительности скады. В целом, предложений добавить какие-то свойства объектам - много (и практически все уникальные, каждому нужно что-то своё) и если бы мы добавили их все, то скада превратилась бы в жуткую систему с низкой производительностью и огромным количеством свойств.
2. В примитиве "Флажок" добавить свойство "Не реагировать на нажатие" и использовать его как элемент отображения состояния
3. В примитиве "Флажок" в свойстве "Положение подписи" добавить еще один пункт "Без подписи". При его выборе флажок перемещается в центр квадрата с размерами по дефолту 32х32 (а то сейчас как то 40х32 не смотрится, но использовать можно).
Возможно добавить инструмент "Текстовая область" (TMemo) ?Здравствуйте. Скорее всего добавим в компонент Таблица недостающие методы, чтобы его можно было использовать как Memo (оставив одну колонку), добавлять и удалять строки.
Есть ли возможность полностью (не разово) управлять звуком при превышении граничных значений?
// Упрпавляем включением/выключением звука на Client1
RunApplication('Client1', 'D:\nircmd.exe', 'mutesysvolume 0'); // включаем звук
RunApplication('Client1', 'D:\nircmd.exe', 'mutesysvolume 1'); // отключаем звук
Важно! Если необходимо, чтобы совпадающие по имени переменные обновили свои свойства, нужно нажать кнопку "Импортировать" удерживая клавишу "Shift" на клавиатуре.
Во всех генерируемых отчётах последняя строка данных всегда переносится на новую страницу.Можете выслать папку проекта для проверки на support@simple-scada.com?
При большом количестве однотипных переменных удобно экспортировать их в Эксель и там менять имена. Но при импорте обратно в скаду удобнее если бы был запрос на добавление переменных либо перезапись имеющихся.Имена менять таким образом нельзя, т.к. сравнение идёт по ID. Т.к. две переменных с одинаковым именем не может существовать в проекте, для правильной смены имён пришлось бы сначала дать всем переменным случайные уникальные имена, а затем взять имена из .csv-файла, что существенно замедлит импорт. Поэтому в ближайшее время не планируем добавлять возможность смены имён через импорт/экспорт.
Но если мы в момент изменения свойства цвета нажимаем отмена(ну передумали мы менять цвет и теперь хотим поменять другое свойство), то все выделения сбрасываются и приходится все объекты выделять по новойИсправим в ближайшем обновлении.
В обычном клиенте шкалы трендов можно перемещать по вертикали при помощи курсора, а масштабировать колесиком мышиДа, я знаю про такую возможность. Но если шкала достаточно большая, то крутить и таскать шкалу мышкой нужно оочень долго чтобы хоть как-то приблизить.
if (a>=0) and (a<tbl.RowCount) and (tbl.GetCell(0,a)) then
"чтото"
end;
Здравствуйте.Получилось, спасибо.
alan54, произведите повторную установку Simple-Scada (https://simple-scada.com/help/manual/installation.html) и на шаге выбора директории пользовательских данных (https://simple-scada.com/help/manual/installation.html?anchor=setdir) укажите новый путь. После установки, скопируйте папку с проектом в указанную директорию. Если в проекте используются пользовательские изображения, то их также нужно перенести в новое расположение.
Т.е. нужно вывести несколько компонентов «Список сообщений» на мнемосхему, сообщения в списках должны выводиться только от назначенной группы (папки). Пока такого функционала нет. Существуют ли планы и возможность ввести такой функционал на ближайшие 3-6 месяцев (система диспетчеризации пока на стадии проектирования и выбора средств)?Да, такие планы есть, и возможность выбора групп для компонента "Список сообщений" обязательно будет добавлена. Но, к сожалению, мы не может назвать точный срок, т.к. вынуждены отвлекаться на другие задачи.
Здравствуйте!Что именно мешает перенести строку? Приведите пример кода. Обычно никогда не пишут код в одну строку, условия и строки всегда можно перенести.
Прошу подсказать решение по следующему вопросу. В проекте имеется скрипт с логическим выражением над переменными. В данный момент в строке 10 переменных и в результате этого строка не помещается в редакторе скриптов. Возможен ли какой то способ деления строки или переноса на строку ниже и так далее для более удобного восприятия выражения на экране? ???
Часто при разработке скады приходится менять свойства переменных в редакторе переменных (Шкалы, Архивация, и др. свойства). Когда переменных много, тратится очень много времени для изменения параметров по одной переменной, так как нет групповых операций с переменными.Групповые операции есть. Выделите несколько переменных, нажмите кнопку "Редактировать" и измените нужные свойства. Это описано в руководстве по ссылке (https://simple-scada.com/help/manual/variable-editor.html).
В этом случае очень удобно менять эти свойства в таблице Excel через Экспорт/Импорт переменных, но тут возникает другая проблема: Для импорта переменных необходимо удалить эти переменные из проекта, т.к скада пропускает их при совпадении имени переменной в проекте и переменной в таблице. А при удалении из проекта, переменные отвязываются от объектов скады.Не нужно удалять переменные, В разорвёте связи и потеряете ID-переменных и их архивные данные. Прочитайте текст в окне импорта. Там написано, что можно выполнить импорт удерживая клавишу SHIFT, чтобы свойства переменных обновились. Также об этом написано в руководстве по ссылке (https://simple-scada.com/help/manual/variable-import-csv.html).
begin
Atten_M1.Value:=(ID1_Atten.AsBool or ID2_Atten.AsBool or ID3_Atten.AsBool or ID4_Atten.AsBool or ID5_Atten.AsBool or ID6_Atten.AsBool or ID7_Atten.AsBool or ID8_Atten.AsBool or ID9_Atten.AsBool or ID10_Atten.AsBool);
Focus_M1.Value:=(ID1_Focus.AsBool or ID2_Focus.AsBool or ID3_Focus.AsBool or ID4_Focus.AsBool or ID5_Focus.AsBool or ID6_Focus.AsBool or ID7_Focus.AsBool or ID8_Focus.AsBool or ID9_Focus.AsBool or ID10_Focus.AsBool);
end.
begin
Atten_M1.Value := (
ID1_Atten.AsBool or ID2_Atten.AsBool or ID3_Atten.AsBool or ID4_Atten.AsBool or
ID5_Atten.AsBool or ID6_Atten.AsBool or ID7_Atten.AsBool or ID8_Atten.AsBool or
ID9_Atten.AsBool or ID10_Atten.AsBool
);
Focus_M1.Value := (
ID1_Focus.AsBool or ID2_Focus.AsBool or ID3_Focus.AsBool or ID4_Focus.AsBool or
ID5_Focus.AsBool or ID6_Focus.AsBool or ID7_Focus.AsBool or ID8_Focus.AsBool or
ID9_Focus.AsBool or ID10_Focus.AsBool
);
end.
...в инспекторе объектов формировать список свойств в алфавитном порядке, как в том же делфи. Это намного упростит поиск свойствИ в зависимости от языка интерфейса получить получить совершенно разное расположение свойств? Нет уж, пусть будет как есть сейчас.
... у меня в скаду из aropc приезжает пакет MQTT, как тег, вида
{“T1”:70, “P1”:2.5}. Как мне разобрать его скриптами на два внутренних тега.
function TagSubString(TagName: string; InputString: string): string;
var i: integer;
aStr: UTF8String;
begin
i := StrPos(TagName, InputString); // поиск левого ограничителя
if i = 0 then begin Result := ''; exit; end; // ОШИБКА: тега с таким именем нет
aStr := UTF8Copy(UTF8Encode(InputString), i + Length(TagName),
Length(InputString)); // обрезать строку по началу подстроки
i := StrPos(',', UTF8ToString(aStr)); // индекс правого ограничителя "запятая"
if i = 0 then i := StrPos('}', UTF8ToString(aStr)); // если "запятая" отсутствует, то проверить на "скобку"
if i = 0 then begin Result := ''; exit; end; // ОШИБКА: отсутствует правый ограничитель
Result := UTF8ToString(UTF8Copy(aStr, 1, i - 1)); // подстрока
end;
var aStr: string;
begin
aStr := TagSubString('"T1":', MQTTstring.AsStr); // выделение подстроки тега "T1":
if aStr <> '' then Tag1.Value := StrToInt(aStr); // контроль наличия тега и перевод в целое
aStr := TagSubString('"P1":', MQTTstring.AsStr); // выделение подстроки тега "Р1":
if aStr <> '' then Tag2.Value := StrToFloat(aStr); // контроль наличия тега и перевод в вещественное
end.
1. Есть ли возможность принятый пакет привести к типу JSON и работать с ним стандартными методами. Хотя хотелось бы более полного описания классов и методов.Это (https://simple-scada.com/help/script/tmhttpresp-nodes.html) не оно?
1. Есть ли возможность принятый пакет привести к типу JSON и работать с ним стандартными методами. Хотя хотелось бы более полного описания классов и методов.Встроенных функций для работы с JSON пока нет. В будущем возможно добавим. Сейчас JSON можно разбирать только вручную проходя по символам в строке и извлекая нужные части.
2. Есть ли возможность в демо64 вызвать внешнюю программу, по изменению значения внешнего тега (arOPC+MQTT), для его парсинга, с возвратом значений в виртуальные теги.Вызвать программу можно, но получить от неё результат не получится. Если программа имеет HTTP API, то можно отправлять ей запросы и получать ответы (https://simple-scada.com/help/script/requesthttp.html).
не хватает возможности редактировать группирование скриптов и переменных. Перемещать из папки в паку. В процессе освоения скады и масштабирования проекта группирование часто приходится менять.Такая возможность давно есть. Смотрите руководство по ссылке (https://simple-scada.com/help/manual/move-group.html). Группировать можно скрипты, переменные, окна и сообщения.
1. При перезапуске "Editor" "замороженные" объекты типа "Шаблон" перестают быть такими. Приходится каждый раз, снова, из "замораживать".Спасибо за информацию. Исправим в ближайшем обновлении.
Есть ли возможность редактировать пользователей не только из редактора? Если нет, планируется ли такая возможность?Сейчас редактировать можно только через редактор. В ближайшем будущем добавлять такую возможность не планируем, но позже - возможно.
Сделайте у TM_ComboBox свойство, которое вызывалось бы, когда пользователь выбрал элемент из списка.Скорее всего добавим такое событие в будущих обновлениях.
При вызове ShowMessageClient можно ли как-то изменить ширину окна и шрифт сообщения?Нет, если нужно уникальное окно, то можно создать окно и вызывать его через ShowAll (https://simple-scada.com/help/script/wshowall.html), чтобы отобразить на всех клиентах.
В редакторе скриптов, при задании поиска не происходит скролирование к первому вхождению, если оно не на экране.Добавим скролл к первому найденному.
Можно, но оно будет не модальным. Иногда надо, чтобы пока ответа не получено, оператор не мог бы ничего сделать. А так он может управлять элементами, находящимися за окном.Да, собственное модальное окно сейчас создать нельзя. Возможно добавим модальные окна в будущем.
Было бы гораздо удобнее, если бы области внутри разных групп не пересекались, тогда можно было бы тиражировать переменные, относящиеся к типовому объекту, просто скопировав группу. Например, есть у нас группа group1, в ней три переменные - var1, var2, var3. Мы скопировали group1, получили group2, group3 и т.д., каждая из них будет содержать все те же var1, var2, var3.К сожалению это не подойдёт практически всем пользователям, т.к. переменные будут привязаны к группам, а вложенность групп часто довольно большая и имена переменных станут чрезмерно длинными. Также после переноса переменных из группы в группу, придётся переписывать скрипты. Поэтому мы не рассматриваем такой вариант.
Можно, но оно будет не модальным. Иногда надо, чтобы пока ответа не получено, оператор не мог бы ничего сделать. А так он может управлять элементами, находящимися за окном.Да, собственное модальное окно сейчас создать нельзя. Возможно добавим модальные окна в будущем.
А как насчет внедрения типа переменных "структура", как в объектно-ориентированных языках? Чтобы в одной переменной было некоторое множество полей, к которым можно обращаться по отдельности.В Simple-Scada 2 уже используется объектно-ориентированный язык, в скриптах (object pascal). При необходимости Вы можете написать любые собственные классы, структуры, создавать экземпляры этих классов и использовать их как угодно. Подробный пример для классов есть в руководстве (https://simple-scada.com/help/script/creatingclasses.html). Можно сделать структуру-контейнер для реальных переменных и работать с переменными через эту структуру. Но получится скорее всего что-то страшное, если нужна связь с переменными OPC-сервера. Если же нужны локальные структуры внутри скады, то ничего не мешает объявить их в глобальном модуле в скриптах.
И если нет возможности, то планируется ли - принимать команды через бота?
Нет, принимать команды от бота нельзя. В ближайшем будущем добавлять такие возможности не планируем, но в дальнейшем возможно добавим.
А можно получателей телеграмм сообщений группировать?Конечно, можно создать группу в Telegram и из скады отправлять сообщения в неё, вместо отдельных чатов. Также можно отправлять сообщения сразу в несколько отдельных чатов, перечисляя их ID через запятую в параметрах процедуры SendTelegram (https://simple-scada.com/help/script/sendtelegram.html).
Например SendTelegram указать не ID получателя, а группу получателей?
Группы формировать, так же в настройках.
также если бы вы сделали отдельный цвет для операторов (хотя бы присваивания)В редакторе кода используется стандартная подсветка синтаксиса языков Pascal/Delphi. Операторы присваивания (:=) в Delphi/Pascal обычно не подсвечиваются (как и в большинстве других популярных языков). Поэтому мы не планируем что-либо менять в плане подсветки синтаксиса.
Увеличить/уменьшить размер шрифта (на +-2 пикселя) можно через меню "Действия" -> "Увеличить шрифт" / "Уменьшить шрифт", или используя соответствующие им горячие клавиши (https://simple-scada.com/help/manual/hot-keys.html?anchor=script_editor).
не хватает реализации обратной связи.В будущем, возможно, добавим скрипты для обработки команд поступающих боту, но скорее всего не в самое ближайшее время.
сделайте задание положение текста в самих полях, и альфаканал фона поля.Выравнивание текста в поле будет в одном из будущих обновлений. За прозрачность фона поля отвечает свойство "Прозрачность" (Alpha).
Сейчас нельзя изменить формат сообщений о действиях оператора. Попробуем что-нибудь придумать в ближайших обновлениях.
Здравствуйте.Нет, вопрос конкретно о сообщениях, которые строятся на основе дискретных переменных.
Возможно Вы создаете сообщения по нарушению границ переменной? Если это так, то у переменой можно задать границы (https://simple-scada.com/help/manual/varextra.html), в опции "Сообщения о нарушении границ" выбрать к примеру "Для любых границ", тогда при нарушении границ переменной будут выдаваться автоматически генерируемые сообщения о нарушении граничных значений. Там же имеется возможность задать параметр "Зона нечувствительности (https://simple-scada.com/help/manual/varextra.html)" используемый для выдачи сообщений о нарушении границ переменной. Параметр предназначен для того, чтобы после выхода значения переменной из состояния аварии/предупреждения она не могла вернуться в него вследствие случайных колебаний значения переменной. В настройках проекта (https://simple-scada.com/help/manual/messet.html) имеется возможность задать свой текст для автоматически генерируемых сообщений о нарушении границ. Также, при необходимости можно управлять границами переменных (https://simple-scada.com/help/manual/managing-bounds-var.html) из клиента скады.
в одном проекте заказчик хочет получить сообщение, если ни один из пары насосов не работает, но при этом они работают посменно и до 15 секунд отсутствия обратной связи от двух сразу (в момент смены) допустимы. Нужно выдавать сообщение, если оба насоса выключены более 30 секунд.Данную задачу правильнее и проще решить на контроллере и передавать в скаду одну переменную, по которой выдавать сообщение.
контроль связи с удаленным прибором, отсутствие связи до минуты - допустимо, если больше - требуется выдать сообщение.Для контроля связи с ПЛК/устройством можно воспользоваться перечисленными ниже способами и например выводить предупреждение при потере связи.
При перезапуске проекта сообщение всегда выдается, подозреваю, потому что сообщения обрабатываются раньше, чем считывается переменная из прибора и срабатывается скрипт.Все верно. В скрипте по событию "Изменились переменные" можно использовать функцию IsFirstChange (https://simple-scada.com/help/script/isfirstchange.html), с помощью которой можно пропустить первое изменение переменной, что позволит избежать выдачи сообщения при перезапуске проекта.
lang id | 0 | 1 | 2
str name | | |
---------------------------------------------------
greeting | hello | привет | привіт
warning | warning | предупреждение | попередження
error | fault | сбой | збій
...
А фильтрация переменной в скаде происходит только во время обновления переменной в скаде.Да, скада никогда не создаёт отдельных периодических таймеров для обработки значения переменной и выполняет действия со значением только при изменении переменной. Если нужна постоянная регуляция значения переменной, то нужно использовать контроллер.
Также из предложений - когда-то в обозримом будущем реализовать механизм поддержки мультиязычности проекта, например, путем создания набора строк с одним именем и id языкаВ будущем обязательно добавим возможности для быстрой смены языка, это уже запланировано.
Если я привязываю шаблонное окно к барграфу, я не могу его открыть, пока не включу Enabled. Но когда я его включаю, барграф обретает ползунок регулирования и становится трекбаром. Вы могли бы как-то вывести видимость этого ползунка в отдельное свойство, либо же привязать доступность окон к какому-то другому/новому свойству барграфа вместо enabled?Сейчас, можно создать поверх уровня прозрачную фигуру (Shape) и привязать окно к ней, чтобы решить задачу. В будущем, возможно, добавим отдельное свойство, помимо Enabled.
metamorphogenesis, ИМХО, по первому вопросу СКАДА фильтрацию делает правильно. А вот OPC сервер настроен не верно. Видимо в нем в параметрах указано, что при ошибке опроса переменной нужно сохранять ее последнее значение. Измените этот параметр на что-то типа "сбрасывать в 0" и будет вам счастье.
опять же, когда применяем событие к группе объектов, событие не отображается у индивидуального объекта этой группы. Если выделить объекты в группу (даже если не все, а только два), то отображаетсяИсправим отображение событий в ближайшем обновлении.
при нажатии кнопки Win удаляется выделенный код скрипта из редактора. Исправьте плиз.Исправили.
И ещё из предложений - реализации систему групп пользователей. Чтобы применять права к группе сразу, потому что мой пример показывает, что может быть список из 10 мастеров и у каждого свой пароль, и в случае каких-то изменений в правах, их нужно делать для каждого отдельно.Да, группы скорее всего добавим в будущем.
Можно сделать так, чтобы каждый пользователь группы наследовал права группы, но если ему индивидуально какое-то право изменено, это изменение будет иметь преимущество перед правом группы
Цитироватьпри нажатии кнопки Win удаляется выделенный код скрипта из редактора. Исправьте плиз.Исправили.ЦитироватьИ ещё из предложений - реализации систему групп пользователей. Чтобы применять права к группе сразу, потому что мой пример показывает, что может быть список из 10 мастеров и у каждого свой пароль, и в случае каких-то изменений в правах, их нужно делать для каждого отдельно.Да, группы скорее всего добавим в будущем.
Можно сделать так, чтобы каждый пользователь группы наследовал права группы, но если ему индивидуально какое-то право изменено, это изменение будет иметь преимущество перед правом группы
Если под заголовком страницы Вы имеете ввиду панель на которой размещаются кнопки страниц, то у неё нет отдельного цвета, цвет берётся из цветовой схемы, заданной при разработке проекта (см. меню "Проект" - "Цветовая схема") и немного затемняется.
Искала как раз информацию по пользователям в simple-scada, подскажите тогда еще, могу ли я добавлять нового пользователя уже из клиента, не из среды разработки?Сейчас такой возможности нет, можно добавлять пользователей только на этапе редактирования проекта. В будущем обязательно добавим её, но трудно сказать когда именно.
Скорее всего я хотел написать цвет мигания. Чтобы было свойство цвета заливки и цвета мигания и у page, и у subpageСейчас у кнопок страниц и подстраниц можно менять только цвет. Постараемся добавить цвет мигания в будущем.
При запуске на ноутбуке с диагональю 17 и разрешением 4К (Win 10), работа с программой затруднена слишком мелким отображением текста и панели инструментов.
Имеется ли решение этого вопроса?
sir, я уже общался с разработчиками на эту тему (масштабирование), пока у них не в приоритетах. Немножко шрифт увеличивать можно в редакторе и на том спасибо.Мы не планировали вносить изменения по этому вопросу в ближайшем будущем. Но, рассмотрев различные варианты, обнаружили, что есть способ реализовать масштабирование интерфейса редактора проще и быстрее, чем мы изначально предполагали. Поэтому возможность масштабирования всего интерфейса редактора появится либо в ближайшем обновлении, либо в следующем.
Не могу найти как в демо-проекте задается изменения цвета элемента Level при выходе переменной за аварийно-предупредительные границы.Здравствуйте.
UPD: добавили опцию масштабирования интерфейса редактора в обновление 2.5.9.0.Огромное Спасибо за масштабирование!!!!
но шрифт в скриптах всеравно мелкий даже на максимальном увеличении. Хотелось бы еще 2-3 ступени в +.Да, в будущем добавим ещё несколько размеров шрифта в скриптах.
Есть пожелание, чтобы добавили возможность запуска клиента из редактора. На стадии тестирования проекта это очень ускорит процесс.При тестировании запустите клиент 1 раз и не закрывайте. В сервере есть кнопка Старт/Стоп проекта, можно спокойно тестировать изменения не дожидаясь перезапуска клиента. Конечно если бы кнопка старт/стоп проекта была в редакторе, было бы ещё удобнее, не нужно было бы переключаться на окно сервера, как кнопка запуска проекта в редакторе отчётов.
При запуске клиента уменьшить задержку проявления лого - красивости - красивостями, но при тестировании, только время отнимает и раздражать начинает.
Сейчас наткнулся на то, что в web интерфейсе, анимация картинки, в свойствах которой отключена цикличность, зацикливается.Добавили исправление в обновление 2.5.12.0.
Хотелось бы видеть не только время, но и дату сообщения в логах сервера SCADA. Когда сервер установлен как сервис, в web-интерфейсе только время. Если события редки, то без даты трудно определить когда это было.См. опцию "Отображать дату в журнале (https://simple-scada.com/help/manual/settings-simple-scada-server.html#:~:text=%D0%9E%D1%82%D0%BE%D0%B1%D1%80%D0%B0%D0%B6%D0%B0%D1%82%D1%8C%20%D0%B4%D0%B0%D1%82%D1%83%20%D0%B2%20%D0%B6%D1%83%D1%80%D0%BD%D0%B0%D0%BB%D0%B5)" (Options.exe -> Simple-Scada Server -> "Отображать дату в журнале").
И было просто замечательно при создании аварийных сигналов в меню сообщений, иметь простую галочку: "отправлять в Telegram".Варианты отправки сообщений E-mail/SMS/Telegram рассмотрены по ссылке (https://simple-scada.com/help/script/sendmess.html). В большинстве случаев отправка сообщений всем получателям из списка, указанного в настройках не подходит пользователям. Обычно требуется отправка разных сообщений разным получателям или группам получателей. Поэтому, простая галочка "отправлять в Telegram" не подойдет большинству пользователей. Обсудим и подумаем, возможно ли это реализовать не усложняя интерфейс и возможно в будущих обновлениях подобный функционал будет добавлен.
При закрытии окна крестиком, внесенные изменения сохраняются.Так и задумано, любые изменения в настройках сохраняются сразу после их изменения. Приложение настроек работает таким образом еще с первой версии(2014г.) и за это время пользователи не сообщали о каких либо неудобствах в использовании настроек. Пожелание учтем и обсудим.
Добрый день. Небольшой недочет в программе настройки. При закрытии окна крестиком, внесенные изменения сохраняются.Присоединяюсь к пожеланию. как пользователи мы просто смирились с этой особенностью :)
Хотя логичнее при закрытии по крестику: закрывать без сохранения внесенных изменений.
А по кнопке "Сохранить и закрыть" соответственно сохранять изменения и закрывать окно
const
TIMEOUT = 10;
begin
if communication_.IsGoodQuality = False then
begin
vrLinkTimer.Value := vrLinkTimer.AsInt + 1;
{ проверка на отсутствие связи }
if (vrLost.AsBool = False) and (vrLinkTimer.AsInt >= TIMEOUT) then
begin
vrLost.Value := True;
SendTelegram('Потеряна связь с OPC-сервером!');
end;
end
else
vrLinkTimer.Value := 0;
{ проверка на восстановление связи }
if (vrLost.AsBool) and (vrLinkTimer.AsInt < TIMEOUT) then
begin
vrLost.Value := False;
SendTelegram('Cвязь с OPC-сервером восстановлена!');
end;
end.
.....
if communication_.IsGoodQuality = False then QualityOPC.value := True else QualityOPC.value := False;
.....
...Необходимо сравнивать переменную с предыдущим значением. ... Используется универсальный скрипт...Хранить предыдущее значение переменной можно в описании переменной в виде текста или в одной из границ.
var i: integer;
j, k: int64;
begin
with Variable do begin
k := AsInt64; // на случай, если переменная изменится во время выполнения скрипта
j := k xor StrToInt64Def(Description, k); // вектор изменений переменной, при первом вызове скрипта
// сработает Def-условие (Description = '') и вектор = 0
for i := 0 to 63 do // цикл по битам
if GetBit(j, i) then AddMessage(Now, mkAlarm, // сообщение при изменении переменной
'Переменная ' + Name + ' бит ' + IntToStr(i) + ' изменился в ' + GetBit(k,i).ToISOString,
true, false);
Description := IntToStR(k); // запомнить текущее значение как предыдущее
end;
// отладочное сообщение примера: <имя переменной> <вектор изменений>
if j<>0 then Text8.Text := Variable.Name + ' ' + IntToHex(j, 16);
end.
Имеется универсальный скрипт, который контролирует качество переменной, и в зависимости от ее состояния передает в telegram об
отсутствии или восстановлении связи с устройством. Проблема в том, что универсальный скрипт вызывается и по изменению качества переменной и собственно по изменению значения самой переменной. Если меняется только качество переменной - все работает.
Но если меняется сама переменная - так же формируется лишнее сообщение. Опять же, выход я вижу в создании доп. внутренней переменной (либо таймер, либо пред. знач.) на каждое устройство. Или иметь в PLC переменную "пустышку", которая бы никогда не изменяло свое значение.
var
aVar: TM_Variable;
begin
// ищем переменную по имени "vrControl + Имя переменной которая вызвала скрипт"
aVar := GetVariableByName('vrControl' + Variable.Name);
if aVar <> nil then // если переменная существует
if not IsFirstChange then
begin
// проверка на восстановление связи
if (Variable.IsGoodQuality = True) and (aVar.AsBool = False) then
begin
aVar.Value := True;
SendTelegram('Cвязь с устройством ' + aVar.Description + ' восстановлена!');
end else
// проверка на отсутствие связи
if (Variable.IsGoodQuality = False) and (aVar.AsBool) then
begin
aVar.Value := False;
SendTelegram('Связь с устройством ' + aVar.Description + ' потеряна!')
end;
end else
aVar.Value := True;
end.
В какой последовательности выполняются скрипты?См. пояснения по ссылке (https://simple-scada.com/help/script/debugscripts.html?anchor=screxec).
Функция Delete работает со String, а свойство Variable.Name - Unicode...не смог преобразовать типы...String = UnicodeString. Ничего преобразовывать не требуется. Также, начиная с версии 2.5.13.0 нет необходимости конвертировать разные типы строк, т.к. тип данных UTF8String заменён на string и больше не используется. У Вас проблема вероятно в том, что в процедуру Delete (https://simple-scada.com/help/script/delete.html)Вы передаете свойство переменной .Name, а нужно передавать отдельную строковую переменную - см. пример кода по ссылке (https://simple-scada.com/help/script/delete.html). Создайте в скрипте локальную переменную, как в примере по ссылке (https://simple-scada.com/help/script/delete.html), запишите в нее имя переменной(Variable.Name) и затем используйте эту локальную переменную в процедуре Delete. Если не разберетесь, пришлите целиком скрипт, который не компилируется сюда или на почту support@simple-scada.com.
Но я натолкнулся на проблему, когда переменная указывает на тип аварии, а ее биты на то или иное устройство:Для разделения сообщений по устройствам можно использовать маски. Во вложении пример шаблона устройства с изменяемыми битами состояния (ошибками). Единственный параметр шаблона - это номер устройства, соответствующий номеру бита основной переменной и передаваемый через свойство Tag.
в этом случае при изменении значения переменной запускается сразу несколько "экземпляров" универсального скрипта.
пред. значение необходимо записывать только после выполнения последнего "экземпляра",- это дополнительные условия.
Пришлось прибегнуть к использованию доп. переменных и скрипта типа "изменились переменные".
var i: integer;
j, k: int64;
begin
with Sender as TM_Object do begin
k := AsInt64;
if Hint = '' then Hint := IntToStR(k); // начальное значение
j := (k xor StrToInt64(Hint)) and Setbit(0, Tag, true); // вектор изменений переменной для выбранного устройства (маска по Tag)
if j = 0 then exit; // изменения не относятся к данному устройству
AddMessage(Now, mkAlarm, // сообщение при изменении бита переменной
'Переменная ' + Variable.Name + ' бит ' + IntToStr(Tag) + ' изменился в ' + GetBit(k,Tag).ToISOString, true, false);
Hint := IntToStR(k); // запомнить текущее значение как предыдущее
end;
end.
Имеется ли функция "обновить теги" в редакторе переменных? (если тег существует в SS, ничего не делать, если его нет, добавить).При импорте переменных с OPC-сервера такой возможности нет. Поэтому, теги которые были удалены с ПЛК нужно удалить в редакторе переменных. Необходимые новые теги ПЛК нужно выбрать и импортировать с OPC-сервера. Такой функционал имеется при использовании импорта переменных из файла (https://simple-scada.com/help/manual/variable-import-csv.html). Если просто нажать кнопку "Импортировать", то существующие переменные при импорте из файла будут пропущены. Можно обновить свойства совпадающих по имени переменных нажав кнопку "Импортировать" удерживая клавишу "Shift" на клавиатуре.
либо мне все удалять, добавлять теги зановоУчитывайте, что при этом будут разорваны связи переменных с объектами(если они есть) и их нужно будет вновь связывать с объектами.
Есть ли функция "purge" для тегов: те теги которые никак не участвуют в проекте, удаляются.Такой функции нет.
Проблема в том, что в скрипте по нажатию той самой кнопки мне не найти шаблонное окно. Функции GetTemplateObj, GetWindowByName = nil.Указанные функции не предназначены для вызова окна из шаблона. Функция GetTemplateObject (https://simple-scada.com/help/script/gettemplateobject.html)позволяет обратиться к нужному объекту шаблона/шаблонного окна. Функция GetWindowByName (https://simple-scada.com/help/script/getwindowbyname.html) предназначена для поиска и работы с обычными окнами. Для вызова шаблонного окна из шаблона не требуется использовать скрипты - см. руководство по ссылке (https://simple-scada.com/help/manual/templandtemplwnd.html).
Есть шаблонное окно в шаблонном окне. Во втором шаблоне есть скрипт по событию OnInit. Его задача скрыть элементы, если привязанные к ним переменные отсутствуют в таблице переменных.Данную задачу можно решить с помощью функции GetTemplateObject (https://simple-scada.com/help/script/gettemplateobject.html). Допустим, в шаблонном окне есть заслонка Valve1 и изображение Image1, которые нужно скрывать если они не связаны с переменной. Тогда на событие OnInit шаблонного окна пишем такой код:
var
aObj: TM_Object;
begin
aObj := GetTemplateObject('Image1');
aObj.Visible := aObj.Variable <> nil;
aObj := GetTemplateObject('Valve1');
aObj.Visible := aObj.Variable <> nil;
end.
Моя же задача, заключается в том, чтобы по нажатию на насос разных экземпляров одного шаблона, в зависимости от подставновки %название окна% (обычный текст внутри шаблона), открывалось то или иное шаблонное окно (не экземпляр конкретного шаблонного окна, а именно совершенно разные шаблонные окна).В экземпляре шаблона возможна только статическая связь объекта и шаблонного окна. Для выбора одного из нескольких шаблонных окон (при их разумном количестве) можно использовать группу одинаковых объектов, в которой каждый объект связан с уникальным шаблонным окном.
var aStr: string;
i: integer;
begin
aStr := TM_Text(GetTemplateObject('Text1')).Text; // имя вызываемого шаблонного окна
for i := 1 to 3 do
with GetTemplateObject('Image' + IntToStr(i)) as TM_Control do Visible := aStr = Hint; // видимость объекта по совпадению имен
end.
Функция GetWindowByName предназначена для поиска и работы с обычными окнами
Моя же задача, заключается в том, чтобы по нажатию на насос разных экземпляров одного шаблона, в зависимости от подставновки %название окна% (обычный текст внутри шаблона), открывалось то или иное шаблонное окно (не экземпляр конкретного шаблонного окна, а именно совершенно разные шаблонные окна).Система шаблонов предназначена для создания множества однотипных объектов. Но при этом, не следует пытаться всеми возможными способами реализовать все через один шаблон. Если объекты отличаются(или как в Вашем случае нужно вызывать из шаблона разные шаблонные окна), то проще и удобнее будет создать несколько отдельных шаблонов для каждого объекта. В некоторых случаях, когда это действительно оправдано, можно воспользоваться способом предложенным pan2000.
если я использую значение "1" этого свойства, я не могу открыть вложенное окно в окне. Если же я использую значение "2" у меня появляется возможность открыть 2 "корневых" окна, но тогда теряется смысл происходящего. Проконтролировать это дело у меня не получилось, так как не нашел возможности с помощью скрипта закрыть шаблонное окноСвойство страницы "Окон" определяет максимальное количество одновременно открытых окон вне зависимости от порядка их открытия. Шаблон/шаблонное окно и объекты в нем не являются реальными объектами. Только после запуска проекта, на основе шаблона будет создано множество реальных объектов. А на основе шаблонных окон будет создано множество реальных окон. До запуска проекта эти объекты не существуют. Поэтому, из скрипта закрыть шаблонное окно не получится.
Если я использую свойство "максимальное число открытых окон" на странице в которой есть возможность открыть окно в окнеЧастичное решение проблемы "корневых" окон это использование переменной-флажка "Открыто корневое окно" (по событиям окна OnShow, OnClose), управляющего свойством Enable объектов выбора окна, т.е. "корневое" открытое окно блокирует прочие "корневые".
(к примеру в моем случае двойная вложенность, - окно в окне), возникает ситуация: если я использую значение "1" этого свойства, я не могу открыть вложенное окно в окне. Если же я использую значение "2" у меня появляется возможность открыть 2 "корневых" окна, но тогда теряется смысл происходящего.
Задача вывести на Scade одно "общую" уставку на все 10 plc.Для записи уставки в множество переменных можно создать внутреннюю переменную уставки и по ее изменению(используя скрипт "Изменились переменные (https://simple-scada.com/help/script/changed-the-variables.html)") записывать уставку в требуемые 10 переменных ПЛК.
Так же эту уставку "общую" можно поменять и вручную на каждом PLC.Это условие противоречит первому. Если на ПЛК уставка может измениться вручную, то это уже не общая уставка. И тогда не понятно, как она должна отображаться в скаде и как оператор узнает, что уставка изменилась на каком-то ПЛК.
Это условие противоречит первому. Если на ПЛК уставка может измениться вручную, то это уже не общая уставка.Имеется ввиду, что при изменении "общей" уставки на одном из PLC, уставки на других PLC так же приняли это значение и отобразились на SS.
Для такой задачи проще будет вывести в скаду все уставки с 10 ПЛККак раз хотел избавиться от 10 значений ввода, чтобы пользователю не вводить в 10 полей одно и тоже значение. (в действительности их больше).
Как я вижу решение этого вопроса:Вы можете использовать такое решение. Но учитывайте, что со стороны скады не существует действительно надёжного решения описанной задачи. Предложенный Вами вариант и любые другие варианты будут всегда работать с ошибками допуская перезапись на неправильное значение и различные значения на ПЛК и в скаде. Для решения данной задачи нужно, чтобы все ПЛК и скада работали в одном потоке (синхронно) и выполняли такты одновременно, что невозможно в описанных Вами условиях.
1. каждые, предположим 10 сек, сервер SS будет записывать постоянно всем 10 plc значение "общей" уставки.
2. при изменении на каком либо PLC "общей" уставки, SS по скрипту "изменились переменные" отправляет в следующей итерации (10 сек.) обновленное значение "общей" уставки всем 10 plc.
3. при восстановлении связи одного из PLC, SS игнорирует, предположим в течение 30 сек, измененное от этого PLC значение "общей" уставки, тем самым позволяя записать эту уставку по пункту 2.
Если я где-то ошибся, поправьте пожалуйста.
Как раз хотел избавиться от 10 значений ввода, чтобы пользователю не вводить в 10 полей одно и тоже значение. (в действительности их больше).Для решения этой задачи см. наше пред. сообщение:
2. при изменении на каком либо PLC "общей" уставки, SS по скрипту "изменились переменные" отправляет в следующей итерации (10 сек.) обновленное значение "общей" уставки всем 10 plc.Чисто гипотетически может возникнуть ситуация, когда уставки будут изменены на двух PLC. Причем на разные значения. Подумайте, как SS должна обработать данную ситуацию.
Для решения данной задачи нужно, чтобы все ПЛК и скада работали в одном потоке (синхронно)Могли бы вы пояснить, на каком-нибудь примере, необязательно касающегося моего вопроса. Просто чтобы привести мысли в порядок.
Волей случая назвал один из скриптов именем "Delete". Компилятор настойчиво ругался на другой скрипт, который до этого исправно работал, но в котором есть строковая функция "Delete".Большинство ключевых слов, процедур и функций добавлены в исключения и назвать ими скрипт не получится. В будущих обновлениях постараемся добавить в исключения и остальные процедуры/функций. Но даже при этом, стоит внимательно относиться к именованию скриптов, т.к. можно например создать свою глобальную процедуру/функцию, назвать скрипт аналогичным именем и получить ту же самую ситуацию.
В проекте Demo есть некоторое количество картинок - 20 разных насосов, вентиляторы итд. Когда начинаю создавать новый проект - доступа к этим рисункам из него нет.В Demo-проекте используются только стандартные изображения. Все доступные изображения библиотеки графики можно просмотреть через компонент "Изображение (https://simple-scada.com/help/manual/picture.html)" - > свойство "Текстура". Можно добавлять свои изображения и анимацию (https://simple-scada.com/help/manual/pictures.html) в формате ".png" (с глубиной цвета 32 бита или ниже) в папку "\Simple_Scada\Pictures". После этого они станут доступны в редакторе.
Как можно перенести их в свой проект?
Мое предложение на рассмотрение действий "Копировать свойства" и "Обновить свойства".Возможно добавим что-то подобное в будущем.
Какие 2-3 основные задачи сейчас, если коротко, у команды в приоритете? Очень интересно.поддержка архивации в PostgreSQL;
Рассматриваете ли Вы введение такого объекта как дуга? Интересует не совсем дуга, а как бы реализация стрелочного прибора с настройками?На ближайшее будущее таких планов нет. Пожелание обязательно учтем и в будущем возможно добавим такой компонент.
Есть ли возможность произвольно изменять порядок переменных в редакторе переменных?Есть возможность сортировки. Для сортировки переменных необходимо кликнуть ЛКМ на заголовке столбца, по которому требуется произвести сортировку. Например, для сортировки переменных по имени, нужно кликнуть по заголовку столбца "Имя". Возможность переноса вверх/вниз рассмотрим для добавления в будущие обновления.
Имеется ли какой-нибудь инструмент визуализации и редактирования графиков, предположим, отопления?Визуализация трендов возможна только через меню Тренды (https://simple-scada.com/help/manual/editor-trends.html), компонент "Временные тренды" (https://simple-scada.com/help/manual/time-trends.html) и через систему отчетов (https://simple-scada.com/help/report/index.html). Каждый тренд записывается по какой-то переменной, на графике откладывается точка соответствующая значению переменной и моменту времени (когда переменная приняла это значение). Как-то дополнительно отредактировать линию тренда, или динамически изменять её - нельзя.
Если делать через изображения, то Вы (Тема: Работа с изображениями) говорите, что много изображений плохо.Можно использовать любые варианты. Если Вам не подходит стандартный компонент, то вместо него можно добавить изображение на мнемосхему. В теме "Работа с изображениями" речь идёт о том, что не нужно использовать изображения когда для решения задачи подходит более простой компонент, например Shape (фигура). Если сравнивать одно цельное изображение с компонентом "Трубопровод" или "Линия", то изображение будет лучше по производительности.
Поэтому хотелось бы узнать на каком уровне данный вопрос?Возможность отрисовки под разными углами есть в списке задач, но она не будет реализована в ближайшее время.
Возможно, как предложение делать для объекта линия угол поворота не 360 градусов, а четко определенные углы, например 30,45 и 60.
Ну очень сильно не хватает данного функционала.
Например сейчас в базе значение сохраняется как "16,873685836792", но если не нужна такая точность, то можно сохранить значение как "16,87".Размер данных в БД не зависит от формы их отображения, т.к. колонка значения имеет фиксированный тип "double" и для хранения любого значения будет выделяться одинаковое количество памяти. Поэтому форма записи может влиять только на размер дампа, т.к. у MySQL нет двоичных дампов и данные дампа хранятся в виде текста.
Не обновляются ячейки в MessageViwer'e(завершено, длительность). Обновление происходит при смене вкладки проекта.Обнаружили причину, время не обновляется для сообщений у которых выключено добавление в список "Активные". Сделаем исправление в ближайшее время.
Не обновляются ячейки в MessageViwer'e(завершено, длительность). Обновление происходит при смене вкладки проекта.Исправление включено в версию 2.6.1.0. Для обновления нужно скачать её повторно и установить.
Визуализация трендов возможна только через меню Тренды, компонент "Временные тренды" и через систему отчетов. Каждый тренд записывается по какой-то переменной, на графике откладывается точка соответствующая значению переменной и моменту времени (когда переменная приняла это значение). Как-то дополнительно отредактировать линию тренда, или динамически изменять её - нельзя.Вы меня неправильно поняли. Тренды мне не нужны.
Есть некая линейная функция, которая описана двумя (или более) координатами. Координаты точек хранятся в plc.
"Визуализация" этого графика упростило бы задачу восприятия и более "вдумчивого" редактирования этой самой функции (графика).
В реализации новой системы архивации, есть возможность записать в архив значение переменной принудительно?Такой возможности нет, т.к. принудительная запись плохо влияет на производительность системы архивации.
После создания отчета на клиенте или сервере окно просмотра отчета открывается одновременно и на клиенте и на сервере. Версия 2.5.15.0Это говорит о том, что клиент на сервере и клиент на удалённом ПК имеют одинаковое имя, или имя клиентов не задано (равно пустоте ""), т.е. получается также одинаковое имя. Задайте клиентам разные имена(см. опцию "Имя этого клиента" (https://simple-scada.com/help/manual/settings-simple-client.html?anchor=servset)), сохраните настройки, перезапустите клиент и все будет работать правильно. Также возможно, что в качестве имени клиента в скрипте указана константа SS_ALL_CLIENTS, тогда отчет будет открываться для просмотра на всех клиентах (см. пример скрипта №4 по ссылке (https://simple-scada.com/help/script/reportbuild.html)). Если в скрипте задано конкретное имя клиента, например "my_client", на котором должен открываться отчёт, то лучше использовать функцию GetClientName (https://simple-scada.com/help/script/getclientname.html), тогда отчет будет открываться с любого клиента, который кликнет на кнопку "Построить отчёт":
var
aReport: TM_Report;
begin
aReport := ReportBuild('Отчет');
aReport.View(GetClientName);
end.
Добрый день. При массовом изменении переменных, не применяются параметры фильтра. Версия 2.6.0При массовом редактировании меняются только те свойства, которые были изменены после открытия окна редактирования (они подчеркиваются желтой полосой снизу, см. скрин). Остальные свойства не затрагиваются. После выбора фильтра задайте новые значения в полях, чтобы они изменились.
Получается, что вложенные шаблоны не работаютВложенные шаблоны работают. При использовании вложенных шаблонов, подстановки с одинаковым именем объединяются. Например: имеется пустой шаблон "А", а также шаблон "Б" с подстановкой "Ток насоса". Если в шаблон "А" два раза добавить шаблон "Б", то у шаблона "А" будет одна подстановка "Ток насоса", значение которой будет передано двум шаблонам "Б". Подробное описание работы "Шаблон + шаблонное окно"(что аналогично работе "шаблон + шаблон") можно посмотреть по ссылке (https://simple-scada.com/help/manual/templandtemplwnd.html).
Сейчас же если я добавлю такой шаблон, то у меня появится только два поля для заполнения Номер линии и номер устройства.Все верно, т.к. подстановки с одинаковым именем объединятся. Вы же хотите, чтобы для каждого экземпляра вложенного шаблона можно было заполнять отдельные подстановки. В текущей версии реализовать такое не получится. Обсудим и подумаем, что можно сделать в этом направлении и возможно в одном из будущих обновлений такой функционал появится.
Еще при добавлении шаблона в проект обьекты из шаблона и рамка размещения не совпадают в редакторе. На клиенте потом вроде нормально отображаются, но при компоновке очень не удобно.Данная ошибка исправлена в версии 2.6.1.0. Если используется более старая версия, то обновитесь до актуальной версии. Если используется версия 2.6.1.0, то скачайте и установите её повторно.
Пожелание обратить внимание на кнопку tab (а может и ошибка) - при нажатии кнопки "tab" после ввода имени пользователя в настройках ОРС сервера курсор делает пробел (часто не заметный)
При повороте изображения, не правильно рассчитываются предельные границы для перемещения.Добавим исправления в одно из ближайших обновлений.
По ряду обстоятельств в OPC сервере переменная int, хранится в формате string [0.######]. Изменить этот формат нельзя.Если переменная передаётся в скаду как строка, то тип данных выбранный в скаде смысла не имеет, она в любом случае будет отображаться как строка. Формат тоже не повлияет на неё, ведь формат используется для чисел, а не для строк.
begin
vrSingle.Value := StrToFloatDef(vrStr.AsStr, 0);
end;
{
(double)(IIF(vrOn1==1, (double)Данные.Value1, (double)0)) +
(double)(IIF(vrOn2==1, (double)Данные.Value2, (double)0)) +
(double)(IIF(vrOn3==1, (double)Данные.Value3, (double)0))
}
Еще вопрос почему для Источника_1 с интервалом 0 и Источника_2 с интервалом 10 секунд за один и тот же промежуток времени выдаются разные первые и последние значения одних и тех же переменных. А выражение {Источник2.Время.AddSeconds(-Источник2_Интервал)} влияет только на отображение времени. Получается, что перед генерацией отчета надо из Начала и Конца периода вычитать число секунд Интервала.В колонке "Время" по-умолчанию отображается время на конец интервала. Если нужно, то можете сместить его выражением, которое Вы привели, это никак не повлияет на работу типов обработки. Принцип работы периодических источников и типы обработки описаны здесь (https://simple-scada.com/help/report/periodicsourcework.html).
Есть ли возможность вывода web-страницы произвольного сайта непосредственно в окне Simpla-scada?Такой возможности нет.
Использую Demo версию программы для разработки проектов. Недавно редактор отчётов начал ругаться, что "Срок Вашей пробной версии истек". Переустановка не помогла. Что делать?Скачайте с сайта текущую демо-версию (https://simple-scada.com/download) и установите ее. После обновления окно "Срок вашей пробной версии истек" не должно выдаваться.
Можно ли как-то в скриптах получить наличие/количество аварийных/предупредительных сообщений?Для получения количества активных сообщений проекта можно использовать функцию SysGet (https://simple-scada.com/help/script/sysget.html)с константой SYS_ACTIVE_COUNT. Но следует учитывать, что данная функция возвращает количество всех активных сообщений проекта любого типа (https://simple-scada.com/help/manual/index.html?edit-message.html#prop_sost): Сообщение, Предупреждение, Авария.
следует учитывать, что данная функция возвращает количество всех активных сообщений проектажаль.
begin
if not IsFirstChange then // пропускаем первое изменение, чтобы скрипт не срабатывал при перезапусках проекта
if Variable.GetValueZone <> 0 then // если нарушена любая граница любой переменной из списка скрипта, то..
MyVar.Value := 1; // включаем сирену
end.
В идеале было бы доступ к событиям "воспроизводится звук сообщения", "воспроизводится звук предупреждения", "воспроизводится звук аварии"Пожелание учтем и возможно подобный функционал появится в будущем.
наверно предложите создать на каждую внешнюю переменную внутреннюю и обрабатывать аварии с помощью них. Но их кол-во запредельно для ручного заполнения.Такой способ целесообразен только если подобных переменных немного.
к тому же, если я ошибаюсь, пожалуйста, поправьте, внутренние переменные "кушают" точки лицензии?Считаются только внешние переменные, которые добавлены с OPC-сервера. Количество внутренних переменных не ограничено. В редакторе переменных (https://simple-scada.com/help/manual/variable-editor.html) на верхней панели отображается общее количество переменных проекта, а также количество внешних переменных(которые учитываются в лицензии) в скобках.
Будет ли организована, красивая поставка данных из БД, с их первоначальным типом, в таблицу в SCADA, а также в честь этого добавить свойство ячейке - value для понятного дела зачем?Таких изменений не планируется.
Добрый день!Timothy Clement, ай как классно! Тоже хотел предложить реализацию этой темы.
Хотелось бы видеть в списке локализаций также белорусский язык...
1. Возможно ли в палитре цветов добавить подсказку с наименованием константы цвета? Или в справке по скриптам в описании констант цветов добавить рядом в колонке как он выглядит? А то только в скриптах можно посмотреть.Константы цветов отличаются от цветов палитры. Если нужно перенести цвет в скрипты, то можно взять из палитры параметры цвета и подставить их в функцию RGB, например:
begin
txtA1.Color := RGB(100, 125, 20);
end.
Может есть возможность немного его "оттащить"? Или параметр ввести "отступ от края"?В ближайшее время такой возможности не появится.
3. А ещё по скриптам: когда разворачиваем список скриптов, переходим в скрипт - остальной список скриптов сворачивается. Можно ли не сворачивать список? при переключении между двумя скриптами потом опять ищешь то место предыдущего скрипта.Да, компонент групп сейчас допускает только одну развёрнутую группу. Изменим в будущих обновлениях.
Маленькое предложение по распределению свойств в окне свойств...Пожелание учтем и посмотрим, что можно сделать в этом направлении.
Было бы очень удобно, если бы на сайте рядом с версией стояла дата ее выхода.Историю версий с датами выхода можно найти в руководстве по ссылке (https://simple-scada.com/help/manual/whats-new.html).
Историю версий с датами выхода можно найти в руководстве по ссылке (https://simple-scada.com/help/manual/whats-new.html).
Совсем несложно добавить эту дату на основной экран или хотя бы на страницу с описанием новшеств версии.Добавили отображение даты в нижней части страницы новостей. При публикации последующих обновлений будем добавлять дату в название новости.
Будет ли осуществлен следующий функционал в обозримом будущем1. Нет;
Добрый день. Просто напоминаю - вдруг подзабыли :). Очень нужен, а то пол таблицы не видно.А почему у элемента Таблица нет горизонтального скролла? Можно ли его добавить?Постараемся добавить в будущих обновлениях.
Добрый день! Не соглашусь, что не востребованная функция. У меня почти в каждом проекте есть таблица по 30-35 столбцов. Чтобы данные вошли в такие ячейки нужно делать шрифт 8 и то еле входит, так как значения с запятой.
Поэтому было бы очень неплохо иметь горизонтальный скролл.
Пока не добавлен горизонтальный скролл, можно воспользоваться примером реализации горизонтального скролла для широкой таблицы.
Рассмотрите, пожалуйста, добавление новых пунктов у объекта Field свойство "Положение подписи"Пожелание обязательно учтем, но пока добавление такой возможности не планируется. При необходимости, вместо подписи можно использовать компонент "Текст (https://simple-scada.com/help/manual/text.html)".
В прошлых версиях они лежали в файле Retentive прямо в папке с проектом, где искать в версии 2.6.3.3 и старше?Значения переменных с автоматическим восстановлением сохраняются на серверном ПК в папку с именем проекта расположенную в директории "%ProgramData%\Simple-Scada 2" в файлы "Retentive.srf" и "RetentiveStr.srf".
при обработке тега BAD у переменной OPC. Изменение качества тега при том же значении не считается за изменение переменной и скрипт по изменению не срабатывает. Планируется ли добавить возможность срабатывания скрипта по изменению качества?Начиная с версии Simple-Scada 2.4.0.10 от 06 ноября 2020 скрипты OnDataChange (к которым относится событие "Изменились переменные (https://simple-scada.com/help/script/changed-the-variables.html)") срабатывают даже если значение переменной не менялось, а изменилось только её качество.
Trend1.Caption := NameTank_1.Value;
Trend2.Caption := NameTank_2.Value;
Trend3.Caption := NameTank_3.Value;
begin
if Sender is TM_Object then
with Sender as TM_Object do
SetTrendAll(0, Tag, VariableEx.ID, Variable.AsStr);
end.
По каким-то причинам эта подмена не всегда срабатывает при старте проекта: то не заменит имена вовсе, то заменит часть, то все заменит.Если клиент успеет подключиться к серверу до вызова SetTrendAll, то всё будет работать корректно. Если клиент ещё не подключен, то вызов SetTrendAll ни к чему не приведёт. У Вас так и получается, если повезёт и клиент подключится до вызова SetTrendAll, то всё работает, иначе - не работает.
Обнаружил некорректное отображение таблицы в web: содержимое ячейки съезжает вправо за пределы таблицыСкорее всего, проблема в том, что ширина второй колонки уходит за габариты таблицы (см. скриншот во вложении). Вам необходимо увеличить размер таблицы так, чтобы край таблицы не заходил на ячейки, либо уменьшить ширину второй колонки. Если дело не в этом, то пришлите нам для проверки на support@simple-scada.com текущую версию Вашего проекта из директории (..\Simple-Scada 2\Projects\).
Для объекта "Поле" для свойства "Подпись" может быть добавить параметр "Длина подписи"? А то выставляется автоматом в зависимости от длины текста. И ни как не отрегулировать.Добавлять дополнительные параметры для компонента "Поле (https://simple-scada.com/help/manual/field.html)" не планируется. Если штатная подпись для поля не подходит, то в качестве подписи можно использовать компонент Текст (https://simple-scada.com/help/manual/text.html).
Или как вариант, расширить перечень параметров как это сделано у объекта "Уровень" для свойства "Поле".
Можете прокомментировать?
ЦитироватьВ идеале было бы доступ к событиям "воспроизводится звук сообщения", "воспроизводится звук предупреждения", "воспроизводится звук аварии"Пожелание учтем и возможно подобный функционал появится в будущем.
Есть ли какие сдвиги по этому вопросу?В обозримом будущем добавление такого функционала не планируется.
В обозримом будущем добавление такого функционала не планируется.насколько я понял на данный момент, если нужно нужно вывести звук аварии где-то в другом месте отличном от динамиков компа, нужно отдельно обрабатывать все переменные в коде скады или контроллера и штатные возможности(вложение) не помогут.
добавлены текстуры с анимацией кругового и арочного индикатора. Примеры реализации индикаторов добавлены в Demo-проект (страница Компоненты - Радиальный индикатор);круговой и арочный индикатор - огонь!
1. Запуск симулятора среды исполнения из редактораДа, планируем добавить быстрый запуск клиента из редактора, в том числе в режиме симуляции.
2. Перетаскивание окна редактора на другой мониторСкорее всего добавим выбор монитора (в полноэкранном режиме), чтобы редактор запускался на указанном мониторе. Сейчас перетаскивать окно редактора можно только в оконном режиме, как обычное окно. Для запуска редактора (или клиента) в оконном режиме нужно в утилите настроек (https://simple-scada.com/help/manual/settings-simple-editor.html) задать размер окна по ширине и высоте ниже чем разрешение экрана (например, для монитора 1920x1080 выбрать размер окна 1600x900).
3. Открытие нескольких проектов в разных окнах редактора
6. Генерацию окон скриптов и переменных не перекрывая главный экран и возможность их перетаскиванияНе планируется. Для переноса данных между проектами добавим отдельное меню импорта.
5. Возможность не искать переменную или метод в окне скриптов через CTRL+Пробел, а их подстановку при вводе имениКогда Вы открываете список методов через Ctrl+Пробел (или вводите текст после нажатия Ctrl+Пробел), то в этом списке остаются только строки, которые соответствуют ранее введённому тексту (см. скрин во вложении), остальные удаляются, чтобы не пришлось искать в полном списке из тысячи строк. Или Вы просто хотите чтобы при вводе любого текста автоматически открывался список методов, без нажатия CTRL+Пробел?
7. Ввод значение и с экранной клавиатуры и с обычной, а не как сейчас или то или тоСейчас при включении экранной клавиатуры, ввод текста (имени пользователя/пароля, или значения любых строковых переменных) возможен и с неё и с обычной клавиатуры. Для ввода чисел используется маленькая экранная клавиатура, и она не позволяет использовать обычную клавиатуру. Так не должно быть, исправим в одном из ближайших обновлений.
Есть очень много более популярных задач, они решаются в первую очередь. Горизонтальный скролл в таблицах до сих пор слабо востребован.Поднимаю тему!
// Пример как мог бы выглядеть скрипт
// по изменению цвета объекта при превышении определенного значения
begin
// Проверка, что свойства объекта заполнены
if TextList[0]=nil OR
TextColor[0]=nil OR
TextColor[1]=nil then
exit;
// Изменение цвета
if Sender is TM_Object then
with Sender as TM_Object do
If AsInt>TextList[0].AsInt then
Color := ColorList[0]
else
Color := ColorList[1];
end.
Можно ли как-то вызвать универсальный скрипт из другого скрипта?Такой возможности нет. Если нужно выполнять один и тот же код из разных скриптов, то в глобальном модуле (https://simple-scada.com/help/script/globalmodule.html) можно создать собственную процедуру и вызывать ее в нужных скриптах.
Нет возможности сделать вертикальный текст.На данный момент текст можно расположить вертикально только способом описанным по ссылке (https://simple-scada.com/help/manual/faq-editor.html?anchor=q9).
Объединение переменных в группы в редакторе переменных удобно. Но иногда приходится менять свойства однотипных переменных в разных группах. Приходится поочередно заходить в каждую группу и редактировать поочередно по одной переменной.Возможно Вам подойдет редактирование переменных через импорт (https://simple-scada.com/help/manual/variable-import-csv.html)/экспорт (https://simple-scada.com/help/manual/export-var.html)переменных в файл Excel.
Есть горячие клавиши для перехода в редактор переменных, трендов, скриптов и т.п. А для перехода в редактор страниц нет.Для возврата на основной экран используйте клавишу Escape.
Для создания резервной копии тоже нужна горячая клавиша. Может сделать создание резервной копии по времени.Имеется возможность настроить автоматическое создание резервных копии при внесении изменений в проект - см. описание опции "Создавать резервные копии проектов (https://simple-scada.com/help/manual/settings-simple-editor.html)".
В одном из проектов я вместо нескольких отчетов сделал один, но на несколько страниц. При генерации проекта отключал доступность страниц. Так намного быстрее создавать отчеты, не надо в каждый проект добавлять одни и те же переменные и источники. Но заметил, что генерация многостраничных отчетов занимает очень много времени.Это плохой способ. Чем больше источников и переменных добавлено в отчет, тем больше выборок будет производиться из БД, что конечно скажется на скорости построения отчета. Если требуется строить однотипные отчеты, то нужно использовать "Динамический отчет (https://simple-scada.com/help/report/dyn-rep.html)".
На данный момент текст можно расположить вертикально только способом описанным по ссылке (https://simple-scada.com/help/manual/faq-editor.html?anchor=q9).Тогда наверное лучше сделать фоновую картинку с вертикальным текстом. Можно узнать какой шрифт используется для отображения?
Возможно Вам подойдет редактирование переменных черезИмпорт/экспорт удобен для внесения больших изменений в переменные проекта.
Для возврата на основной экран используйте клавишу Escape.
Можно узнать какой шрифт используется для отображения?Используется шрифт Roboto.
А если проект только что сохранился, то можно случайно нажать лишний раз и вообще выйти из редактора проекта.Возможно Вы используете очень старую версию Simple-Scada. В текущих версиях выйти из редактора при нажатии клавиши Escape нельзя. Для выхода из редактора используется сочетание клавиш Shift + Escape.
После обновления на версию 2.6.9.0 перестали отображаться в поле данные с opc.da.В работу с DA-серверами изменения не вносились с 2018г. С возможными причинами и рекомендациями по данному вопросу можно ознакомиться по ссылке (https://simple-scada.com/help/manual/faq-other.html?anchor=q7). Если не разберетесь, то пришлите для проверки на support@simple-scada.com текущую версию Вашего проекта из директории (..\Simple-Scada 2\Projects\), целиком папку с логами "..\Simple-Scada 2\Logs", файл конфигурации OPC-сервера и укажите переменные, с которыми имеются проблемы.
В работу с DA-серверами изменения не вносились с 2018г.Спасибо, решил вопрос, при переустановке слетели настройки opc da в плане пароля учетной записи. О требовании пароля в инструкции прям в шапке написано. Спасибо за инструкцию, уже не раз выручала)
Планируется ли в следующих версиях Скады возможность изменения цвета в компоненте Флажок.Менять цвет объектов в зависимости от значения связанных с ними переменных можно через скрипты (https://simple-scada.com/help/script/colorchange.html). Каких-либо изменений не планируется.
в проекте необходимо обращаться к битам переменных и в компоненте Флажок этот способ есть, но не хватает также изменения цвета самого компонента. То есть изменилась переменная - изменился цвет.Для изменения цвета компонента "Флажок (https://simple-scada.com/help/manual/checkbox.html)" создайте новый скрипт (https://simple-scada.com/help/script/via-script-editor.html) с типом события "Универсальный скрипт (https://simple-scada.com/help/script/universal-event.html)". В примере кода ниже, выполняется проверка состояния флажка (свойство "Checked") и в зависимости от состояния изменяется цвет.
begin
if Sender is TM_CheckBox then // проверяем, что Sender это флажок
with Sender as TM_CheckBox do // приводим Sender к типу "TM_CheckBox"
if Checked then // если флажок установлен, то
Color := clRed // меняем цвет на красный
else // иначе
SetInitialColor; // вернуть объекту изначальный цвет (цвет на момент запуска проекта)
end.
при большом количестве разных обьектов с многими параметрами это занимает много времени ( написание скриптов)Нужно использовать универсальные скрипты (https://simple-scada.com/help/script/script-types.html), тогда не потребуется писать отдельный скрипт для каждого объекта. Примеры часто используемых скриптов можно найти в руководстве по ссылке (https://simple-scada.com/help/script/sample-scripts.html). Если не разберетесь, то пришлите на support@simple-scada.com текущую версию Вашего проекта из директории "..\Simple-Scada 2\Projects\" и опишите, что именно не получается сделать.
Да со скриптами все понятно
Можно запутаться так как придется постоянно смотреть какая переменная в скрипте и количество скриптов будет конкретно у меня в районе 500.Вы явно не поняли, как работают универсальные скрипты. Для задачи, которую Вы описали можно использовать один универсальный скрипт. При желании, Вы можете прислать текущую версию Вашего проекта и указать, для каких именно объектов требуется написать скрипт, мы сделаем пример универсального скрипта в Вашем проекте.