Стартовая страница › Форумы › Понять, как работает ПО › Установить дату
- В этой теме 27 ответов, 3 участника, последнее обновление 2 года, 9 месяцев назад сделано Mikhail.
-
АвторСообщения
-
03.06.2021 в 09:05 #19883evgУчастник
Всем привет, а есть ли возможность, установить желаемую дату, во входной канал?
Пробывал по разному, но не получается. В скаде нет возможности вводить дату, через канал управления, в формате дд.ММ.гггг ?03.06.2021 в 09:47 #19885manjey73УчастникФормулой текущую можно.
Формулой, если выбрать тип команды «Бинарная» и вводить строкой День-Месяц-ГодВходной канал имеет тип double. Формулой надо преобразовывать то, что вы вводите в данный формат
- Этот ответ был изменен 2 года, 10 месяцев назад от manjey73.
03.06.2021 в 09:51 #19887manjey73УчастникПример формулы для входного канала, чтобы отображать текущую дату на мнемосхеме
DateTime.Now.ToOADate()
Формат — Время, Дата, ДатаВремя
03.06.2021 в 17:44 #19895MikhailМодераторДобрый день!
Точно можно реализовать, нужно только формулы подобрать.
Вы хотите устанавливать дату из пользовательского интерфейса? Если да, то понадобится канал управления бинарного типа. Отправленная команда — это строка, её нужно преобразовать в дату и записать во входной канал с помощью формулы канала управления.Начните с отображения текущей даты через входной канал.
04.06.2021 в 09:39 #19903evgУчастникДобрый день. Да, дата у меня отображается, через формулу во входном канале DateTime.Now.ToOADate(). Я смотрю есь в упаковке формула «EncodeDate» или это не то?
По переводу строки в double у меня есть такая формула:public double _Convert(int n)
{
double x = Val(n);
double _double;
string _string;
_string = ScadaUtils.DecodeAscii(x);
_double = Double.Parse(_string.Replace(‘.’, ‘,’));
return _double;
}Вы хотите устанавливать дату из пользовательского интерфейса?
Да, нужно чтобы из пользовательского интерфейса, была возможность установить дату, любую дату.
04.06.2021 в 10:14 #19905manjey73УчастникВам нужно создать формулу в Справочнике в которой должно быть.
private DateTimeFormatInfo dtfi; // формат даты и времени, в котором хранятся данные, может будет нужен не private…
dtfi = new DateTimeFormatInfo();
dtfi.ShortDatePattern = «dd.MM.yyyy»; // Тут вы должны определить как у вас вводится дата, может быть так «dd-MM-yyyy» например. Поройтесь в нете что дают определения dd или D для дня и их комбинации.string formats = dtfi.ShortDatePattern; // и
double d = DateTime.ParseExact(data, formats, dtfi).ToOADate(); // тут d это то, что вернуть надо в канал а data это то, что вы должны вбивать в команде.
Команда должна быть Бинарная — Строка и вы в ней вбиваете как определите формат.
Определите с точками день.месяц.год значит и вводить с точками.з.ы. пока некогда потестить, попробуйте набросать формулу и что получится.
04.06.2021 в 17:11 #19921MikhailМодераторНужно убедиться, что строка команды декодируется корректно.
Формула для канала управления примерно такая:public byte[] GetDateStr() { string s = ScadaUtils.DecodeUnicode(Cmd); System.IO.File.WriteAllText(@"C:\SCADA\1.txt", s); return null; }
Отправленная строка должна попадать в файл. Если всё нормально, то останется её перевести в дату и записать во входной канал, что уже не сложно.
04.06.2021 в 17:13 #19922MikhailМодераторПродолжение формулы вместо записи в файл:
DateTime dt = DateTime.Parse(s); SetVal(101, EncodeDate(dt)); return null;
Где 101 — номер входного канала.
07.06.2021 в 09:26 #19967evgУчастникpublic byte[] GetDateStr() { string s = ScadaUtils.DecodeUnicode(Cmd); System.IO.File.WriteAllText(@"C:\SCADA\1.txt", s); return null; }
Сам файл «1.txt» создался, но текст, который я ввёл нету =( В канале управления ставим «GetDateStr()» — я правильно понимаю? Тип Бинарный, Строка.
07.06.2021 в 11:16 #19975manjey73Участникstring s = ScadaUtils.DecodeUnicode(Cmd);
Если вместо этой строки указать string s = «Что нибудь»
То строка записывается в файл. Тут ошибка в получении данных от Cmd явная
07.06.2021 в 12:53 #19990MikhailМодераторещё можно проверить так:
string s = ScadaUtils.BytesToHex(Cmd);
чтобы вывести данные команды побайтно в файл.- Этот ответ был изменен 2 года, 9 месяцев назад от Mikhail.
07.06.2021 в 13:06 #19999manjey73УчастникНе сработает. Похожу тут Cmd всегда double, независимо, что указана команда как Бинарная.
То ли в принципе это пропускает мимо ушей механизм формул при перезапуске сервера, то ли еще что. Тоже бьюсь сейчас над этим. При чем очень интересный эффект, ошибки, вызывающие не работоспособность отражаются и на другой формуле…
07.06.2021 в 13:11 #20000manjey73УчастникА вызывается ли ScadaUtils вообще из формул ? а то есть подозрение, что нет…
07.06.2021 в 14:34 #20003manjey73УчастникОчень интересно, один раз файл записался каким-то чудом. удалил его, и никаких файлов…
08.06.2021 в 08:51 #20019evgУчастникstring s = ScadaUtils.BytesToHex(Cmd);
Ошибку выдаёт:
http://d.radikal.ru/d28/2106/cf/79d3eabca32f.jpg -
АвторСообщения
- Вы должны авторизироваться для ответа в этой теме.