2017-02-03 27 views
2

現在、いくつかのテストカメラ(すべてOnvif準拠)でリレー出力の状態を切り替えようとしています。 Hikvision PTZカメラのリレー出力のリストを取得しようとすると、混乱が始まります。私は正常にリレー出力を取得することができます(これには1つしかありません)、RelayLogicalStateを要求します。Onvifプロトコルを使用してリレー出力の状態を切り替える方法

私は 'SetRelayOutputState'を使用してリレー出力を切り替えます。そのパラメータは、切り替えるリレー出力のトークンと 'RelayLogicalState'です。リレー出力は1つしかないので、私はそのトークンを送ることができます。 'RelayLogicalState'はここで間違っていない2項目(アクティブまたは非アクティブ)の列挙です。私はリレー出力の状態を切り替えることができますが、 'GetrelayOutputs'を再度呼び出して状態をチェックすると、この関数は常に入力を '非アクティブ'に設定します。

BOSCHの場合、リレー出力を再度取得することはできますが、1は存在しますが、 'SetRelayOutputState'を呼び出すと、2つの 'RelayLogicalState'のどちらも呼び出されません。参考のため

http://www.onvif.org/ver10/deviceio.wsdl

両方のカメラは、最新のファームウェアがインストールされているとONVIFデバイスマネージャに応じて、両方のONVIFバージョン2.0を使用します。

private void OutputLowButton_Click(object sender, EventArgs e) 
    { 
     if (relayOutputs != null) 
     { 
      //only 1 present so we take the first for this example 
      var output = relayOutputs.First(); 
      execute(() => IOClient.SetRelayOutputState(output.token, RelayLogicalState.inactive)); 
     } 
    } 
    private void OutputHighButton_Click(object sender, EventArgs e) 
    { 
     if (relayOutputs != null) 
     { 
      //only 1 present so we take the first for this example 
      var output = relayOutputs.First(); 
      execute(() => IOClient.SetRelayOutputState(output.token, RelayLogicalState.active)); 
     } 
    } 
    private void OutputStateButton_Click(object sender, EventArgs e) 
    { 
     //only 1 present so we take the first for this example 
     var relayOutputs = execute(() => IOClient.GetRelayOutputs()); 
     if(relayOutputs != null) 
      MessageBox.Show(relayOutputs.First().Properties.IdleState.ToString()); 
    } 

EDIT

結局私は、それは次のように働いてしまった:

relayOutput.Properties.Mode = Onv_Device_Management.RelayMode.Bistable; 
      relayOutput.Properties.IdleState = Onv_Device_Management.RelayIdleState.open; 
      TryCatch(() => deviceClient.SetRelayOutputSettingsAsync(relayOutput.token, relayOutput.Properties)); 
      TryCatch(() => deviceClient.SetRelayOutputState(relayOutput.token, Onv_Device_Management.RelayLogicalState.active)); 

答えて

1

私もそれにいくつかの問題を抱えていました。 SetRelayOutputSettingsという別のonvif関数があります。

アイドル状態
/オープンクローズ
遅延時間
時間モードが "単安定" であれば、それは戻ってアイドル状態に来る
モード:あなたはそこの設定のカップルを持っています
双安定 - あなたはよって状態を変更する必要がありますurself
単安定 - あなたが状態を設定した後、それは「遅延時間」あなたもそこにトークンを提供する必要がある。もちろん、

後に戻ってアイドル状態になるだろう。それでも問題を解決するには、このシーケンス(擬似コードはC#ではありません)で関数を呼び出さなければなりませんでした。私はC#ではありません:

+0

あなたのコメントをありがとう、それは私のために働いていなかった、いくつかの異なるブランドを試してみる。 –

関連する問題