Parameter что это за программа

Запуск чужой программы из своей

В этой статье рассказывается о том, как из своей собственной программы запускать другие программы и получать от них результат. Рассказано о специфике запуска из своей 32-ух битной программы системных утилит в Windows64.

2. Введение

  • ООП-метод, с помощью класса «TProcess» (для Lazarus — «TProcessUTF8»). Поскольку ООП сегодня считается самым правильным стилем то я его поставил на первое место;
  • С помощью функций, которые прячут ООП внутрь себя, несколько упрощая запуск другой программы.

3. ООП-метод запуска. TProcess

Кардинальное различие между классами «TProcess» для чистого FreePascal и «TProcessUTF8» для Lazarus — возможность в последнем использовать не сильно напрягаясь символы национального алфавита в названии запускаемых программ. Всё остальное полностью одинаково. Для использования класса «TProcess» нужно подключить к своей программе модуль «Process». В Lazarus на форму нужно поместить квазивизуальный компонент «TProcess» или «TProcessUTF8», которые находится на вкладке «System» (см. рис. 1), тогда нужный модуль добавится сам собой.

ЧТО ТАКОЕ ПАРАМЕТР. КАК РЕШАТЬ ЗАДАЧИ С ПАРАМЕТРОМ. Подготовка к ЕГЭ 2016 с Артуром Шарифовым

Рисунок 1. Панель компонентов Lazarus. TProcess и TProcessUTF8

Небольшая ложка дёгтя Если вы пользуетесь компонентом Lazarus, то первым по счёту свойством, куда он вам предложит ввести название запускаемой программы — «ApplicationName». Это свойство уже давно объявлено устаревшим (deprecated). Следующим по счёту идёт «CommandLine», которое тоже объявлено устарешим.

Когда-то давно в это свойство вводилось название программы и все запускаемые вместе с ним параметры. Сегодня для входных параметров сделан более удобный и понятный список строк — «Parameters» типа TStrings. Хотя предыдущие два свойства пока ещё остаются рабочим вариантом, но при компиляции вы увидите предупреждение. Название запускаемой программы нужно вводить в свойство «Executable» (см. рис.2) и никуда более, если вы не хотите при очередной смене версии компилятора получить неработающую программу.

Рисунок 2. Свойство для названия запускаемой программы

  • Executable — сюда вносится имя запускаемой программы. Если программа находится в пределах стандартной переменной «PATH», то можно без указания каталога, если нет — то полное имя вместе с каталогом.
  • Parameters — дополнительные входные параметры. Это набор строк типа TStrings, поэтому один параметр в одной строке. Синтаксис всех параметров должен быть точно такой, какой полагается при обычном запуске программы в командной строке.
  • Options — опции запуска. Нужные опции перечисляются в квадратных скобках через запятую. В Lazarus ставится галочка возле соответствующей опции. Наиболее популярные опции, почти для всех ОС:
  • poUsePipes — весь вывод запущеной программы заносится в специальный поток (TProcess.Output), который можно потом загрузить в какой-нибудь более удобный для разглядывания компонент, например в TStringList или в TMemo;
  • poWaitOnExit — если запускающей программе обязательно нужно дождаться окончания работы запускаемой, то этот флаг как раз приостанавливает работу основного потока запускающей программы, пока не отработает та, которая из неё запущена. К примеру, дальнейшая работа будет строится на ответе чужой программы;
  • poStderrToOutPut — этот флаг бывает черезвычайно полезен, когда чужая программа выдаёт свои ошибки, ну или вообще какие-нибудь критически выжные сообщения не на стандартный вывод, которым обычно является экран компьютера. Здесь программу принудительно заставляют выводить вообще всё именно в стандартный вывод (TProcess.Output). Но если вам нужно мухи отдельно, а котлеты отдельно, то флаг не ставится а вывод ошибок тогда идёт в отдельный поток (TProcess.StdErr);
  • poRunSuspended — после запуска чужая программа переводится в режим ожидания, т.е. она ничего не делает, а ждёт от вас какого-нибудь пинка. Так, сходу, для чего это непременно может понадобиться я придумать не могу. Но наверняка и для этого флага найдутся веские причины.
  • Это не все опции, но остальные не особо актуальны.
  • ppNormal — приоритет нормальный, как у всех. Это значение стоит по умолчанию;
  • ppHigh — приоритет чуть выше нормального;
  • ppIdle — процесс будет работать только когда система простаивает без дела;
  • ppRealTime — режим реального времени. Хотя для компьютеров общего назначения это некоторое преувеличение, но по крайней мере процессор этому приложению будет давать максимальную квоту времени на выполнение, что заметно прибавит скорости работы.

