Written on: 04. 12. 2019 [14:36]
|
ShuraF
Aleksandr Fenogentov
Topic creator
registered since: 08.08.2019
Posts: 50
|
Для изучения OpenSCADA решаю какие-нибудь задачки. Т.е. совмещаю приятное с полезным.
Сейчас организовал "перекачку" архива получасовок из Меркурия и сохранение в базу SQL посредством возможностями OpenSCADA.
Далее думаю сделать формирование отчета XML в виде макета 80020 (почасовки), как требует Энергосбыт. Ну и Excel.
Роман, как более правильно это реализовать?
Документ?
|
Written on: 05. 12. 2019 [08:33]
|
ShuraF
Aleksandr Fenogentov
Topic creator
registered since: 08.08.2019
Posts: 50
|
Сморозил глупость?
Документ - это для отображения в аизуализации?
А для работы с XML существует XMLNode?
|
Written on: 05. 12. 2019 [09:49]
|
roman
Roman Savochenko
Moderator Contributor Developer
registered since: 12.12.2007
Posts: 3750
|
"ShuraF" wrote:
Документ - это для отображения в аизуализации?
Да, хотя он сам основан на XHTML, что по факту XML+HTML, и который в XMLNode обрабатывается.
"ShuraF" wrote:
А для работы с XML существует XMLNode?
Конечно, как собственно и для всяких ODS, XLSX, а про XLS можно забыть.
Learn, learn and learn better than work, work and work.
|
Written on: 06. 12. 2019 [08:59]
|
ShuraF
Aleksandr Fenogentov
Topic creator
registered since: 08.08.2019
Posts: 50
|
Должно получиться примерно так:
<?xml version='1.0' encoding='utf-8' standalone='yes' ?>
<message number="22" version="2" class="80020">
<datetime>
<timestamp>20140130140618</timestamp>
<daylightsavingtime>1</daylightsavingtime>
<day>20140122</day>
</datetime>
<sender />
<area timezone="1">
<name>ООО "ИНТЕР"</name>
<inn>1234567</inn>
</area>
</message>
Делаю так:
DT_tst = SYS.XMLNode("datetime");
DT_tst.childAdd("daylightsavingtime").setText(1);
stTimeStamp = tmFStr(SYS.time(),"%Y%m%d%H%M%S");
DT_tst.childAdd("timestamp").setText(stTimeStamp);
stTimeStamp = tmFStr(SYS.time(),"%Y%m%d");
DT_tst.childAdd("day").setText(stTimeStamp);
// Общий тег
req001 = SYS.XMLNode("message").setAttr("number",2345).setAttr("version","2").setAttr("class","80020");
// Тег <datetime>
req001.childAdd(DT_tst);
// Тег <sender />
req001.childAdd("sender");
// Тег <area timezone="1">
req001.childAdd("area").setAttr("timezone","1");
req001.childAdd("name").setText(nameOOO);
req001.childAdd("inn").setText(INN);
req001.save (0x25, "/home/aleksandr/.openscada/log/resp1.xml");
Получаю:
<?xml version='1.0' encoding='UTF-8' ?>
<message class="80020" number="2345" version="2">
<datetime>
<daylightsavingtime>1</daylightsavingtime>
<timestamp>20191206094931</timestamp>
<day>20191206</day>
</datetime>
<sender />
<area timezone="1" />
<name>ООО "TEST"</name>
<inn>1234567890</inn>
</message>
т.е. сначала создаю обект вложенных тегов, а потом вставляю ("вкладываю")
Правильно? Или я опять изобретаю велосипед и есть более правильный и простой способ "вкладывать" строки?
|