Стартовая страница › Форумы › Разработка и интеграция › Модули сервера V6, возможности?
- В этой теме 59 ответов, 4 участника, последнее обновление 1 год, 10 месяцев назад сделано
Mikhail.
-
АвторСообщения
-
30.03.2023 в 16:56 #27831
manjey73
УчастникOnServiceStart
OnServiceStop
OnIteration
OnCurrentDataProcessing
OnCurrentDataProcessed
OnHistoricalDataProcessing
OnHistoricalDataProcessed
OnEvent
OnEventAck
OnCommand1. Порядок выполнения?
2. Назначение ?И такой вопрос, из кода модуля .View возможно получить данные из БД scada в виде фильтрованного списка например по тегу канала ?
Например у меня есть названия каналов heat_100, heat_101
wcool_100, wcool_101, wheat_100, wheat_101
Могу я получить список с номерами каналов, начинающихся на «cool_»з.ы. мне не нравится как реализовано в том же RapidGate указание 1-5, 11-15, 21-25 и так далее, особенно если каналов будут сотни…
30.03.2023 в 16:57 #27834manjey73
УчастникИ собственно вопрос, кроме получения списка каналов по имени тега, что еще из данных канала можно получить?
Объект, Устройство, их линии связи ????
Длина данных, границы канала и так далее-
Этот ответ был изменен 1 год, 10 месяцев назад от
manjey73.
31.03.2023 в 12:48 #27862Mikhail
МодераторOnServiceStart вызывается при старте сервиса, OnServiceStop — при остановке сервиса. Остальные методы — при наступлении соответствующих событий.
В логике модуля доступен объект ServerContext. Посмотрите, какие свойства и методы он имеет. В том числе доступна база конфигурации.
Из кода модуля .View есть доступ к открытому проекту.
31.03.2023 в 13:16 #27867manjey73
УчастникOnIteration с каким периодом вызывается данный метод?
Как мне Роман сказал это аналог Session в драйвере. Как я этим периодом могу управлять?01.04.2023 в 20:32 #27878manjey73
УчастникКак из модуля запустить прослушивание порта, чтобы автоматом порт был открыт в firewall либо Windows, либо Linux.
есть пример кода?, так понимаю порт открывает dotnet, то есть ковырять что-то в системе не требуется.
01.04.2023 в 23:26 #27880JurasskPark
УчастникКак из модуля запустить прослушивание порта, чтобы автоматом порт был открыт в firewall либо Windows, либо Linux.
Автоматом в системе порт на Firewall не будет открыт никогда. Это основы ИБ. 🙂
Решение — это только писать правило через Реестр во время запуска приложения или библиотеки.02.04.2023 в 08:21 #27881manjey73
УчастникJurasskPark а разве вы открываете порты на Сервера 10000, 10008, и так далее при установке RapidScada ?
Они указаны в настройках Scada, и если посмотреть например на Linux, слушает их dotnet. значит есть какой-то механизм в коде который позволяет открывать порт на прослушку.
Ну, если фаарволом все закроют, типа все что сейчас не открыто то drop тогда да, придется снова переоткрывать..
03.04.2023 в 11:40 #27919Mikhail
МодераторOnIteration с каким периодом вызывается данный метод?
Ссылка на код. Период зависит от скорости обработки данных. Примерно 10 раз в секунду. Если нужен свой период, используйте свой поток.
Когда все приложения SCADA установлены на 1 компьютере, нет необходимости разрешать порт в firewall для общения между ними. Посмотрите, как реализовано прослушивание порта здесь.
04.04.2023 в 12:28 #27947Romiros
УчастникВ OnHistoricalDataProcessed можно как-то определить в какой именно архив пишутся данные, часовой, дневной, минутный или вообще свой архив?
04.04.2023 в 14:24 #27968Mikhail
МодераторНет, в этот метод передаются только данные, маска архивов не передаётся.
04.04.2023 в 14:45 #27976Romiros
УчастникНу это я и из метода понял :))
Имелось ввиду, что вообще это можно получить в ModLogic или надо идти через какой-нибудь ModArc?
Пойду изучать исходники.
05.04.2023 в 09:22 #28011manjey73
УчастникИнтересуют некоторые вещи.
1. Можно ли из .View модуля работать с POST, GET запросами?
Если может и надо одновременно это выполнять из .Logic и .View куда код пихать? в общий проект?2. Чтение на POST запрос занимает больше 2-х секунд, а может еще больше занимать в зависимости от объема данных.
Чтобы не было тормозов что лучше предпринять? разбираться с асинхронными запросами или как-то иначе?
05.04.2023 в 14:59 #28020Mikhail
МодераторОбработка полученных исторических данных происходит здесь.
Из WinForms отправлять запросы можно. Библиотеки View и Logic не взаимосвязаны между собой. Но если используется общий код, то его можно положить в отдельную DLL или Shared-проект. Чтобы пользовательский интерфейс не блокировался на время ожидания ответа, удобнее всего использовать асинхронные вызовы.
05.04.2023 в 16:42 #28030Romiros
УчастникОбработка полученных исторических данных происходит здесь.
Спасибо.
05.04.2023 в 17:37 #28032manjey73
Участникpublic bool SendNotification(HttpRequestMessage request, out string contentResponse) // , string tagCode { try { HttpStatusCode responseStatus; string responseContent; using (HttpResponseMessage response = httpClient.SendAsync(request).Result) { responseStatus = response.StatusCode; responseContent = response.Content.ReadAsStringAsync().Result; } contentResponse = responseContent; return true; } catch (Exception ex) { contentResponse = ex.Message; return false; } }
собственно пример из HttpNotif — вроде как ReadAsStringAsync() это асинхронное чтение, но при этом окно замирает на эти 2 секунды напрочь… пока не прочтет…
Получилось без задержек при использованииpublic async Task ReadAsync() { // Call asynchronous network methods in a try/catch block to handle exceptions. try { using HttpResponseMessage response = await client.PostAsync(ТУТ URI, null); response.EnsureSuccessStatusCode(); string responseBody = await response.Content.ReadAsStringAsync(); rBox.Text += responseBody + Environment.NewLine + Environment.NewLine; } catch (HttpRequestException e) { rBox.Text += e.Message + Environment.NewLine + Environment.NewLine; } } private void bSave_Click(object sender, EventArgs e) { _ = ReadAsync(); }
Привязал непосредственно к кнопке Save. Тогда могу двигать окно, пока там что-то читается. Но тут вопрос — в RichTextBox идет печать тогда, когда оно прочтется и код находится там же. Как в данном случае задачу перенести в другой .cs (в Shared) и узнать, что оно прочиталось?
async Task не допускает out, ref и так далее…. -
Этот ответ был изменен 1 год, 10 месяцев назад от
-
АвторСообщения
- Вы должны авторизироваться для ответа в этой теме.