8.2.4. Расчетные поля текстовых документов
Табл. 8.11 Панель «Стандартная»
Вид кнопки
|
Название кнопки
|
Пояснение
|
|
Вырезать (Ctrl+X)
|
Вырезать выделенный блок в документе и записать в буфер обмена
|
|
Копировать (Ctrl+C)
|
Копировать выделенный блок в буфер
|
|
Вставить (Ctrl+V)
|
Вставить текст из буфера
|
|
Найти (Ctrl+F)
|
Поиск по контексту (см. Рис. 8.9)
|
|
Очистить (Ctrl+Del)
|
Удалить выделенный блок
|
|
Отмена (Ctrl+Z)
|
Отмена действия
|
|
Повтор (Shift+Ctrl+Z)
|
Повтор действия
|
|
Цвет символов, шрифт и размер шрифта для вновь вводимого текста или для выделенного блока
|
|
|
Выделенный шрифт
|
Сменить шрифт выделенного блока на выделенный шрифт
|
|
Курсив
|
Сменить шрифт выделенного блока на курсив
|
|
Подчеркивание
|
Выделить текст подчеркиванием символов
|
|
Использованные стили
|
Стили текста, которые использовались при вводе текста данного документа
|
В любом месте документа можно создать поле ввода, из которого будут браться исходные данные, или поле вывода, в которое будут выводиться результаты расчёта. Полю можно присвоить имя переменной и использовать это имя в других расчётных полях. Поля ввода и вывода можно размещать в произвольных местах документа. Исходными данными для расчётных полей могут быть:
- данные из других расчётных полей текущего документа
- данные из расчётных полей других документов
- телеизмерения текущие и архивные
- телеизмерения интегральные – расход и мощность приведенная
- телесигналы.
Допускается работа с массивами – многострочные поля ввода и вывода, данные которых обрабатываются по одной и той же формуле. Например, колонки – количество, цена и стоимость. Стоимость есть произведение количества на цену. Для описания такой таблицы достаточно описать две колонки полей ввода, каждая со своим идентификатором, а также одну колонку – поле вывода. Формула, по которой выполняются вычисления, вводится при описании колонки полей вывода один раз. Количество строк для всех трех полей должно быть одинаковым, а сами поля могут быть расположены в произвольных местах документа. Допускается вычисление по разным формулам для разных элементов многострочного поля вывода. Для создания расчётного поля:
- установить курсор в левый верхний угол поля и нажать клавиши Shift+F2
- с помощью клавиш Shift+стрелка влево и Shift+стрелка вниз задать размер поля, в режиме определения размеров поля клавишами - стрелками можно перемещать его в пределах документа
- нажать клавишу Enter – появится окно описания параметров расчетного поля (см. Рис. 8.15), в котором следует выбрать тип поля (поле ввода или поле вывода)
- имя поля задается в том случае, когда данные этого поля используются при определении других полей вывода
- признак «Сохранять все элементы» устанавливается, если описывается массив и при определении других полей вывода есть ссылки на элементы данного массива (используется переменная с индексом);
- признак «Изменить формулу во всех элементах» установлен по умолчанию, его следует убирать для тех элементов массива, которые вычисляются по формуле отличной от остальных.
Рис. 8.13 Окно описания расчётного поля
Для удаления расчётного поля:
- Установить курсор на поле;
- Нажать на клавиши Shift+F2, затем на Delete;
- Подтвердить удаление в дополнительном окне.
В имени поля могут быть использованы русские и латинские буквы и цифры. Имя должно начинаться с буквы и может содержать не более 16 символов. Заглавные и прописные буквы допустимы, но не различаются (воспринимаются как заглавные). Не рекомендуется использовать имена, состоящие из двух латинских букв и комбинации буквы и цифры.
Примеры имён расчётных полей:
- Частота
- Х11
- Zr1A
- Error
Индекс массива указывается в квадратных скобках начиная с нуля. Например, Цена[1], Количество[0]. Индекс может вычисляться по формуле, то есть в квадратных скобках может заключаться произвольное алгебраическое выражение.
При использовании ссылок на поля других документов имя поля записывается следующим образом - {&}имя_поля{[Indeks]}{@имя_документа{@имя_каталога}}.
где
- & - признак внешнего поля, фигурные скобки обозначают, что содержимое в них может присутствовать, а может и отсутствовать.
Так как в разных документах могут быть поля с одинаковыми именами, то во избежание ошибок, после имени поля через знак “@” следует указать имя документа, а при необходимости, когда в разных каталогах встречаются документы с одинаковыми именами, через знак "@" и имени каталога. Например:
- &Сумма@Договор3 – содержимое поля "Сумма" возьмётся из документа "Договор3"
- &Сумма@Договор3@Учет – содержимое поля "Сумма" возьмётся из документа "Договор3", который находится в каталоге "Учет".
В ссылке на имя документа и имя каталога недопустимы пробелы. Для сложных составных имен в этом случае рекомендуется использовать не пробел, а символ подчеркивания.
В расчётных полях можно использовать предопределенные переменные:
- ДАТА - текущая дата в виде количества дней от 01.01.1970 года;
- ВРЕМЯ - текущее время в виде чч:мм:сс от нуля часов текущей даты;
- ИНДЕКС - индекс массива для многострочного поля (отсчёт с нуля);
- UTIME -текущее время в виде количества секунд от 01.01.1970 года.
Для переменных типа «Дата» день месяц и год при вводе следует отделять друг от друга точкой. Год можно вводить полностью (все четыре цифры) или две последние цифры года.
Для переменных типа «Время» можно задавать часы минуты и секунды, отделяя их, друг от друга двоеточием. Одна секунда в десятичном эквиваленте равна 1/60. Например, число равное 65+3/60 соответствует времени 01:05:03 (1час 5мин 3сек).
В Табл. 8.12 приведены форматы расчетных полей ввода.
Табл. 8.12 Форматы полей ввода
Формат поля
|
Пояснение
|
Десятичное число
|
Разделитель - точка или запятая
|
Денежный формат
|
В качестве разделителя рублей и копеек используется дефис или сокращение «руб.» или слово «рублей» в соответствии с правилами русского языка
|
Расчётная формула
|
В виде алгебраического выражения
|
Дата
|
В любом из форматов, приведённых в описании форматов полей вывода
|
|
|
Время
|
В формате чч:мм:cc, например, 23:15:59
|
Произвольный текст
|
|
В Табл. 8.13 приведены форматы расчетных полей вывода.
Табл. 8.13 Форматы полей вывода
Формат поля
|
Пояснение
|
Числа >1024.00
|
Число, разделитель – точка
|
Числа >1024,00
|
Число, разделитель – запятая
|
Деньги > 1024-00
|
Деньги, в качестве разделителя рублей и копеек используется дефис
|
Деньги >1024 руб. 00 коп.
|
Деньги, в качестве разделителя используется сокращение «руб.»
|
Деньги >1024 рубля 00 коп.
|
Деньги, в качестве разделителя используется слово «рублей» в соответствии с правилами русского языка
|
Деньги > Прописью (руб.)
|
Деньги, выводится сумма прописью. В качестве разделителя используется сокращение «руб.»
|
Деньги > Прописью (рубля)
|
Деньги, выводится сумма прописью в качестве разделителя используется слово «рублей» в соответствии с правилами русского языка
|
Дата >ДД
|
Дата, выводится день, например, из даты 21 декабря 2009 года будет выведено - 21
|
Дата >ММ
|
Дата, выводится месяц, например, из даты 21 декабря 2009 года будет выведено – 12
|
Дата >ГГ
|
Дата, выводится год, например, из даты 21 декабря 2009 года будет выведено – 09
|
Дата >ДД.ММ.ГГ
|
Дата выводится в указанном формате, например, дата 21 декабря 2009 года будет выведена - 21.12.09
|
Дата >ДД.ММ.ГГГГ
|
Дата выводится в указанном формате, например, дата 21 декабря 2009 года будет выведена - 21.12.2009
|
Дата >ДД месяц ГГГГ
|
Дата выводится в указанном формате, например, дата 21 декабря 2009 года будет выведена - 21 декабря 2009
|
Дата >месяц (январь)
|
Дата, выводится месяц, например, дата 21 декабря 2009 года будет выведена - декабрь
|
Дата >месяц (января)
|
Дата, выводится месяц, например, дата 21 декабря 2009 года будет выведена – декабря
|
Дата >день недели
|
Дата, выводится день недели, например, дата 21 декабря 2009 года будет выведена – понедельник
|
Время
|
Время, выводится в формате чч: мм: сс, например, 23:15:59
|
Текст из поля ввода
|
Текст из другого расчётного поля
|
Для полей вывода можно определить десятичную точность отображения информации. Задаётся количество знаков после запятой, до которого будет округляться результат вычисления по формуле.
Прочие форматы считаются денежными и для них принято округление по умолчанию - два знака после запятой, то есть до копейки. Округление производится в соответствии с общепринятыми правилами.
Перечень операций доступных при программировании формул:
- - смена знака, вычитание;
^ - возведение в степень, например, при NNN=5 для выражения NNN^3 результат вычисления будет 125;
* - умножение;
/ - деление;
+ - сложение;
() - скобки определяют последовательность действий в формуле;
! - сумма элементов массива, имя которого задано после этого знака;
A21[0,5] - среднее значение элементов массива А21 в диапазоне с индексами от 0 до 5;
!A21[2,6] - сумма элементов массива А21 в диапазоне с индексами от 2 до 6.
Имена телепараметров могут быть использованы в качестве имен полей ввода/вывода в формуле и задаются следующим образом:
#TCк:н:о - телесигнал;
#ТТк:н:о - телеизмерение текущее;
#PUк:н:о или #ПУк:н:о - телеизмерение интегральное, например - расход электроэнергии по счётчику;
#ТИк:н:о или #TIк:н:о - телеизмерение интегральное, например - приведённая мощность (среднечасовая нагрузка).
При этом в качестве параметров «к», «н», «о» могут быть только числа, которые определяют:
«к» - номер канала;
«н» - направление (номер контролируемого пункта);
«о» - номер объекта.
Для идентификаторов «ТС», «ТТ», могут быть использованы заглавные буквы русского, а также прописные и заглавные буквы латинского алфавита.
Для идентификаторов «ТИ», «ПУ», могут быть использованы заглавные буквы русского алфавита.
Для идентификаторов «TI», «PU», могут быть использованы прописные и заглавные буквы латинского алфавита.
Например, #TТ0:7:15 - вычисляется мгновенное значение текущего телеизмерения по каналу - 0, направлению (КП) - 7, объект на КП - 15.
Предоставляется возможность доступа к значениям текущих и интегральных телеизмерений из архива. Для этого необходимо задавать дату и время выборки телепараметра из базы данных. Например:
#ТТк:н:о[ДАТА;ВРЕМЯ-60] - выбирается значение телеизмерения за текущую дату, которое было час назад;
#ТНк:н:о[дата1;время1;дата2;время2] - выбирается среднечасовая мощность на интервале времени от дата1 и время1 до дата2 и время2, параметры даты и времени могут быть заданы предопределенными переменными;
#ТТк:н:о{10} - подставляется альтернативное значение равное 10 при недостоверности телеизмерения;
#ТТк:н:о{} - выбирается значение телеизмерения независимо от достоверности, «пустую» альтернативу настоятельно рекомендуется использовать для всех телепараметров в правой части выражений – в этом случае выражение будет пересчитываться при пропадании связи с КП.
При выборке текущих телеизмерений из базы данных можно указывать номер ретроспективы. Нумерация архивов текущих телеизмерений общая для «ретроспектив ТИТ» и «ретроспектив средних ТИТ». Номер ретроспективы можно узнать в описании структуры сервера телемеханики. Нумерация строк ретроспективы начинается с единицы.
Пример запроса текущих телеизмерений из конкретной ретроспективы:
#ТТк:н:о[ДАТА;ВРЕМЯ-60][1] - выбирается значение телеизмерения за текущую дату, которое было записано час назад в ретроспективу с номером 1.
При использовании полей из других документов с данными телеметрии не отслеживаются изменения данных во времени. Из другого документа будет считано содержимое полей на момент их последнего перерасчёта в том документе.
Перечень математических функций расчетных полей (x - произвольное выражение):
SIN(x) – синус;
COS(x) – косинус;
TAN(x) – тангенс;
ASIN(x) – арксинус;
ACOS(x) – арккосинус;
ATAN(x) – арктангенс;
SINH(x) – синус гиперболический;
COSH(x) – косинус гиперболический;
TANH(x) – тангенс гиперболический;
ASINH(x) – арксинус гиперболический;
ACOSH(x) – арккосинус гиперболический;
ATANH(x) – арктангенс гиперболический;
ABS(x) – абсолютное значение;
SQRT(x) – корень квадратный;
SQR(x) – значение в квадрате;
POW10(x) – десять в степени “x”;
EXP(x) – число “е” в степени “х”;
ROUND(x) – округление;
TRUNC(x) – отбрасывание дробной части;
LOG(x) – логарифм натуральный;
LOG10(x) – логарифм десятичный;
STATUS(канал,кп,объект) – то же, что #TCканал:кп:объект;
ANALOG(канал,кп,объект) – то же, что #TTканал:кп:объект;
ANALOG(канал,кп,объект,дата,время) – то же, что #TTканал:кп:объект[дата;время];
ACCUM_L(канал,кп,объект) – то же, что #ТИканал:кп:объект;
ACCUM_L(канал,кп,объект,дата) – то же, что #ТИканал:кп:объект[дата;0];
ACCUM_L(канал,кп,объект,дата,время) – то же, что #ТИканал:кп:объект[дата;время];
ACCUM_V(канал,кп,объект) – то же, что #ПУканал:кп:объект;
ACCUM_V(канал,кп,объект,дата) – то же, что #ПУканал:кп:объект[дата;0];
ACCUM_V(канал,кп,объект,дата,время) – то же, что #ПУканал:кп:объект[дата;время].
В функциях STATUS, ANALOG, ACCUM_L, ACCUM_V в качестве параметров «канал», «кп», «объект» могут быть переменные и выражения.
В функциях ANALOG, ACCUM_L, ACCUM_V параметр «время» должен быть задан в формате UTIME.
Перечень логических функций расчётных полей (x - произвольное выражение). Функция принимает значение 1 (TRUE), если:
_EQ(x) – результат вычисления равен 0;
_GE(x) – результат вычисления больше или равен 0;
_GT(x) – результат вычисления больше 0;
_LE(x) – результат вычисления меньше или равен 0;
_LT(x) – результат вычисления меньше 0;
A > B – A больше B;
A < B – A меньше B;
A >= B – A больше или равно B;
A <= B – A меньше или равно B;
A = B – A равно B;
A <> B – A не равно B, в противном случае функция принимает значение 0.
Приоритет последних шести операций выше приоритета остальных операций.
Формулы с условиями расчётных полей (x - произвольное выражение):
?x1;x2;x3;x4– вычисления в формуле зависят от знака первого выражения x1, результат равен:
x2, если выражение x1 больше нуля;
x3, если выражение x1 равно нулю;
x4, если выражение x1 меньше нуля.
x1?x2:x3– вычисления в формуле зависят от значения первого выражения – x1, результат равен:
x2, если выражение x1 не равно нулю;
x3, если выражение x1 равно нулю.
Пример формул с условиями (x1 = 1, x11 = -1):
?x1;10;0;-10;
x11?11:-11.
Результат вычислений для первого условного выражения будет 10, а для второго 11.