Стартовая страница › Форумы › Понять, как работает ПО › Формат значения с лидирующим нулем
- В этой теме 8 ответов, 3 участника, последнее обновление 8 лет, 4 месяца назад сделано
Mikhail.
-
АвторЗаписи
-
09.04.2018 в 20:04 #8873
litmi
УчастникЗдравствуйте! Как отобразить значение величины в формате, например «08», а не «8». К примеру, симпатичнее (понятнее) выглядит запись 08:02:03 — час:минут:секунд, а не 1:2:3.
10.04.2018 в 08:42 #8874
manjey73УчастникПеревести в ASCII, как раз 8 символов с : получается и отображать как текст.
10.04.2018 в 14:50 #8878litmi
УчастникНе очень понятно. Каждое из значений (часы, минуты, секунды) хранится в 2-х байтных регистрах. Каждый регистр считывается отдельно (в принципе можно и разом считать). После считывания, в формате D отображаются на схеме в виде чисел. Если в Администраторе изменить формат отображения на Текст ASCII, то отображаются всякие неинтересные символы.
10.04.2018 в 15:20 #8880
MikhailМодераторДля времени есть соответствующий формат канала. Если Вы получате час, минуту и сек. по отдельности, то понадобится доп. вх. канал, типа дорасчётный ТИ с формулой примерно такой: EncodeDate(new DateTime(0, 0, 0, Val(1), Val(2), Val(3)))
Val(N) — каналы, которые хранят часы, мин. и сек.12.04.2018 в 11:34 #8892litmi
УчастникПытался использовать приведенную формулу и другие похожие из описаний C# из интернета. Скада останавливается = не нравится ей синтаксис.
12.04.2018 в 12:02 #8893
manjey73УчастникТак в логах посмотреть что ей не нравится.
Проверяйте все скобочки ли на месте, все ли каналы присутствуют.-
Ответ изменён 8 лет, 4 месяца назад пользователем
manjey73.
13.04.2018 в 14:50 #8912
MikhailМодераторИсходный код формул, который компилирует сервер, можно посмотреть в файле C:\SCADA\ScadaServer\Log\CalcEngine.cs
Это бывает полезно для поиска причины ошибки.15.04.2018 в 18:00 #8930litmi
УчастникЗдравствуйте! В файле C:\SCADA\ScadaServer\Log\ScadaServerSvc.log было указано на необходимость преобразования типа входных данных. В окончательном варианте формула выглядит так: EncodeDate(new DateTime(1, 1, 1, (int)Val(N1), (int)Val(N2), (int)Val(N3))), где N1, N2, N3 номера каналов часов, минут, секунд. Если в формуле вместо «1» ставить «0», то не ругается, но и не отображает текущее значение. Придется день, месяц, год прятать на экране другими средствами.
Обнаружил на англоязычном форуме любопытный ответ на вопрос темы «Leading zeros» :).
Всем спасибо за содействие!17.04.2018 в 08:44 #8938
MikhailМодераторСпасибо.
Итак после корректировки:EncodeDate(new DateTime(1, 1, 1, (int)Val(N1), (int)Val(N2), (int)Val(N3)))
любопытный ответ на вопрос темы «Leading zeros»
Кидайте ссылку, может кому-нибудь пригодится.
-
Ответ изменён 8 лет, 4 месяца назад пользователем
-
АвторЗаписи
- Для ответа в этой теме необходимо авторизоваться.