TraceMode 6.08 и вывод данных из MS SQL в таблицу | ПЛК и АСУТП

tm1-1Уже довольно давно пишу новый проект на скаде TraceMode 6.
Т.к. это мой первый опыт создания проекта на ТМ6, совершенно предсказуемо столкнулся со многими для себя проблемами и неясностями. Как всегда, самое загадочное в новых осваиваемых системах находишь там, где ожидаешь меньше всего.

Вот самая что ни на есть банальная ситуация- нужно предоставить результат выборки данных из БД MS SQL 2005 в табличном виде. Как это реализовать?

Любой, имеющий опыт программирования на Делфи, Билдере или другой аналогичной IDE скажет «А чего тут думать, просто кидай на форму DBGRid, настрой его и работай».

Но ребята из Адастры не сторонники лёгких путей для своих клиентов! У них не все так просто.
Да, некий аналог DBGrid’a для SQL в ТМ6 есть, хотя и появился только в версии 6.07(!!!!!!)
В ТМ этот DBGrid называется ГЭ «База данных».

Вот как выглядит ГЭ «База данных» в рабочей программе с выведенными по запросу SELECT данными:
GE_BASA_DAN

 

В данном случае таблица настроена на SQL-запрос SELECT для выбора 3-х столбцов с типами данных DataTime, Float, Float.

В ГЭ «База данных»  нельзя задавать нормальные заголовки столбцам и выставлять формат чисел float.
Слово техподдержке:
«
1. Имена столбцов в ГЭ «База данных» образуются как «имя таблицы БД».«имя столбца в таблице». Кириллица поддерживается.
2. Настройки, позволяющей изменить количество знаков после запятой, у этого ГЭ нет.
3. Данные в ГЭ «База данных» обновляются только по нажатию на кнопку «Запрос». 
«

В верху графического элемента есть такой сине-зелененький значек. Это и есть кнопка «Запрос», о которой написал в 3-м пункте представитель техподдержки.
Вывод данных осуществляется только по нажатию на этот кракозяблик. Вывести данные по нажатию на другую кнопку, например «Суточные значения» нельзя.
От себя добавлю- ширину столбцов тоже изменять нельзя.

Положив руку на сердце, спросим себя, хватит ли разработчику стыда отдать заказчику систему с таким интерфейсом? Вряд ли. Да и не примет вменяемый заказчик такую «работу».

Что можно сказать по штатному графическому элементу для вывода данных из БД MS SQL?
Если без мата- использовать его невозможно. Эта работа была сделана разработчиками ТрейсМоуд 6.08 по принципу «на отъебись».
Что бы на вопрос «Как вывести данные по SQL? » клиентам можно было ответить «Используйте ГЭ База Данных».

Как еще представить данные в виде таблицы?
«
Можно сделать таблицу из ГЭ «Текст».
Если в МРВ есть поддержка документирования, то можно формировать таблицу в html-файле и выводить ее на экран через ГЭ «Текст из файла». 
«
Вариант «Текст из файла» рассматривать не будем, это убого.
А вот таблицу из ГЭ «Текст» я сделал. Получилось неплохо.

Вот та же таблица, построенная из ГЭ «Текст»:
Mytab_tm6

Принцип построения такой таблицы следующий:

  1. Создаем SQL-запрос SELECT на 3 аргумента(в моем случае).
  2. Создаем 3 канала класса  Call.ChGroupReq.
  3. В каждом канале создаем определенное число аргументов. В моем случае- 72 аргумента.
  4. Привязываем к каждому аргументу  SQL-запроса канал.
  5. Выкладываем из ГЭ «Текст» таблицу. Теперь каждый ГЭ «Текст» становится «ячейкой» таблицы.
  6. Привязываем каждую такую «ячейку» к соответствующему аргументу соответствующего канала.
  7. Создаем кнопку для запуска SQL-запроса SELECT. По нажатию на эту кнопку на вход SQL-запроса(параметр In канала класса SQLQuery) подаем 65535.
  8. Произойдет выполнение запроса SELECT, в результате чего получаемые данные по порядку запишутся в аргументы каналов  Call.ChGroupReq.
  9. В ГЭ «Текст» отобразится результат выполнения SQL-запроса.
Казалось бы, Хэппи энд. Но не тут-то было!
Все работает замечательно пока кол-во полученных строк в результате SELECT  равно или больше кол-ву аргументов в Call.ChGroupReq.
Если кол-во строк меньше,то с проектом творится что-то неладное. Появляются какие-то глюки, тормоза а в файл <название_проекта.txt> в папке проекта для профайлера пишутся такие записи:
(14:8:38) WRN_RTM:wrong entry(g)
(14:8:39) WRN_RTM:wrong entry(g)
(14:8:39) WRN_RTM:wrong entry(g)
(14:8:40) WRN_RTM:wrong entry(g)
(14:8:41) WRN_RTM:wrong entry(g)
(14:8:41) WRN_RTM:wrong entry(g)
(14:8:42) WRN_RTM:wrong entry(g)

Это значит, что в проекте есть привязка к несуществующему аргументу. Понятно, что если такой проект не выключить, файл <название_проекта.txt> разрастется и забьет собою весь винт.

И вот финал:
«
Ошибка возникает из-за того, что некоторые из аргументов канала вызова экрана ссылаются на аргументы канала Call.ChGroupReq, которых не существует (количество аргументов в канале Call.ChGroupReq изменяется в зависимости от объема выборки). 

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

Механизм SubNum имеет очень широкий функционал, который позволяет создавать в документе таблицы различной формы. Размер этих таблиц будет изменяться в зависимости от числа аргументов каналов Call. Смотрите раздел справочной системы «Номер SubNum». 
«

Т.е. согласно официальной позиции компании Адастра есть только один корректный способ отображения данных из SQL- сформировать Документ и затем открыть его в программе посредством ГЭ «Текст из файла».
И это только в том случае, если приобретен более дорогой монитор реального времени МРВ ДОК+.
К тому же, напомню, под рукой у нас всегда есть уёбищный ГЭ «База данных» :)))))))))))

P.S. Несмотря на сырость TraceMode 6.08 их техподдержка в лице форума и саппорта по емейлу работает хорошо, ребята отвечают на поставленные вопросы четко и оперативно.

Добавить комментарий

Ваш e-mail не будет опубликован.

Подтвердите, что Вы не бот — выберите человечка с поднятой рукой:
Confirm that you are not a bot - select a man with raised hand:

Подпишитесь на нашу рассылку


Copyright © 2016. Перцух Алексей

Индекс цитирования