मैं OPCUA के लिए बिल्कुल नया हूं और का उपयोग करके C# में AddNodes सेवा को कार्यान्वित करने के तरीके पर एक उदाहरण का उपयोग कर सकता हूं आधिकारिक .NET मानक एसडीके। मूल रूप से मैं जो करना चाहता हूं वह मेरे कस्टम सर्वर को कार्यान्वित कर रहा है और क्लाइंट से AddNodes सेवा को किसी फ़ोल्डर में कुछ नोड्स जोड़ने के लिए कॉल करने में सक्षम है (और उनके प्रारंभिक मान सेट करें)।

मैंने देखा है कि इनहेरिट करने के लिए विभिन्न वर्ग हैं, इसलिए मैंने सोचा कि StandardServer से इनहेरिट करना और AddNodes विधि को ओवरराइड करना सबसे अच्छा होगा। उसके बाद, मैं अपना खुद का कस्टम नोड मैनेजर बना सकता था और इसे इस विधि के भीतर से कॉल कर सकता था। हालांकि, नमूना नोड प्रबंधकों में से कोई भी AddNodes विधि लागू नहीं करता है (यहां तक ​​​​कि INodeManager इंटरफ़ेस भी नहीं) इसलिए मैं सोच रहा हूं कि मैं सही रास्ते पर हूं या नहीं।

क्या किसी ने पहले ही इस एसडीके का उपयोग करके एडनोड्स सेवा लागू कर दी है और मुझे कुछ संकेत देने के लिए तैयार है कि ऐसा कैसे करें? क्या आपने अभी अपने कस्टम नोड मैनेजर पर अपनी खुद की AddNodes विधि बनाई है और वहां नोड्स जोड़े हैं? कुछ कोड स्निपेट बहुत मददगार होंगे। धन्यवाद!

1
Tobias von Falkenhayn 10 अक्टूबर 2020, 12:36

1 उत्तर

सबसे बढ़िया उत्तर

मुझे लगता है कि तुम सही रास्ते पर हो। SessionServerBase, Opc.Ua.Services.wsdl द्वारा स्वतः उत्पन्न होता है। StandardServer, वर्चुअल विधियों के केवल सबसेट को ओवरराइड करने के साथ, SessionServerBase से विरासत में मिला है।

तो आपको StandardServer में AddNodes को ओवरराइड करने की आवश्यकता है, और नीचे नोड्स जोड़ने का एक उदाहरण है।

public override ResponseHeader AddNodes(
    RequestHeader requestHeader,
    AddNodesItemCollection nodesToAdd,
    out AddNodesResultCollection results,
    out DiagnosticInfoCollection diagnosticInfos)
{
    results = null;
    diagnosticInfos = null;

    ValidateRequest(requestHeader);

    foreach (var item in nodesToAdd)
    {
        if (item.NodeClass == NodeClass.Variable)
        {
            var node = new VariableNode
            {
                // TODO: Initialization
            };
            m_serverInternal.CoreNodeManager.AttachNode(node);
        }
        else if (item.NodeClass == NodeClass.VariableType)
        {
            var node = new VariableTypeNode
            {
                // TODO: Initialization
            };
            m_serverInternal.CoreNodeManager.AttachNode(node);
        }
        else
        {
            // TODO
        }
    }

    return CreateResponse(requestHeader, StatusCodes.Good);
}
2
Han Zhao 15 अक्टूबर 2020, 00:59