Python通过OPC UA协议和WinCC通讯
- 使用KEPServerEX6与WinCC通讯来实时查看变量
读取WinCC变量的数据类型和地址可以通过KEPServerEx实现
设置OPC服务器:opc.tcp://192.168.0.252:4862/
- OPC服务器端设置
1)系统启动OpcUaServerWinCC服务,查看端口4862是否开放
netstat -an
上述命令会显示当前开放的端口号以及应用程序占用的端口号,其中"-a"表示列出所有连线中的Socket,而"-n"表示不把界面和端口名转换成数字和名称,这样能大大提高查询效率
2)修改WinCC文件设置,并重启WinCC
安全策略Basic256,消息模式:SignAndEncrypt
3) OPENSLL生成Python连接证书
set OPENSSL_CONF=D:\works\Python_Qt\wincc\ssl.conf
openssl genrsa -out private_key.pem 2048
openssl req -x509 -days 365 -new -out certification.pem -key private_key.pem -config ssl.conf
a.生成私钥-首先,需要生成一个私钥,该私钥将与证书绑定,并用于加密和解密通信数据。私钥是一个保密的文件,只有证书持有者可以访问和使用。
b.创建证书签名请求-接下来,证书持有者需要使用私钥生成一个证书签名请求(CSR)。CSR包含证书申请者的基本信息,如名称、组织机构等,并将公钥提交给证书颁发机构(CA)作为申请证书的证据。
c.验证申请者身份-CA会对申请者提交的信息进行验证,以确保其身份的真实性和合法性。这通常涉及到与申请者进行会话,并要求提供相关的id明文件,以验证其身份。
d.签发证书-一旦CA确认申请者的身份,它将使用自己的私钥对申请者的公钥和信息进行签名,生成一个包含申请者信息和签名的证书。该证书即为OPCUA证书,将与私钥一起提供给申请者。
e.安装证书-申请者需要将私钥和证书安装到其设备中,以便在OPC UA通信过程中进行身份验证和数据加密。私钥通常存储在受保护的区域,而证书则存储在可读取的位置。
f.验证证书-在建立OPC UA通信连接时,双方会交换证书以验证对方的身份。每个设备都会验证对方的证书,以确保其来自受信任的CA,并没有被篡改。
g.加密通信-一旦双方的证书被验证通过,他们将使用对方的公钥来加密和解密数据,确保通信数据的保密性。这样,即使在网络传输过程中被截获,也无法解密其中的内容。
Python(UA客户端)与WinCC(UA服务器)通讯流程如下:
1. UA客户端首次连接UA服务器时,客户端将获取服务器数字证书,验证是否可信任;
2. UA客户端接受UA服务器证书,并将其存放于Client Certificate Store;
3. UA客户端发起创建环境请求,并传递Client.der至UA服务器;
4. UA服务器自动将Client.der存放于Rejected目录下,用户需要手动剪切至certs目录下。
在完成证书校验后,OPC UA服务器与客户端可以进行数据的交换。
4) 信任证书
client.connect后会在WinCC OPCUA服务器C:\Program Files (x86)\Siemens \WinCC\opc\UAServer\PKI\CA\rejected\certs下 产生一个被拒绝的证书,将该证书移动到C:\Program Files (x86)\Siemens\WinCC\opc\UAServer\PKI\CA \certs下,然后安装该证书,将证书存储于-受信任的根证书颁发机构。