0

Qt でプログラムを作成しており、QOpcUaNode クラスを使用しています。ここまでは、writeAttribute を使用して OPC に書き込むだけで済みましたが、問題なく動作しました (私のノードは、私が見る限り正しくセットアップされていることを意味します)。ここで、ノードに保存されている情報も読み取る必要がありますが、それを機能させることができず、qDebug() を使用して属性を表示しようとすると、常に QVariant(Invalid) を受け取ります。

ドキュメントで読んだことから、ノードを読み取る前に、信号 attributeRead を発行する必要があります。このシグナルを発行するために、readAttributes(QOpcUa::NodeAttribute::Value) と readValueAttribute() という 2 つの異なる方法を試しました。コードは次のとおりです。Flow は QOpcUaNode* で、m_custom はクラスの bool メンバーであり、最初は false に設定されています。

connect(Flow, &QOpcUaNode::attributeRead, this, &OPC_Client::custom);

qDebug() << Flow->readValueAttribute();
qDebug() << Flow->readAttributes(QOpcUa::NodeAttribute::Value);

int i(0);
while (m_custom != true) {qDebug() << i; i++;}

custom は単に m_custom = true; を実行するスロットです。プログラムをコンパイルして開始すると、これらの行に到達すると、iの値が上がり、停止することはありません。つまり、シグナルが送信されないことを意味します。私は最初に while ループなしで試してみました。待機せずに値を読み取るだけで、QVariant(Invalid) を受け取りました...

Flow ->writeAttribute(QOpcUa::NodeAttribute::Value, true ,QOpcUa::Types::Boolean); を使用して書き込みます。すべてが正常に動作します。

誰かがこれで私を助けてくれますか?

4

0 に答える 0