Skip to content

An open source OPC DA Client SDK/ToolKit written in C++, support both 32 bit and 64 bit.

License

Notifications You must be signed in to change notification settings

andvasp/OPC-Client-X64

 
 

Repository files navigation

Description

  • An object oriented OPC DA Client SDK/ToolKit written in C++, Both X86/X64 supported, implementing the OPC DA specification version 2.05A
  • New Features (Compare with the original version)
    • Build with x64 project.
    • Build with MFC.
    • Multithread supported.
    • Connect to server with CLSID.(Hasn't tested)

Known Issues

  • the x64 version has some address corruption problem when you are using VS2012 or later, you can open "Project Property -> Linker -> CommandLine", then add /HIGHENTROPYVA:NO to avoid this issue, See Issue#1 for more detail

Basic Guide

  • Install OPC Core Component x64 is NECESSARY if you want to build x64 project, I bundled the 3.0.105.1 version (seems more popular).
  • You can test the Toolkit with MatrikonOPC Simulation Server.
    • You can get it free at offical site after reg.
    • Start OPC Simulation Server, then build project. Run the demo, input hostname, then input server ID, it should work.
    • If you were to commit a issue, you should give a code sample with the Simulation Server. Since this is the only env we can reproduce the error.
  • I advice you to use hostname instead of IP address for reasons below.
    • If you want to access OPC by IP, you have to enable RemoteRegistry service in services.msc
    • Also , for UAC problem after Vista, your program must run as admin to avoid some issue.
  • There is a convenience wrapper class that may help you connect local server easier.

Advanced Guide

  • Multi - Thread Programing Guide
    • Call COPCCLint::initand COPCClinet::stop in every thread. There are two method to init, in one application, different thread could use different method.
      • You can call COPCClient::init(MULTITHREADED) to init thread OLE, then the COPCxxx created in the thread could be accessed from other thread that is also inited with MULTITHREADED.
      • You can call COPCClient::init() to init thread OLE, but all COPCxxx created in the thread can't be accessed from different thread.
    • Attention: If you are using anything related to MFC GUI, you MUST use COPCClient::init() in main thread (the UI thread). (See MSDN).

Detail & ChangeLog

  • Date: 2017-07-07

    • Thanks for mzillgith, now the project can connect to remote server with CLSID.(It hasn't been tested)
  • Date: 2017-04-13

    • Fix a string conversion bug which might lead stack overflow
    • Add a convenience class to connect local server in sync I/O mode
     	// connect local server
     	LocalSyncOPCCLient* client = new LocalSyncOPCCLient;
     	client->Init();
     	if (client->Connect("Matrikon.OPC.Simulation.1"))
     	{
     		// sync write and sync read
     		client->WriteUint16("Bucket Brigade.UInt2", 998);
     		std::cout << client->ReadUint16("Bucket Brigade.UInt2");
    
     		// disconnect and stop
     		client->DisConnect();
     		client->Stop();
     		delete client;
     	}
    
    • You could rewrite or override the member function IsOPCConnectedPLC() to make connection more safety
    • You could rewrite or override the member function ItemNameFilter(std::string) to avoid adding useless items
    • Since there are too many Variant type, I only add three basic I/O functions as a guidence, it should help you to add what you need
  • Date:2016-12-13

    • Thanks for Tom Loya's contribution, now the project can work in a multi-threaded environment. You should call COPCClient::init() and COPCClient::stop() in every thread.
  • Date:2016-07-01

    • this std branch tries to move every ATL to STL.
    • the static .lib now works for MFC too.
  • Date:2016-05-31

    • Modified from X86 Version OPC Client 0.4a by beharrell
    • Add some Hint info
    • X64 Version uses includes files form OPC Core Component 3.0.106.

About

An open source OPC DA Client SDK/ToolKit written in C++, support both 32 bit and 64 bit.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • C++ 95.8%
  • C 4.2%