实现Codesys2.3、Codesys3.5同时与C#上位机通过OPC通讯———Codesys开启OPC服务器配置方法
测试使用的是codesys2.3和codesys3.5sp7,V2.3使用的是OPC DA ,V3.5使用了OPC UA,好像从codesys3.5SP12后,codesys中的OPC Ua需要一个数字签名,OPC DA和OPCUA的区别参考一下两个链接,https://www.cnblogs.com/qdwyj/p/9114898.html,
https://stackoverflow.com/questions/30642918/difference-between-opc-ua-and-opc-da,也就是说,OPC UA兼容OPC DA。
在安装codesys是,勾选所有项,其中的codesys gateway v2.3对应 OPCConfig中的Gateway3,codesys gateway对应Gateway,codesys OPC sever3使用的是OPC UA。两种网关的详细区别在根目录CODESYS OPC Server 3下CoDeSys_OPC_Server_V3_User_Guide.pdf中
要实现同时与支持codesys2.3的plc和支持codesys3.5的plc通讯,可以按照下面的思路,同时建立两个opc线程,读取两个PLC中的数据,亲测可行。
OPC接口定义在opcda20_auto.pdf中(https://wenku.baidu.com/view/64f0e59851e79b8968022682.html),通讯的过程大致如下:
1、确定OPC客户端,例如PLC的地址,以及opc服务器的类型,是DA 还是UA;
2、按照服务类型和客服端IP地址,连接设备;
3、使用OPCgroups和OPCgroup两个object,创建组,组中包含的是items;
4、设置通讯属性;
5、ShowBranches()展开从接口中读到的所items存入程序内存中;
6、监听group组。
/// <summary>
/// OPCServer Object
/// </summary>
OPCServer KepServer;
OPCServer KepServer1;
/// <summary>
/// OPCGroups Object
/// </summary>
OPCGroups KepGroups;
OPCGroups KepGroups1;
/// <summary>
/// OPCGroup Object
/// </summary>
OPCGroup KepGroup;
OPCGroup KepGroup1;
/// <summary>
/// OPCItems Object
/// </summary>
OPCItems KepItems;
OPCItems KepItems1;
/// <summary>
/// OPCItem Object
/// </summary>
OPCItem KepItem;
OPCItem KepItem1;
/// <summary>
/// 主机IP
/// </summary>
string strHostIP = "";
string strHostIP1 = "";
/// <summary>
/// 主机名称
/// </summary>
string strHostName = "";
string strHostName1 = "";
/// <summary>
/// 连接状态
/// </summary>
bool opc_connected = false;
bool opc_connected1 = false;