Ответы в темах
-
АвторЗаписи
-
TawУчастникHtml страница не знает что такое cnlData (мы передаем этот аргумент в callback).
Она объявлена внутри другой функции в table.js
// Returns true if the cell text has been changed
function displayCellData(cell, cnlDataMap) {
var cnlNum = parseInt(cell.attr(«data-cnl»));
if (cnlNum) {
var cnlData = cnlDataMap.get(cnlNum);и в clientapi.js как функция
// Input channel data type.
// Note: Casing is caused by C# naming rules
scada.CnlData = function () {
this.Val = 0.0;
this.Stat = 0;
};
Страница html не понимает откуда брать этот аргумент. Перед тем как передать в callback нам надо получить этот CnlDate?
TawУчастникНе могу получить доступ к cnlData.


TawУчастникфункция getCurCnlData имеет вид
// Get current data of the input channel.
// callback is a function (success, cnlData)
// URL example: http://webserver/scada/ClientApiSvc.svc/GetCurCnlData?cnlNum=1
getCurCnlData: function (cnlNum, callback)
{
this._request(«ClientApiSvc.svc/GetCurCnlData», «?cnlNum=» + cnlNum, callback, this._EMPTY_CNL_DATA);
}Я пытаюсь вызвать по событию кнопки
<script>
function GetValue() {
var i = scada.clientAPI.getCurCnlData(611, callback);
alert(«Value is » + i);
}
</script><input type=»button» onclick=»GetValue()» value=»Read Chanel value!»/>
Как мне избавиться от callback или как мне задать ее в качестве аргумента в моей веб-странице.
Появляется сообщение об ошибке «callback is not defined»
эта функция имеет вид — ƒ (success, cnlData). Но как задать эту функцию и ее аргументы на моей веб-странице?
TawУчастникВопросы по проекту PlgTable. В файле Table.aspx.cs в методе GenerateTableViewHtml на основе C# формируется html разметка таблицы в которую затем будут выводиться значения каналов. Этот метод вызывается в PageLoad (файл Table.aspx.cs). Который формирует tableViewHtml. Table.aspx вставляет <%= tableViewHtml %> в веб страницу.
В теге head (Table.aspx файл страницы) подключается table.js
<script type=»text/javascript» src=»js/table.js»></script>
В файле table.js
в $(document).ready(function ()
имеется вызов функции startUpdatingCurData();
Которая вызывает функцию getCurCnlDataExt (функция для Get extended current data ) из clientAPI.js. функция updateCurData (Request and display current data) из table.js отвечает за отображение данных из канала. Эта функция вызывает функцию displayCellData (Display the given data in the cell).
Вопросы:
1) Я не могу манипулировать с элементами страницы пока страница не «готова» (объектная модель готова (DOM)). Обычный доступ к элементам html не проходит (Я имею в виду взять готовые данные из таблицы). Для того чтобы получить данные из канала мне нужно писать код на javaScript в функции $(document).ready(function ()) (когда DOM будет сформирован) после вызова функции startUpdatingCurData() в файле table.js ? Или в функции displayCellData предусмотреть вывод на свои элементы (но это все на JQuery и напоминает создание компонентов плагинов графического редактора)?
2) В clientAPI.js находится функция getCurCnlData (Get current data of the input channel). Я не нашел нигде ее вызова. Я бы хотел чтобы вы пояснили где и в каком месте моей веб страницы я могу вызвать эту функцию чтобы получить значение канала для вывода в тег <div>? Не могли бы вы привести синтаксис или пример вызова этой функции для любого тега?
3) Или вообще каким способом вывести данные из канала на мою веб страницу в тег div?
4) Каким образом можно взять данные из табличного представления скады в JavaScript переменную (обычный доступ к элементам html не проходит)?
TawУчастникЯ взял за основу табличное представление из проекта DemoProject
«<div id=»divTblWrapper» class=»table-wrapper»>
<table>
<tr class=’hdr’>
<td class=’cur’><span>Current</span></td><td class=’hour hidden’ data-hour=’-24′></td>
</tr>
<tr class=’item’ data-cnl=’104′>
<td class=’cur’>
</tr>
<tr class=’item alt’ data-cnl=’611′>
<td class=’cur’></td>
</tr>
<tr class=’item’ data-cnl=’103′>
<td class=’cur’></td>
</tr>
<tr class=’item’ data-cnl=’105′>
<td class=’cur’></td>
</tr>
</table>»
изменил канал 102 на мой созданный 611. Почему не выводятся значения в Html форму? Хотя для всех остальных каналов, которые созданы в табличном представлении (этого проекта) я могу менять номера и все работает?
TawУчастник1) Это когда вы не имеете доступа к исходникам, допустим dll или не хотите лезть в исходники. Вы просто добавляете свой метод к остальным методам класса. Имеете доступ ко всем остальным методам и полям класса и добавляете свой метод для класса, исходный код которого недоступен.
2) Полиморфизм. Допустим есть набор фигур, фигуры имеют какие то общие методы, допустим вычисление стороны по ее координатам вершин. И в тоже время есть методы которые вычисляют периметр и площадь. Но эти методы отличаются для каждой из фигур. Но вы можете их вызвать в обычном цикле перебора фигур (по коллекции или массиву базового класса). Вы добавляете свою фигуру, берете за предка класс (обычно абстрактный типа фигура) и все его методы. И добавляете свои методы. Но все методы предка класса доступны. Это можно через виртуальные методы и интерфейсы.
3) Это в С++ как указатель на функцию. Т.е. вы можете в качестве аргументов метода использовать другие методы.
TawУчастникОшибка в хроме была.
Failed to load resource: the server responded with a status of 404 (Not Found)
Uncaught Error at contentscript.js:1
в опере была
http://localhost/Scada/plugins/WebPage/custom/index.html 404 (Not Found)
В хроме не четкое описание ошибки и я не мог устранить. А в опере детальное описание. В принципе если бы я пользовался оперой, то мог бы устранить. Но из за хрома я не понимал в чем дело.
Сделал согласно «Baur» и нет ошибки. Просто хочу на чистом html и javascript отображать графики и панели приборов (примеры моей самоделки панели приборов и мониторинга, графиков можно сколько хочешь и любого типа со всей статистикой).


