Ответы в темах
-
АвторСообщения
-
Yury
УчастникПолезная информация, спасибо.
Меняюсь на ГрафикиПро)
Yury
УчастникМожет нужно остановить службы, изменить пути а потом уже открыть проект ?
или поменять пути в проекте , остановить службы, поправить в конфигах и перезапустить?
Все уже пробовал..
База конфигурации BaseDAT, файлы интерфейса и приложения Rapid SCADA должны находиться в одной родительской директории, которая называется «директория установки».
Зачем тогда в общих параметрах сервера можно задавать разные пути для базы и интерфейса? Если так, то тогда вообще есть возможность изменять эти пути?
Yury
УчастникПо факту все это не работает как нужно.
Во-первых, если изменить путь то агент уже не может перезапустить сервер и коммуникатор. Он, конечно, ничего не говорит, но по логам обоих видно что перезапуск не производится.
Во-вторых, если при этом указывать в общих настройках путь до интерфейса в прошлой директории а базу в новой, то тогда и база и интерфейс записываются по новому пути, а читаются один из старого, второй из нового.
Короче оставил по новому пути только архив, а все остальное вернул назад по-умолчанию.Yury
УчастникЧерез стандартные для 1С HTTPСоединение и HTTPЗапрос. Затык возник только с тем, что после запроса авторизации мы получали положительный результат в ответ, а вот второй и последующие запросы выдавали, что пользователь не вошел. Логично сразу было предположить, что где-то была проблема с сессией, но даже в рамках одного HTTPСоединение второй запрос возвращал неуспех. Тогда оставался вариант, что SCADA-сервер определяет сессию по кукам, что оказалось верным. Чтение из заголовка установленных кук, и отправка их же обратно в следующем запросе дала свои плоды. Теперь можно кнопкой в программе 1С заполнить данные со всех счетчиков Меркурий. Сейчас еще СПТ940 прикручу и Valtec (Протей), чтобы и тепло с водой снимать со всех счетчиков в цехе и на удаленных объектах.
Если кому нужно, код для 1С для получения текущих значений каналов:Функция ПолучитьСтруктуруАвторизации() СтруктураАвторизации = Новый Структура("Адрес,Логин,Пароль,Таймаут", Новый Структура("Хост,Порт", "www.motsins.local", 80), "1CRestAPI", "12345", 30); Возврат СтруктураАвторизации; КонецФункции Функция Запрос(Знач АдресФункции, Знач ИдентификаторСессии = Неопределено, Параметры, ВернутьСтруктуру = Ложь) Экспорт СтруктураАвторизации = ПолучитьСтруктуруАвторизации(); РезультатСтруктура = Новый Структура("Результат,Заголовки,Адрес,Метод,Запрос,КодСостояния,Ответ,Cookie", Неопределено, Новый Массив); ОтветJSON = Новый Соответствие; Адрес = СтруктураАвторизации.Адрес; АдресАдрес = МОТСИНС_ПочтовыйТрекингСервер.ДополнитьАдресПараметрами(АдресФункции, Параметры); Попытка //Устанавливаем соединение ЗащищенноеСоединение = ?(Адрес.Порт = 443, Новый ЗащищенноеСоединениеOpenSSL(), Неопределено); HTTPСоединение = Новый HTTPСоединение(Адрес.Хост, Адрес.Порт,,,, СтруктураАвторизации.Таймаут, ЗащищенноеСоединение); HTTPЗаголовки = Новый Соответствие; HTTPЗаголовки.Вставить("Content-type", "application/json;charset=UTF-8"); HTTPЗаголовки.Вставить("Accept", "application/json"); Если ЗначениеЗаполнено(ИдентификаторСессии) Тогда HTTPЗаголовки.Вставить("Cookie", ИдентификаторСессии); КонецЕсли; HTTPЗапрос = Новый HTTPЗапрос(АдресАдрес, HTTPЗаголовки); HTTPОтвет = HTTPСоединение.Получить(HTTPЗапрос); Если ЗначениеЗаполнено(ИдентификаторСессии) Тогда РезультатСтруктура.Cookie = ИдентификаторСессии; Иначе РезультатСтруктура.Cookie = HTTPОтвет.Заголовки.Получить("Set-Cookie"); КонецЕсли; ТекстОтвета = HTTPОтвет.ПолучитьТелоКакСтроку(КодировкаТекста.UTF8); РезультатСтруктура.Ответ = ТекстОтвета; Если Найти(ТекстОтвета, "{") > 0 ИЛИ Найти(ТекстОтвета, "[") > 0 Тогда ЧтениеJSON = Новый ЧтениеJSON; ЧтениеJSON.УстановитьСтроку(ТекстОтвета); ОтветJSON = ПрочитатьJSON(ЧтениеJSON, Истина); Иначе ОбщегоНазначенияКлиентСервер.СообщитьПользователю("Получен неверный ответ от сервера."); КонецЕсли; Исключение ОбщегоНазначенияКлиентСервер.СообщитьПользователю("Запрос: " + ОписаниеОшибки()); КонецПопытки; Если ОтветJSON["d"] <> Неопределено И ТипЗнч(ОтветJSON["d"]) = Тип("Строка") Тогда ЧтениеJSON = Новый ЧтениеJSON; ЧтениеJSON.УстановитьСтроку(ОтветJSON["d"]); ОтветJSON = ПрочитатьJSON(ЧтениеJSON, Истина); РезультатСтруктура.Результат = ОтветJSON; КонецЕсли; Возврат ?(ВернутьСтруктуру, РезультатСтруктура, РезультатСтруктура.Результат); КонецФункции // Производит авторизацию на сервере RapidSCADA Функция Авторизация(ИдентификаторСессии = Неопределено) Экспорт СтруктураАвторизации = ПолучитьСтруктуруАвторизации(); Параметры = Новый Структура("username,password", КодироватьСтроку(СтруктураАвторизации.Логин, СпособКодированияСтроки.КодировкаURL), КодироватьСтроку(СтруктураАвторизации.Пароль, СпособКодированияСтроки.КодировкаURL)); Ответ = Запрос("/scada/ClientApiSvc.svc/Login", , Параметры, Истина); Если Ответ = Неопределено ИЛИ Ответ.Результат = Неопределено Тогда Возврат Ложь; КонецЕсли; Если ТипЗнч(Ответ.Cookie) = Тип("Строка") Тогда CookieМассив = ОбщегоНазначения.РазложитьСтрокуВМассивПодстрок(Ответ.Cookie, ";"); ИдентификаторСессии = CookieМассив[0]; КонецЕсли; Если Ответ.Результат["Data"] = Неопределено ИЛИ Ответ.Результат["Data"] <> Истина Тогда Возврат Ложь; КонецЕсли; Возврат Истина; КонецФункции // Получает и возвращает текущие данные канала Функция ПолучитьТекущиеДанныеКанала(Знач ИдентификаторСессии, НомерКанала) Экспорт Результат = Новый Структура("Значение,Статус"); СтруктураАвторизации = ПолучитьСтруктуруАвторизации(); Параметры = Новый Структура("cnlNum", НомерКанала); Ответ = Запрос("/scada/ClientApiSvc.svc/GetCurCnlData", ИдентификаторСессии, Параметры); Если Ответ = Неопределено Тогда Возврат Результат; КонецЕсли; Если Ответ["Data"] = Неопределено ИЛИ Ответ["Data"] = Ложь ИЛИ ТипЗнч(Ответ["Data"]) <> Тип("Соответствие") Тогда Возврат Результат; КонецЕсли; Если Ответ["Data"]["Val"] <> Неопределено Тогда Результат.Значение = Ответ["Data"]["Val"]; КонецЕсли; Если Ответ["Data"]["Stat"] <> Неопределено Тогда Результат.Статус = Ответ["Data"]["Stat"]; КонецЕсли; Возврат Результат; КонецФункции-
Ответ изменён 3 года, 9 месяцев назад пользователем
Mikhail.
Yury
УчастникПредполагал такой ответ, но все же думал, что нужно добавить какие-либо дополнительные параметры.
Спасибо за ответ.Yury
УчастникВсе получилось. Спасибо!
Yury
УчастникДумаю, что этой информации будет достаточно, чтобы написать свой модуль в 1С.
Премного благодарен.Yury
УчастникВы можете получить данные из Rapid SCADA через БД, REST API, TCP-протокол, MQTT, ещё различными способами. Выбирайте наиболее удобный вариант.
Где можно почитать про получение данных через REST API RapidScada, описание?
Yury
УчастникПросьба уточнить что именно нужно прописать в данном конфигурационном файле. Его содержимое на данный момент:
<ScadaAgentConfig> <SecretKey>5ABF5A7FD01752A2F1DFD21370B96EA462B0AE5C66A64F8901C9E1E2A06E40F1</SecretKey> <Instances> <Instance name="MOTSINS" directory="C:\Program Files\RapidSCADA\" /> </Instances> </ScadaAgentConfig>-
Ответ изменён 3 года, 9 месяцев назад пользователем
Mikhail.
Yury
УчастникЕще на сайте нашел:
Считать данные Rapid SCADA и преобразовать в набор объектов можно с помощью библиотеки ScadaData.dll. Актуальную версию этой библиотеки можно получить, установив Rapid SCADA и выполнив поиск файла ScadaData.dll в директории установки.
Только 1С, насколько мне известно, позволяет подключать в качестве внешних компонент библиотеки, которые работают как COM. Данная библиотека собрана как COM?
Yury
УчастникКак раз нет необходимости, чтобы SCADA куда-то что-то дополнительно писала. Желательно получать информацию от SCADA по требованию.
Yury
УчастникВсе сделал как написали, и пока писал ответ, решил проверить где хранится база конфигурации и дату и время модификации ее файлов. Оказалось, что в общих параметрах указан верный путь: «D:\ProgramData\RapidSCADA\BaseDAT\», однако все файлы там со старыми датами изменения. И тут выяснилось, что все файлы конфигурации обновлялись в папке «C:\Program Files\RapidSCADA\BaseDAT». После ручной переброски файлов из «C:\Program Files\RapidSCADA\BaseDAT» в «D:\ProgramData\RapidSCADA\BaseDAT\» все формулы заработали. Почему так происходит, что данные сервер берет из нужной директории, указанной в настройках, а Администратор сохраняет базу в директорию по-умолчанию?
Yury
УчастникКаналы, конечно же, активные. Данные с них собираются и отображаются в статистике линии и в таблицах в веб-интерфейсе. Только формулы не применяются. Например, для напряжения указана формула «Cnl/100», а результат как был 23456 так и есть, а должен быть 234,56 В.
Настройки каналов КП №2: https://pastenow.ru/I3DNM
Свойства одного из каналов: https://pastenow.ru/I3DO0
Таблица результатов: https://pastenow.ru/I3DOJ -
Ответ изменён 3 года, 9 месяцев назад пользователем
-
АвторСообщения