私は、OPCサーバーとしてKepwereを使用してWPF用にthis ua-clientを使用して制御ソフトウェア/ HMIを書きます。WPFとOP UAに再接続した後に監視項目の値を再送
今日、私はいくつかの接続テストを行っていました。私のPLCのイーサネットケーブルを外し、ソフトウェアの監視項目の値を変更しました。明らかにこの変更は有効になりません。接続状態ですが、再接続した後、以前に設定した値でPLCタグをリフレッシュしないのはなぜですか?
これは予想される動作で、これを複製するために内部ストレージ変数を作成する必要がありますか?
Kepserverには、PLCにエラーがあるかどうかを示すSystem.NoErrorタグがあるため、PLCがオフラインであることがわかります。しかし、私は最新の変更を再送しようとしていますが、再接続中はオフラインでした。
私はSetPropertyメソッド上書き:
protected override bool SetProperty<T>(ref T storage, T value, [CallerMemberName] string propertyName = null)
{
if(ServerState != CommunicationState.Opened || (!System_NoError && "System_NoError" != propertyName))
{
m_eventsPending.Add(new WriteEvent
{
PropertyName = propertyName,
PropertyValue = value
});
return false;
}
return base.SetProperty(ref storage, value, propertyName);
}
をそして、これでサーバの状態変化イベントに耳を傾ける:私はSystem_NoError上のすべての変更で
public void OnStateChangeEvent(CommunicationState state)
{
ServerState = state;
}
:
private void OnError()
{
if(System_NoError)
{
while(m_eventsPending.Count > 0)
{
WriteEvent e = m_eventsPending.ElementAt(0);
bool storage = !(bool)e.PropertyValue;
var p = this.GetType().GetProperty(e.PropertyName);
p.SetValue(this, storage);
p.SetValue(this, e.PropertyValue);
m_eventsPending.RemoveAt(0);
}
}
}
私はいくつかの初期化を行い、それをm_eventsPendingリストに保持し、connec (オープンされた)が、PLC側では何も起こらない。何が間違っていますか?
PS:ソフトウェアとの任意の他の相互作用が ホセTruyol
ありがとう@andrewcullen。私はあなたのGitHub [Repository](https://github.com/convertersystems/opc-ua-client/)でこの質問を続けます。 – JoseTruyol