Вопрос. Мне нужно данные из каналов преобразовать в js переменную. В примере PlgTable как иголку в стоге сена искать. Можете привести простой div и как с помощью JS API заполнить этот div. Или как преобразовать данные с каналов в javaScript объект?
TawУчастник1) extension methods
2) override, virtual methods, constructors, polymorphism, inheritance
3) Delegate,new Delegate which based on the others
TawУчастник4) Я решил изучить модуль экспорта и начал с тестового модуля. подключил ModTest.dll (сбилдил на основе открытого кода). Но почему не ведется log для этого тестового модуля? В программном коде мы пишем
WriteToLog(«Process current data by the module » + Name, Log.ActTypes.Action);
Но лога нет.
TawУчастникВопросы:
1) «для каналов типа Дорасчётный ТС/ТИ» Не могли бы в кратце пояснить что это за тип таких каналов “Дорасчетный”?
2) “Это действие оператора, что он понял/принял событие. Выпоняется через UI Вебстанции.” — а если оператор не понял это событие? Можете пояснить? Это имеется в виду что появляется сообщение на весь экран и требует выбора оператора (что-то вроде MessageBox и только после нажатия кнопки и подтверждения что понял это окно закрывается)?
3) В модуле есть код
» const int MyCmdNum = 1;
const double MyCmdVal = 1.0;»
Команды имеют номера и значение команды может быть вещественным? Я думал что команда принимает значение 0 или 1? А в каких случаях имеет смысл использовать значение команды 0.2 0.3 и т.д. сотни значений?
TawУчастникНа проекте HelloWorld нет ошибки как при включенных опциях экспорта архива и событий так и при выключенных. Я нашел ошибку, теперь и в моем проекте нет ошибки.
Проблема была в том что я пометил галочки на входных каналах (Write Events, Event sound, Event on Undefined, Event on Change).

Но возможно не задал какие-то параметры для них. Я убрал эти галочки и все работает как при включенных опциях так и при отключенных.
TawУчастникЯ выполнял на основе стандартного проекта DemoProject.
Вы можете заполнять как одну (для текущих данных) так и все вкладки (архив и события). А можете вообще не заполнять архив и события. Проблема в том что опция флажок Экспорт должна быть включена на архив и события (даже при пустом запросе). Тогда нет ошибки. Если эти опции отключены, то ошибка не сразу возникает, через 1 или 2 минуты. Минуту две работает нормально. А потом сыпет эту ошибку. Проблема в общем решена — надо включить пустышки запросы на экспорт архива и событий (при выключенных опциях возникает ошибка через минуту две. не сразу). Я как бы не вижу необходимости платной основы.
TawУчастникХотелось бы отправить данные на удаленный сервер БД необходимые для мониторинга. Чтобы не перегружать СУБД.
1) В модуле есть метод OnCurDataCalculated(int[] cnlNums, SrezTableLight.Srez curSrez).
метод выполняется после вычисления дорасчётных каналов текущего среза (примерно каждые 100 мс)
Что значит “дорасчётные каналы текущего среза (примерно каждые 100 мс)”?
2) // метод выполняется после квитирования события
Что означает квитирование события?
TawУчастникНе помогает, это означает, что в дереве ссылка не кликабельна. Прописал по вашему примеру и ссылка стала кликабельна.
1) Но почему не отображается содержимое веб-страницы (обычный текст вставленный в тег body)?
2) Какие требования к встраиваемым веб-страницам?
3) Можете привести пример простой встраиваемой html страницы?
TawУчастникКак сделать на стороне модуля правильный запрос для отправки данных только с определенных каналов? Примеры с форума не работают.
Например делаю на стороне модуля запрос
IF (@cnlnum = 270 )
BEGIN
INSERT INTO cnldata (datetime, cnlnum, val, stat) VALUES (@dateTime, @cnlnum, @val, @stat);
END;
В логе следующая ошибка
2019-06-25 16:36:45 Error export current data to DB MySQL — 127.0.0.1:3306: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ‘IF (610 = 270 )
BEGIN
INSERT INTO cnldata (datetime, cnlnum, val, stat) VALU’ at line 18
2019-06-25 16:36:45 Unable to enqueue current data. The maximum size of the queue 100 is exceeded -
АвторЗаписи