Uses Classes, SysUtils, Process; function Wow64DisableWow64FsRedirection(x: Pointer): longbool; stdcall; external ‘Kernel32.dll’ name ‘Wow64DisableWow64FsRedirection’; function Wow64RevertWow64FsRedirection (x: Pointer): longbool; stdcall; external ‘Kernel32.dll’ name ‘Wow64RevertWow64FsRedirection’; Var AProcess: TProcess; AStringList: TStringList; // Здесь будет вывод работы процесса proc: string; pnt: Pointer; Begin WriteLn(‘Какой процесс ищем?’); ReadLn(proc); AStringList := TStringList.Create; AProcess := TProcess.Create(nil); // Эти опции говорят, что нужно дождаться окончания // работы чужой программы и её вывод положить в // специальный закуток AProcess.Options := AProcess.Options + [poWaitOnExit, poUsePipes]; AProcess.Executable := ‘tasklist /FI «IMAGENAME eq ‘+proc+'»‘; AProcess.Executable := ‘ps -C ‘+proc; // // Wow64DisableWow64FsRedirection(pnt); // AProcess.Execute; // // Wow64RevertWow64FsRedirection(pnt); // // Вытаскиваем вывод работы из закутка процесса // в наш набор строк, так будет проще обработать // вывод AStringList.LoadFromStream(AProcess.Output); // Если строк больше 1, // значит процесс в памяти есть If AStringList.Count>1 Then WriteLn(‘Процесс ‘+proc+’ в памяти сидит!’) Else WriteLn(‘Процесса ‘+proc+’ в памяти не найден. ‘); AStringList.Free; AProcess.Free; End.

  1. Для Windows не забудьте к имени искомого процесса приписывать точку и расширение, иначе ничего не будет найдено. Чтобы освежить память, можно открыть в Windows «Диспетчер задач». Там наглядно будет видно, как должны выглядеть имена процессов;
  2. А вот теперь то, что из «Диспетчера задач» копировать ни в коем случае не надо. В 64-ёх битной винде, 32-ух битные процессы будут дополнительно помечены » *32″. Несмотря на то, что эта пометка сидит в колонке «Имя образа», к именам процессов она никакого отношения не имеет;
  3. Как вы заметили, в свойство TProcess.Executable я поместил и название программы и её входные параметры. Действительно, на сегодняшний день это свойство является полным аналогом свойства «CommandLine». Будет ли так и дальше — посмотрим. А пока, если входной параметр коротенький и одинокий, его вполне можно писать вместе с названием программы. Если же жераметров много или они длинные, то для ясности их лучше помещать в свойство «Parameters».
Читайте также:
Что за программа апдейт

Uses Classes, SysUtils, Process; function Wow64DisableWow64FsRedirection(x: Pointer): longbool; stdcall; external ‘Kernel32.dll’ name ‘Wow64DisableWow64FsRedirection’; function Wow64RevertWow64FsRedirection (x: Pointer): longbool; stdcall; external ‘Kernel32.dll’ name ‘Wow64RevertWow64FsRedirection’; Var AProcess: TProcess; AStringList: TStringList; // Здесь будет вывод работы процесса proc: AnsiString; pnt: Pointer; Begin WriteLn(‘Какой процесс ищем?’); ReadLn (proc); AStringList := TStringList.Create; AProcess := TProcess.Create(nil); // Эти опции говорят, что нужно дождаться окончания // работы чужой программы и её вывод положить в // специальный закуток AProcess.Options := AProcess.Options + [poWaitOnExit, poUsePipes]; AProcess.Executable := ‘tasklist.exe’; AProcess.Parameters.Add(‘/FI «IMAGENAME eq ‘+proc+'»‘); AProcess.Executable := ‘ps’; AProcess.Parameters.Add(‘-C ‘+proc); // На всякий случай. Запуск из нашего 32-ух битного приложения // системной утилиты в Win64. // // Wow64DisableWow64FsRedirection(pnt); // AProcess.Execute; // // Wow64RevertWow64FsRedirection(pnt); // // Вытаскиваем вывод работы из закутка процесса // в наш набор строк, так будет проще обработать // вывод AStringList.LoadFromStream(AProcess.Output); // Если строк больше 1, // значит процесс в памяти есть If AStringList.Count>1 Then WriteLn(‘Процесс ‘+proc+’ в памяти сидит!’) Else WriteLn(‘Процесс ‘+proc+’ в памяти не найден. ‘); AStringList.Free; AProcess.Free; End.

