/// <summary> /// Выполнить подпрограмму на устройстве без подтверждения успеха. /// </summary> /// <param name="target">Адрес устройства.</param> /// <param name="id">Идентификатор подпрограммы.</param> /// <param name="args">Аргументы, передаваемые в подпрограмму в виде массива пар, /// где первый элемент пары содержит тип параметра, второй - значение.</param> public void ExecuteProgram(Address target, int id, params Tuple <NmsValueType, object>[] args) { Contract.Requires(!IsDisposed); Contract.Requires(target != null); Contract.Requires(target.Type != AddressType.Empty); var execute = new NmsExecuteProgramInvocation(Address.Empty, target, id, false, args); OutgoingMessages.Post(execute); }
/// <summary> /// Асинхронно выполнить подпрограмму на устройстве с подтверждением успеха операции. /// </summary> /// <param name="target">Адрес устройства.</param> /// <param name="id">Идентификатор подпрограммы.</param> /// <param name="options">Параметры NiBUS-операции.</param> /// <param name="args">Аргументы, передаваемые в подпрограмму в виде массива пар, /// где первый элемент пары содержит тип параметра, второй - значение.</param> /// <returns><see cref="Task"/> - асинхронная операция.</returns> public async Task ExecuteProgramConfirmedAsync( Address target, int id, NibusOptions options = null, params Tuple <NmsValueType, object>[] args) { //Contract.Requires(!IsDisposed); //Contract.Requires(target != null); //Contract.Requires(target.Type == AddressType.Hardware || target.Type == AddressType.Net); var execute = new NmsExecuteProgramInvocation(Address.Empty, target, id, true, args); await WaitForNmsResponseAsync(execute, options); }