shineworld 73 Posted June 26, 2023 Hi all. I need to implement an OPC UA Server in a Delphi program. Actually, I've used an external QT C++ application to do OPC UA things but is complex to maintain changes in the server and share an interface between this external program and the main program written with Delphi and I would like to know if there is a valid native Delphi library to use, better if open-source, but this is not mandatory. Thank you for your suggestions. Share this post Link to post
Der schöne Günther 316 Posted June 26, 2023 I tried. I really did. And then gave up and did it in C++ with the free and widely used open62541 library. I tried using the dlls in Delphi, but always had access violations. The delphi translated headers were correct. Fun fact: I am not the only one who tried and failed. Another Delphi-Praxis member, completely independent of me, also tried, failed and then just did it in .NET. Fehler mit externer DLL, Callback-Funktionen. - Delphi-PRAXiS (delphipraxis.net) [German language] Delphi Externen Prozess starten und beenden - Delphi-PRAXiS (delphipraxis.net) [German language] For me, that was now two years ago and our opc ua server has seen many extensions and is working well. I implemented it as a seperate standalone console application that talks with delphi application via http/rest. I find it very comfortable and easy to debug. A coworker just added a simple opc ua server to his project in Python within an extremely short time. tl;dr: Having a shared interface between Delphi and another binary really was the least challening part for us. I think actually understanding what OPC UA is and what it can do was much harder. Share this post Link to post
shineworld 73 Posted June 26, 2023 Interesting and disheartening in the same way. Over the past 7 years, I have created an entire CNC ecosystem from logic boards to CNC control software running on Windows OS done entirely in Delphi (well it runs without any problem, and in some bought even better, in Linux environment under Wine, at least as far as memory management is concerned). For OPC UA server management I have already sketched out something following the OPC 40502 standard (OPC UA for Computerized Numerical Control (CNC) Systems), initially using Python opcua but then switched to a program external to Delphi made with QT. Not having native handling in Delphi makes things quite complex for me, and I have to do everything with an additional TCP layer between the two processes to exchange information, events, etc. I am precisely looking for a way to avoid all this and keep everything in one language and process. Share this post Link to post