Кстати говоря, если вы из вышепредставленного кода хотите сделать функцию, но не хотите передавать в неё параметры типа TStringList, то есть возможность организации параметров в виде одной строки. Допустим строка эта называется «params». Все входные параметры запускаемой программы нужно разбавлять символом перевода строки (#10), примерно так:

Что Такое Параметр? Параметр с Нуля + ДЗ (Задание 17 ЕГЭ 2023 Математика Профиль)


params := ‘-a param1’#10′-b param2’#10′-c param3’;
а потом засунуть эту строку в свойство «Parameters» таким образом:
AProcess.Parameters.Text := params;

TStringList прекрасно воспринимает символ #10 и строки параметров будут разделены правильно. В модуле Process есть специальная процедура CommandToList(), которая переделывает подобную строку из всех параметров в TSringList. Однако пользоваться ею надо с умом.

Разделение в ней происходит по символу пробела или любым символом перевода строки. Чтобы в одну строку были занесены параметры типа «ключ значение», которые разделены между собой пробелом, ключ и значение нужно группировать с помощью двойных кавычек:

Uses Classes, SysUtils, Process; Var AStringList: TStringList; s: string; i: integer; Begin AStringList:=TStringList.Create; WriteLn(‘Первый вариант, неправильный:’); WriteLn; s:=’-a param1 -b param2 -c param3′; CommandToList(s, AStringList); For i:=0 To AStringList.Count-1 Do WriteLn(AStringList[i]); WriteLn; WriteLn(‘Второй вариант, правильный:’); WriteLn; s:='»-a param1″ «-b param2» «-c param3″‘; AStringList.Clear; CommandToList(s, AStringList); For i:=0 To AStringList.Count-1 Do WriteLn(AStringList[i]); AStringList.Free; End.

Рисунок 3. Процедура CommandToList() и параметры типа «ключ значение»

4. Простые функции запуска

  1. В модуле «SysUtils»:

ExecuteProcess(const exename: string; const parameters: string или array of string; flags: TExecuteFlags): integer;

  • exename — имя запускаемой программы. Если программа лежит где-то вне системной переменной PATH, то имя писать вместе с полным путём;
  • parameters — входные параметры (ключи) запускаемой программы. Это может быть одна строка, где ключи разделены пробелами, как это делается при запуске из консоли или скрипта. Так же все ключи можно разметить в array of string, при этом одна ячейка (строка) массива — один ключ;
  • flags — тут можно добавить всего один флаг «ExecInheritsHandles», но только в том случае, если у вас Windows или OS/2. Во всех остальных случаях флаг бесполезен. Этот флаг передаёт файловые дескрипторы запускаемой программе.

RunCommandIndir(const curdir : string; const exename : string; const parameters : array of string; out outputstring: string; out exitstatus : integer; // Необязательный Options : TProcessOptions = []): integer;

  • curdir — рабочий каталог, где будет выполняться запускаемая программа. Может быть пустой строкой;
  • exename — имя запускаемой программы;
  • parameters — входные параметры для запускаемой программы. Массив строк. Одна строка — один параметр.
  • outputstring — это текстовые результаты работы программы, которые она могла бы выдать в консоль;
  • exitstatus — необязательный параметр. Здесь будет номер ошибки, если такое предусмотрено. Если же нет, эту переменную в функцию можно не вписывать.
  • Options — набор флагов запуска, если нужно.
  • Если вызывается с двумя выходными параметрами, то она возвратит 0 если попытка запуска успешна и -1 в случае какой-то ошибки;
  • Если без параметра exitstatus, то будет типа boolean и True в случае успешности попытки запуска.

RunCommand(const exename : string; const parameters : array of string; out outputstring: string; Options : TProcessOptions = []): boolean;
Uses SysUtils; Var prog, params: string; Begin prog := ‘»c:Program Files (x86)Mozilla Firefoxfirefox.exe»‘; prog := ‘firefox’; params := ‘www.freepascal.ru’; Try ExecuteProcess(prog, params); Except On E: EOSError Do WriteLn(‘Вах, какая ужасная ошибка с номером ‘, E.ErrorCode); End; End.

Читайте также:
Acronis backup and recovery что это за программа

Функции из модуля Process будут интересны в плане более гибкого управления запускаемой программы с помощью параметра Options или задания специального каталога для жизнедеятельности этой программы.

Uses Classes, SysUtils, Process; function Wow64DisableWow64FsRedirection(x: Pointer): longbool; stdcall; external ‘Kernel32.dll’ name ‘Wow64DisableWow64FsRedirection’; function Wow64RevertWow64FsRedirection (x: Pointer): longbool; stdcall; external ‘Kernel32.dll’ name ‘Wow64RevertWow64FsRedirection’; Var prog, ans, user_: String; params: array of String; outstr: TStringList; pnt: Pointer; Begin WriteLn(‘Какого пользователя ищем?’); ReadLn(user_); SetLength(params, 1); outstr:=TStringList.Create; prog := ‘query.exe’; params[0] := ‘USER «‘+user_+'»‘; prog := ‘w’; params[0] := user_; // На всякий случай. Запуск из нашего 32-ух битного приложения // системной утилиты в Win64.

Wow64DisableWow64FsRedirection(pnt); // Вариант запуска 1 — отдельно программа, // отдельно входные параметры RunCommand(prog, params, ans, []); outstr.Text:=ans; // Если строк больше 1, // значит пользователь найден If outstr.Count>1 Then WriteLn(‘Пользователь ‘+user_+’ пришёл на работу.’) Else WriteLn(‘Пользователь ‘+user_+’ дрыхнет дома.’); // Вариант запуска 2 — входные параметры // собираются вместе прямо в функции RunCommand(prog, [params[0]], ans, []); outstr.Text:=ans; // Если строк больше 1, // значит пользователь найден If outstr.Count>1 Then WriteLn(‘Пользователь ‘+user_+’ пришёл на работу.’) Else WriteLn(‘Пользователь ‘+user_+’ дрыхнет дома.’); // Вариант запуска 3 — и программа и // входные параметры в одной строке RunCommand(prog+’ ‘+params[0], [], ans, []); outstr.Text:=ans; // Если строк больше 1, // значит пользователь найден If outstr.Count>1 Then WriteLn(‘Пользователь ‘+user_+’ пришёл на работу.’) Else WriteLn(‘Пользователь ‘+user_+’ дрыхнет дома.’); Wow64RevertWow64FsRedirection(pnt); End.

5.

Выводы

Несмотря на то что, по сравнению с TurboPascal, запуск чужих программ усложнился, он стал более гибким и функционально законченым. Вдобавок, по сравнению с Delphi, не нужно принимать никаких хитрых мер, чтобы заполучить вывод чужой программы в свою. Это позволяет не ломать голову над собственным кодом и не лезть в дебри чужого API, чтобы получить у себя этот же функционал, который уже реализован в чужой программе.

6. Ссылки

Источник: www.freepascal.ru

Параметры в Jenkins

Jenkins — один из наиболее популярных инструментов CI/CD. Он позволяет автоматизировать каждый этап жизненного цикла программного обеспечения: от создания до развертывания. В этой статье Кирилл Борисов, Infrastructure Engineer технологического центра Deutsche Bank, расскажет о параметрах в Jenkins и о том, как решить проблему хардкода с их помощью.

Основные виды параметров

Чтобы добавить параметры в Job, необходимо установить галочку «This project is parameterised»:

По умолчанию Jenkins предоставляет несколько типов параметров, но вы можете расширять это список, используя Plugins. Например, вы можете добавить Active Choice Parameter, о котором мы поговорим далее.

Вот основные параметры, которые Jenkins предлагает «из коробки»:

  1. Boolean Parameter определяет логические параметры. Может принимать значения true/false. Также для параметра можно задать значение по умолчанию. booleanParam (name: «DryRun», defaultValue: true, description: «Тестовый запуск»)
  2. String Parameter определяет одностроковый параметр. Поддерживает удаление пробелов с обоих сторон от введённого значения. string (name: «version», defaultValue: «r48», trim: false, description: «Введите версию компонента»)
  3. Multi-line String Parameter определят многостроковый параметр. text (name: «releaseNotes», defaultValue: «none», description: «Описание изменений в релизе»)
  4. Password позволяет определить ввод пароля. Данные пароля не будут отображаться при запуске Job и в console log. password (name: «password», defaultValue: «changeme», description: «Введите пароль»)
  5. Choice Parameter позволяет выбрать несколько параметров из списка ранее предустановленных параметров.
    choice (name: «env», choices: [«PROD», «DEV», «UAT»], description: «Выберите окружение для установки релиза»)

Как объявлять параметры в Jenkinsfile

pipeline < agent any parameters < booleanParam(name: «dryrun», defaultValue: true, description: «Тестовый запуск») string(name: «version», defaultValue: «r48», trim: true, description: «Введите версию компонента») text(name: «releaseNotes», defaultValue: «Добавлены новые feature», description: «Описание изменений в релизе») password(name: «password», defaultValue: «changeme», description: «Введите пароль») choice(name: «env», choices: [«PROD», «DEV», «UAT»], description: «Sample multi-choice parameter») >stages < stage(‘DryRun’) < when < expression < params.dryrun >> steps < echo «THIS IS DRYRUN!» >> stage(«Build») < steps < echo «Build stage.» echo «Hello $params.version» >> stage(«Test») < steps < echo «Test stage.» >> stage(«Release») < steps < echo «Defined release notes $params.releaseNotes» echo «Starting release on $params.env» >> > >

При запуске Job в Jenkins мы увидим:

И наконец то вывод нашего pipeline:

Active Choice Parameter

Active Choice Parameter не добавляется по умолчанию. Для его использования сначала нужно установить плагин Active Choices.

Как написано в документации: «Active Choices используется для параметризация Jenkins Job и для создания динамических и интерактивных параметров. Параметры Active Choices могут динамически обновляться и отображаться в виде полей со списком, флажков, переключателей или виджетов пользовательского интерфейса с HTML».

В нашем распоряжении появилось 3 дополнительных опции в разделе параметры:

Рассмотрим каждую из них:

  1. Active Choices Parameter позволяет использовать сценарий Groovy или Scriplet(плагин), чтобы определить, будет ли ввод вычисляться или он уже предопределен, и возвращать результаты в зависимости от выполненных скриптов.
  2. Active Choices Reactive Parameter похож на Active Choice Parameter. Он позволят использовать Groovy или Scriplet, а его значение меняется в зависимости от значения выбранного зависимого параметра.
  3. Active Choices Reactive Reference Parameter содержит параметры Active Choice Parameter и Active Choice Reactive Parameter, а также добавляет новые опции. Например, HTML-виджеты, маркированные или нумерованные списки и поля ввода.

Перейдём к практике: кейс использования Active Choice Parameter

Представим, что у вас есть задача сделать Job, который позволит разработке или L2 support устанавливать сервис определенной версии в нужное окружение. Кажется, всё должно быть автоматизировано, но на практике возникает ситуация, когда разработчик или QA-инженер хочет проверить свою версию микросервиса на определенном окружении. Это можно было бы сделать и с использованием обычных string-параметров, но давайте упростим задачу и предоставим более дружественный интерфейс.

Читайте также:
Программа vmos на Андроид что это

Для начала добавим выбор компонентов, используя gitlab api, напишем простой groovy скрипт для получения списка проектов, а затем создадим Jenkinsfile и добавим в него определение нашего параметра:

properties([ parameters([ [$class: ‘ChoiceParameter’, choiceType: ‘PT_SINGLE_SELECT’, description: ‘Select a choice’, filterLength: 1, filterable: false, name: ‘component’, script: [$class: ‘GroovyScript’, fallbackScript: [classpath: [], sandbox: false, script: ‘return [«Could not get component»]’], script: [classpath: [], sandbox: false, script: «»» import groovy.json.JsonSlurperClassic def list = [] def connection = new URL(«https://run.mocky.io/v3/e406ee99-be79-4d50-818f-b186dad7f4f4») .openConnection() as HttpURLConnection connection.setRequestProperty(‘Accept’, ‘application/json’) def json = connection.inputStream.text data = new JsonSlurperClassic().parseText(json) data.each < component ->list += component.name > return list «»» ]]]]) ]) pipeline < agent any stages < stage(«Component Name») < steps < sh «echo Selected component $» > > > >

Не забываем, что новые скрипты нужно подтверждать:

Теперь перейдем к созданию Active Choices Reactive Parameter. В зависимости от выбранного компонента нам будут показываться все версии компонента в артефатори.

Создадим простой groovy-скрипт и добавим описание в Jenkinsfile:

[$class: ‘CascadeChoiceParameter’, choiceType: ‘PT_SINGLE_SELECT’, description: ‘Select Version’, filterLength: 1, filterable: true, name: ‘version’, referencedParameters: ‘component’, script: [ $class: ‘GroovyScript’, fallbackScript: [ classpath: [], sandbox: false, script: ‘return[‘Could not get version’]’ ], script: [ classpath: [], sandbox: false, script: «»» import groovy.json.JsonSlurperClassic def list = [] def connection = new URL(«https://run.mocky.io/v3/c782ae33-98a2-4994-acc4-14c0b5cc7655») .openConnection() as HttpURLConnection connection.setRequestProperty(‘Accept’, ‘application/json’) def json = connection.inputStream.text data = new JsonSlurperClassic().parseText(json) data.data.each < it ->if (it.component == component ) < list += it.version >> return list «»» ] ] ]

Важное изменение — это опция referencedParameters. В ней мы указываем параметр, от которого зависит выполнение скрипта. Запускаем нашу Job, выбираем компонент и версию и смотрим на результат:

В результате мы получаем удобство в эксплуатации: конечному пользователю не нужно каждый раз руками «вбивать» имя компонента и искать версию в артефактори, нужно просто выбрать из списка.

Для тех, кто хочет в тонкости работы с Jenkins и получить скидку 10% на обучение

6 сентября у нас стартует курс по Jenkins, автором которого выступил Кирилл Борисов, Infrastructure Engineer технологического центра Deutsche Bank. В курсе будет много кейсов и примеров из практики спикера.

  • автоматизировать процесс интеграции и поставки;
  • ускорять цикл разработки и внедрять полезные инструменты;
  • настраивать плагины и создавать пайплайны Jenkins as a code;
  • работать с Jenkins Shared Library.

Промокод «READER» даёт скидку 10% при покупке курса.

Источник: habr.com

PaRaMeter 1.4

PaRaMeter (сокращение от «Page Rank Meter») — это бесплатная программа для проверки Google PageRank и отслеживания его изменений. PageRank — это один из методов, который использует Google, чтобы определить насколько та или иная страница релевантна поисковому запросу. PageRank — это «голос» всех остальных страниц в Интернет в пользу данной страницы, говорящий Google насколько важной является данная страница. В основе технологии PageRank лежит анализ обратных ссылок на сайт. Этот параметр является одним из важнейших факторов при определении рейтинга страницы в выдаче Google.

С помощью программы PaRaMeter вы легко сможете отслеживать изменения этого параметра для нескольких сайтов сразу и даже для отдельных их страниц. Программа проста в использовании, не требует установки Google Toolbar и абсолютно бесплатна. Поддерживаются также различные дата-центры Google.

Требования: Pentium 200 MHz, 32 MB RAM, Windows 9X/2K/XP, Internet access

Что нового в этой версии: + You can check different Google datacenters + URL extraction tool + New interface

Источник: www.download3k.ru

Parameter Legislator

Приложение «Parameter Legislator» — полезный помощник для всех. С его помощью вы можете легко, не утруждая себя следить за параметрами своего тела. В приложении есть удобная система расчета ИМТ. Для анализа нужно ввести данные о своем росте, весе и возрасте. Быстрая и точная работа вас приятно удивит.

Последнее обновление
24 нояб. 2020 г.
Книги и справочники

Безопасность данных

В этом разделе разработчики могут указать, как приложения собирают и используют данные. Подробнее о безопасности данных…

Нет информации.

Оценки и отзывы

arrow_forward
18 отзывов
Семён Ожерельев
more_vert

  • Пожаловаться

15 февраля 2021 г.

Очень удобное приложение с потрясающим интерфейсом и интересным дизайном. Меньше чем за минуту с помощью пары кликов можно узнать состояние своей физической формы. Самое замечательное что такая вещь всегда будет под рукой. Особенно очень полезно в период карантина, когда лишние килограммы вероломно появляются в твоей повседневной жизни. Отличное приложение, советую всем, кто не равнодушен к себе.

Источник: play.google.com

Parameters Manager

Parameters Manager

Parameters Manager — это программное обеспечение для локального мониторинга и задания настроек параметрам.

Parameters Manager — это программное обеспечение для локального мониторинга и задания настроек параметрам. Благодаря системе Parameters Manager от EVCO клиенты (производители, монтажники и конечные пользователи) получат рабочий инструмент, который позволит просматривать, изменять, импортировать и экспортировать настройки собственных устройств. Parameters Manager можно использовать в устройствах, в которых имеется коммуникационный порт типа TTL MODBUS или типа RS-485 MODBUS.

Документы

Инструкция по работе с программой Parameters Manager

Источник: climatplc.ru

Рейтинг
( Пока оценок нет )
Загрузка ...
EFT-Soft.ru