【发布时间】:2018-11-18 05:06:20
【问题描述】:
我的项目是关于编写一个 OPC UA 客户端,在 Siemens PLC OPC UA 服务器上读取和写入变量。我正在使用 Visual Studio 2017 Enterprise 并安装了来自 OPClabs 的 Quick OPC Toolkit 以开始并尝试连接。为了对客户端进行编程,我使用的是 Windows 窗体和 C#。 与服务器连接并读取变量工作正常,但编写它们让我很头疼:
1.) 在我开始自己编程之前,我从 OPC 基金会下载了 OPC UA 示例客户端(如果有人需要下载链接,请询问,很难找到下载)。我连接到服务器并可以浏览变量,但写入功能灰显/不可用。
2.) 我开始编写一个非常简单的客户端,但也未能编写变量。通过 Live Binding (http://opclabs.doc-that.com/files/onlinedocs/QuickOpc/2018.2/User%27s%20Guide%20and%20Reference-QuickOPC/webframe.html#Making%20a%20first%20OPC%20UA%20application%20using%20Live%20Binding.html) 阅读是有效的,也可以通过使用 easyUAClient.Read() 阅读它们。我试图用这段代码写一个变量:
namespace ErsteOPCUAVerbindung{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
var easyUAClient = new EasyUAClient();
easyUAClient.WriteValue("opc.tcp://OpcUaClient:password@192.168.216.1:4840/", "nsu=SinumerikVarProvider;ns=2;s=/NC/_N_NC_TEA_ACX/$MN_PLC_CYCLIC_TIMEOUT", 1);
}
}}
但我不断收到异常:
OpcLabs.EasyOpc.UA.OperationModel.UAException:“发生错误代码为 -2144010240 (0x80350000) 的 OPC-UA 操作失败,源自 'OpcLabs.EasyOpcUA'。内部 OPC-UA 服务异常,服务结果为 'BadAttributeIdInvalid ' 包含有关问题的详细信息。”
{"OPC-UA 服务结果 - 发生特定于 OPC-UA 服务的错误。\r\n---- SERVICE RESULT ----\r\nStatusCode: {BadAttributeIdInvalid} = 0x80350000 (2150957056)\r \n"}
我不知道是什么原因造成的。我怀疑,这可能是某种访问限制的原因,但我在文档中找不到任何关于它的提示,而且我还是以管理员身份登录。
有人有想法吗?谢谢。
【问题讨论】:
-
我代表 OPC 实验室,欢迎您使用在线论坛 opclabs.com/forum/index 发布与产品相关的问题。在这种特殊情况下,您可能正在写入由服务器设置为只读的内容(尽管在这种情况下错误代码应该不同)。您也可能需要专门对服务器进行身份验证(您的 Windows 登录不“计数”) - 这是使用您无法传递给 WriteValue 的 UAEndpointDescriptor 上的 UserIdentity 完成的。
-
如果您可以读取标签但不能写入标签,那么您可能没有正确配置标签。查看名称类似于“写掩码”或“访问级别”的属性。请注意,名称类似于“plc 循环超时”的标签几乎肯定是只读的,只有 PLC 控制器可以设置该信号,因为它是检测到此类错误条件的那个。
-
@Hans Passant 我尝试了不同的参数(例如简单的 R 参数),但它也不起作用。
-
@ZbynekZ 下次我会尝试 OPC 实验室论坛,我只是怀疑,问题更多是关于 PLC 而不是客户端。我退后一步,得到了旧版本的服务器,我现在正在使用 OPC UA 示例客户端,以确保不是我的代码导致了问题。
-
当我尝试使用 OPC UA 示例客户端编写 R 参数时,我收到消息:BadUserAccessDenied。所以它必须是用户访问的问题,但我使用 [SignAndEncrypt:Basic128Rsa15:Binary] 和在 PLC 上创建的管理员登录数据登录。没有明确的理由说明用户不能写字,还是我遗漏了什么?
标签: c# visual-studio winforms server opc