Wireshark是强大的网络协议分析工具,而open62541也是基于socket的,所以也可以用其来观察OPCUA通信消息。
去https://www.wireshark.org/去下载并安装Wireshark,这里选择Windows 64位安装包,
下载后直接安装就行了,安装完要重启下电脑。
打开Wireshark,打开"编辑"->“首选项”,
然后展开Protocol,
往下拉找到OpcUa,如下,注意右侧的端口号,需要和OPCUA服务器的端口号一致,
然后点击OK就行了。
需要选择网络接口,由于本人的OPCUA服务器是运行在虚拟机里的,所以选择虚拟机对应的接口,如下,
PS:如果是本地局域网,那么就使用loopback那个接口;如果不确定哪个接口对应自己的虚拟机,可以把鼠标悬停在接口名上,会显示ip地址,根据地址就可以知道需要的接口了。
双击就进入观察窗口了,在过滤的地方输入opcua然后回车,
此时在虚拟机里开启server,然后在Windows下打开UaExpert连接服务器,此时就可以在Wireshark里看到很多消息了。
在UaExpert这边,把ServiceLevel拖到中间的DataAccess View窗口,
可以看到其值为255,
此时在Wireshark这边,可以看到相关的消息,即创建订阅和监测项,然后就是发送publish请求,此时server会给一个publish请求的回应,即下图中选中的那一行,
双击打开这一行,展开如下,
下面是原始通信数据,上面是解析后的信息,此时展开OpcUa Binary Protocol,如下,
接着展开NotificationData,如下,可以看到和UaExpert这边观察到的值是一样的,
注意,由于这个变量值一直是255,所以只能在第一次的回应中看到其值,后面的回应里都没有值,这是因为监测项只有在变量值发生变化时才通知client
PS:当点击解析信息里的某项时,在下面的原始数据栏里会自动选中对应的字节,非常方便!
同理,当client发送其它请求,如read/write,也可以使用Wireshark进行观察,可以帮助我们进行debug,来确保程序写的是否正确。