Ответы в темах
-
АвторЗаписи
-
vg
УчастникДля всех линий связи используется драйвер KpModbus.dll (за исключением SMS-оповещения, там используется KpSms.dll).
Опрос КП — https://pastenow.ru/42885dfdbd3e088f1bc1887676608c1f
Основные настройки — https://pastenow.ru/648caf8ed2e21354c93e2ecb4cc99501vg
УчастникГлавный экран — https://pastenow.ru/d5c59ee0d4828b0f6da2c8c0b1299757
По нажатию на выделенную прямоугольную область происходит переход на схему «цеха».Схема цеха — https://pastenow.ru/9f3f06a6410708510fe2b7dda642e8ce
По нажатию на интегральный индикатор состояния (разноцветные круги) происходит переход на мнемосхему машины.Мнемосхема машины — https://pastenow.ru/6cc295e12eebc093b603985cefb3cc23
Таких машин 8 и они одинаковые. В ячейках В1, Г1 и т.д. отображаются измеряемые устройством параметры с соответствующей индикацией. Под каждой парой ячеек В и Г расположена «кнопка График». На графике отображены уставки (одни и те же для каждой машины и каждой пары), а также сами значения ячеек В и Г.
В левом нижнем углу расположена «кнопка Состояния каналов» (на скриншоте «Каналы — норма»). При нажатии появляется вплывающее окно о состоянии каналов измерительного устройства. В нижней части расположена информация о наработке в разных режимах (Режим1, Режим2, Режим3). Над ячейками В1 и Г1 и т.д. расположены интегральные индикаторы П1, П2 и т.д., отображающие худшее состояние пары. При нажатии на эти индикаторы появляется всплывающее окно с отображением дополнительных измеряемых устройством параметров. Справа также расположена «кнопка Диагностика», по нажатию на которую, произойдёт переход на соответствующий экран.Диагностика — https://pastenow.ru/fe09b8dc73eb56ccc6cbd46461ae4f06
Здесь отображаются результаты некоторой диагностики, которая считывается из БД. Соответственно у каждой машины свои точки и свои результаты диагностики этих точек. По нажатию на любую строку появляется всплывающее окно с историей развития этого дефекта.Собственно такая структура у проекта.
vg
УчастникВ общем, как обычно, я сам напортачил.
Дело было в том, что передача конфигурации не проходила из-за ошибки в формуле. И как следствие не обновлялось название КП с параметрами при попытке просмотра данных. После исправления своей оплошности всё работает как надо.
vg
УчастникБольшое спасибо за ответы.
vg
УчастникБлагодарю за ответ. Подскажите пожалуйста что почитать, куда посмотреть для разработки такого клиента?
vg
УчастникЗабыл написать, что период отчёта может быть как фиксированный (час, сутки, неделя и т.д.) так и произвольный, а следовательно нужно обеспечить выбор этого периода. Значит модуль, по всей видимости, не подходит.
vg
УчастникMikhail, реализовал это во внешнем приложении, которое будет запускаться по нажатию на графический элемент веб-интерфейса.
vg
УчастникВ целом задача выглядит следующим образом:
По нажатию на графический элемент в веб-интерфейсе SCADA-системы сформировать отчёт в файле Word, в котором будут отображаться архивные данные в виде таблиц и графиков.
По сути я уже все данные достал, но реализация кривая(на мой взгляд), как моя жизнь, из-за большого количества костылей. Костыли эти у меня получились в виду того, что я не понял как считать только то, что мне нужно в приложении и соответственно считываю в данный момент весь архив за нужный период. Затем с помощью метода AddSrez() «соединяю» все экземпляры SrezTableLight и получаю «общую» таблицу. После этого перебираю всю эту большую таблицу для извлечения нужных мне данных и сохраняю только данные по необходимым каналам.
Основная сложность для меня представляется в определении данных по номеру канала, так как весь итоговый SrezTableLight я оставлять не хочу, так как он слишком громоздкий, а в новой структуре (я записываю в List<List<List<object>>> :)) номер канала записываю в нижнем List`е и в итоге получается много ненужных операций при извлечении данных. Я понимаю, что алгоритм плохой, но по другому не придумал.
Мы с Вами уже обсуждали ранее некоторые моменты и Вы рекомендовали делать это отдельным приложением, а не модулем (из-за требований к безопасности модуля, если не ошибаюсь).
vg
УчастникP.S.
А если можно сразу считать срезы по конкретным входным каналам, то это будет просто фантастика.
vg
УчастникВсё оказалось просто:
DataTable dataTable = new DataTable("BaseTable"); BaseAdapter adapter = new BaseAdapter(); adapter.FileName = @"C:\SCADA\BaseDAT\incnl.dat"; adapter.Fill(dataTable, true); List<int> inputChannelList = new List<int>(); for(int i = 0; i < dataTable.Rows.Count; i++) { if((int)dataTable.Rows[i].ItemArray[4] == objectNumber) { inputChannelList.Add((int)dataTable.Rows[i].ItemArray[0]); } }Где
dataTable.Rows[i].ItemArray[4] — колонка таблицы входных каналов «Объект»
dataTable.Rows[i].ItemArray[0] — колонка номеров входных каналов
objectNumber — индекс соответствующего объекта в таблице «Объекты»vg
УчастникДа-да, разумеется, спасибо, у меня «свойство bool» существует внутри класса и выполняет функцию глобальной переменной во время циклической отработки каналов, значение для которой я как раз и задаю в формуле. А из формул разумеется возвращаю double.
vg
УчастникПоследний вариант, кстати, почему то не работает.
Ошибка:
Недопустимый токен «=» в объявлении класса, структуры или интерфейсаТогда остаётся предыдущий вариант 🙂
vg
УчастникА ещё лучше написать так:
public bool CheckFirstCycleMode1 { get; set; } = true;
vg
УчастникПроблема была в некорректно написанных свойствах класса.
Изначально:
public bool CheckFirstCycleMode1 { get { return CheckFirstCycleMode1; } set { CheckFirstCycleMode1 = true; } }Исправлено:
private bool checkFirstCycleMode1; public bool CheckFirstCycleMode1 { get { return checkFirstCycleMode1; } set { checkFirstCycleMode1 = true; } }vg
УчастникP.S.
Считываю данные с эмулятора. Но с ним проблем никогда не возникало. Если передать конфигурацию во время работы эмулятора, то веб-интерфейс сразу «виснет». Если же сделать это при выключенном эмуляторе, а затем включить снова, то такой вариант работает 2 минуты и также падает в обморок.
-
АвторЗаписи