Yury

Ответы в темах

Просмотр 13 сообщений - с 1 по 13 (из 13 всего)
  • Автор
    Сообщения
  • в ответ на: Получение информации из 1С #24622
    Yury
    Участник

    Полезная информация, спасибо.

    Меняюсь на ГрафикиПро)

    в ответ на: Не сохраняются формулы #24504
    Yury
    Участник

    Может нужно остановить службы, изменить пути а потом уже открыть проект ?

    или поменять пути в проекте , остановить службы, поправить в конфигах и перезапустить?

    Все уже пробовал..

    База конфигурации BaseDAT, файлы интерфейса и приложения Rapid SCADA должны находиться в одной родительской директории, которая называется «директория установки».

    Зачем тогда в общих параметрах сервера можно задавать разные пути для базы и интерфейса? Если так, то тогда вообще есть возможность изменять эти пути?

    в ответ на: Не сохраняются формулы #24500
    Yury
    Участник

    По факту все это не работает как нужно.
    Во-первых, если изменить путь то агент уже не может перезапустить сервер и коммуникатор. Он, конечно, ничего не говорит, но по логам обоих видно что перезапуск не производится.
    Во-вторых, если при этом указывать в общих настройках путь до интерфейса в прошлой директории а базу в новой, то тогда и база и интерфейс записываются по новому пути, а читаются один из старого, второй из нового.
    Короче оставил по новому пути только архив, а все остальное вернул назад по-умолчанию.

    в ответ на: Получение информации из 1С #24461
    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.
    в ответ на: Не сохраняются формулы #24460
    Yury
    Участник

    Предполагал такой ответ, но все же думал, что нужно добавить какие-либо дополнительные параметры.
    Спасибо за ответ.

    в ответ на: Получение информации из 1С #24445
    Yury
    Участник

    Все получилось. Спасибо!

    в ответ на: Получение информации из 1С #24440
    Yury
    Участник

    Думаю, что этой информации будет достаточно, чтобы написать свой модуль в 1С.
    Премного благодарен.

    в ответ на: Получение информации из 1С #24435
    Yury
    Участник

    Вы можете получить данные из Rapid SCADA через БД, REST API, TCP-протокол, MQTT, ещё различными способами. Выбирайте наиболее удобный вариант.

    Где можно почитать про получение данных через REST API RapidScada, описание?

    в ответ на: Не сохраняются формулы #24430
    Yury
    Участник

    Просьба уточнить что именно нужно прописать в данном конфигурационном файле. Его содержимое на данный момент:

    <ScadaAgentConfig>
    <SecretKey>5ABF5A7FD01752A2F1DFD21370B96EA462B0AE5C66A64F8901C9E1E2A06E40F1</SecretKey>
      <Instances>
        <Instance name="MOTSINS" directory="C:\Program Files\RapidSCADA\" />
      </Instances>
    </ScadaAgentConfig>
    • Ответ изменён 3 года, 9 месяцев назад пользователем Mikhail.
    в ответ на: Получение информации из 1С #24391
    Yury
    Участник

    Еще на сайте нашел:

    Считать данные Rapid SCADA и преобразовать в набор объектов можно с помощью библиотеки ScadaData.dll. Актуальную версию этой библиотеки можно получить, установив Rapid SCADA и выполнив поиск файла ScadaData.dll в директории установки.

    Только 1С, насколько мне известно, позволяет подключать в качестве внешних компонент библиотеки, которые работают как COM. Данная библиотека собрана как COM?

    в ответ на: Получение информации из 1С #24390
    Yury
    Участник

    Как раз нет необходимости, чтобы SCADA куда-то что-то дополнительно писала. Желательно получать информацию от SCADA по требованию.

    в ответ на: Не сохраняются формулы #24385
    Yury
    Участник

    Все сделал как написали, и пока писал ответ, решил проверить где хранится база конфигурации и дату и время модификации ее файлов. Оказалось, что в общих параметрах указан верный путь: «D:\ProgramData\RapidSCADA\BaseDAT\», однако все файлы там со старыми датами изменения. И тут выяснилось, что все файлы конфигурации обновлялись в папке «C:\Program Files\RapidSCADA\BaseDAT». После ручной переброски файлов из «C:\Program Files\RapidSCADA\BaseDAT» в «D:\ProgramData\RapidSCADA\BaseDAT\» все формулы заработали. Почему так происходит, что данные сервер берет из нужной директории, указанной в настройках, а Администратор сохраняет базу в директорию по-умолчанию?

    в ответ на: Не сохраняются формулы #24358
    Yury
    Участник

    Каналы, конечно же, активные. Данные с них собираются и отображаются в статистике линии и в таблицах в веб-интерфейсе. Только формулы не применяются. Например, для напряжения указана формула «Cnl/100», а результат как был 23456 так и есть, а должен быть 234,56 В.
    Настройки каналов КП №2: https://pastenow.ru/I3DNM
    Свойства одного из каналов: https://pastenow.ru/I3DO0
    Таблица результатов: https://pastenow.ru/I3DOJ

Просмотр 13 сообщений - с 1 по 13 (из 13 всего)