OPC UA Client接口库

OPC UA库秉承简单、易用、可靠的设计理念,只需少量接口即可实现所需功能,同时使用者无需考虑多线程,时序等问题

1. 拷贝代码文件

       将 \JngOpcUaClient\JngOpcUaClient\Input\ 文件夹拷贝到项目中,添加到项目。

OPC UA Client接口库_第1张图片

 

2. 拷贝dll库及SecurityKey

       文件路径:\JngOpcUaClient\Debug\

OPC UA Client接口库_第2张图片

 

3. 代码使用

3.1 连接及初始化

OPC UA Client接口库_第3张图片

 

调用顺序

① 设置认证模式

           模式有三种:

1) 无认证

2) 256位加密的签名

3) 256位加密的签名+加密

② 设置变量值改变时候通知的回调函数

③ 连接OPC UA服务器

3.2 遍历服务器元素对象

OPC UA Client接口库_第4张图片

 

① 获取节点Node的子元素

如果是root,则不传入Node名

② 返回Node的子Node清单和错误代码

// 第一次初始化
void CJngOpcUaClientDlg::FirstInitNodeID()
{
	m_treeNodeID.DeleteAllItems();
	HTREEITEM pTreeItem = AddDataToTree("root", NULL, NULL);

	// 连接成功,获取清单
	std::string pNodeID;
	std::list listSubNodeID;
	std::list::iterator ite;
	m_pOpcUaClient.GetVariableList(pNodeID, listSubNodeID);

	for (ite = listSubNodeID.begin(); ite != listSubNodeID.end(); ite++)
	{
		ONE_NODE_DATA* pNodeData = NewNodeData();
		pNodeData->pNodeInfo = *ite;

		AddDataToTree(ite->pBrowserName, pTreeItem, pNodeData);
	}
		
}

3.3 获取变量值和注册值改变通知

OPC UA Client接口库_第5张图片

 

// 添加读取数据
void CJngOpcUaClientDlg::OnBnClickedBtnAdd()
{
	if(m_pCurSelNode != NULL)
	{
		if (m_pCurSelNode->pNodeInfo.nNodeClass == UA_NODE_CLASS::VARIABLE)
		{			
			UA_TYPE::ENUM nType = UA_TYPE::UNSPECIFIED;
			m_pOpcUaClient.GetVariableValue(m_pCurSelNode->pNodeInfo.pNodeID, 
				m_pCurSelNode->pValue, 
				nType);		// 获取值

			// 添加到list控件界面
			AddOneDataToListCtrl(m_pCurSelNode, nType);
			
			// 设置通知方式
			m_pOpcUaClient.SetVariableChangeNotify(m_pCurSelNode->pNodeInfo.pNodeID);
		}		
	}
}

3.4 设置值(写入)

OPC UA Client接口库_第6张图片

 

// 设置值
void CJngOpcUaClientDlg::OnBnClickedBtnSetValue()
{
	CString pNode;
	CString pValue;
	CString pValueType;
	m_editNode.GetWindowText(pNode);
	m_editValue.GetWindowText(pValue);
	m_editValueType.GetWindowText(pValueType);


	if (pNode.GetLength() > 0)
	{
		int nType = ::atoi(pValueType);
		m_pOpcUaClient.SetVariableValue((LPCSTR)pNode, (LPCSTR)pValue, nType);
	}
}

接口源代码下载:www.jngbus.com

你可能感兴趣的:(服务器,java,c++)