文章目录
在智能工厂架构中,WinCC作为SCADA一级,负责着与上级MES和下级PLC及其他现场组件的联系。在向下层的拓展,WinCC支持S7、DP、Modbus TCP、OPC等等多种接口和协议。在向上层的通讯,WinCC也提供了REST Api这一便利的方法。REST是一组规范,基于HTTP传输,在日常生活中也拥有广泛的应用。
本文记录通过REST访问WinCC数据的全部前期准备工作以及调试的详细步骤。本文使用到的软件有WinCC 8.0及测试工具Postman。下面开始。
安装组件
使用REST需要用到WinCC的两个数据包,在安装WinCC时选择安装。若安装时未安装ConnectivityPack,需要重新运行安装程序补充安装。打开安装程序,选择数据包安装,勾选ConnectivityPack下的两个数据包,点击下一步。
向下翻页面,找到ConnectivityPack,将下面各个组件打勾,然后安装。
ConnectivityPack授权
添加组件后要为新组件授权,运行Sim_EKB_Install,左侧选择需要的密钥,在右侧找到WinCC Connectivity Pack,选中,为其安装长密钥。图中我已安装密钥,所以在已安装的密钥中可以找到WinCC Connectivity Pack,注意右侧版本号要与使用的软件版本一致。正版选手请在Automation License Manager中确认WinCC Connectivity Pack已授权。
启动CCRestService服务
按win+R键,运行services.msc,启动服务。找到SIMATIC WinCC CCRestService并将其启动。如无法启动,需要先运行WinCC。
创建证书
启用REST需要证书,先为其签发一个证书。在系统搜索界面输入iis,打开Internet Information Services (IIS)管理器。
打开服务器证书
点击右侧创建自签证书,起一个好记的名字,本例中为myRestCert
注意此处新建的证书,颁发给和颁发者均为本机名称。后续WinCC中的设置用到本机名称时也要统一。
创建/打开项目
新建或打开一个已有的WinCC项目。如果项目已激活,先点击左上角小方块停止激活。点击左侧计算机,右侧找到与本机名称相同的计算机(如果存在多个的话),右键,属性,在常规中查看计算机名称是否为本机名称,若不是,点击名称下方使用本地计算机名称。点击启动选项卡,将最后一项“REST服务”打勾。
再切换到REST设置页面,将“通过 REST 发送变量值”打勾,注意此处主机名称,如果不是本机名称,必须修改为与常规页面统一的主机名称。点击端口证书,选择刚才创建的myRestCert证书。如果此时提示“当文件存在时无法创建文件”,说明本地端口中填写的端口号已经配置过证书了,修改为其他端口号就行。
添加REST权限
返回WinCC主界面,双击打开用户管理器。点击左上角用户管理器字样,在中间一栏最底端点击权限等级。
在权限等级中新增两项,分别为Rest读写权限,ID与名称任意,便于识别即可。
在左侧用户管理器中右键单击Administrator-Group,添加新用户,这个用户就是后期用来以Rest访问WinCC的身份,本例中起名admin,在右侧设置一个密码,在权限列表中勾选刚才新添加的权限。
新建/配置变量
需要被访问的变量需要进行单独的设置,本例创建了新的内部变量用于演示,其他类型的变量操作相同。找到想要操作的变量,在右侧属性的最下端找到REST API,将读写权限设置为刚才新建的读写权限就可以了。
安装Postman
Postman是一款Rest API测试平台。在官网下载安装Postman:https://www.postman.com/downloads/。启动软件。
点击图中位置开始一个新请求。请求方式选择GET,下方点击Auth设置,选择Basic Auth,右侧填入刚才在WinCC中新建的用户和密码。
再点击Setting页面,将Enable SSL certificate verification关闭。
读取变量
尝试读取一个变量,地址格式为:https://{Host}:{Port}/WinCCRestService/tagManagement/Value/{VariableName}
Host是主机名,Port是端口,VariableName是变量名,按照上面设置的填好。本例中对应的地址为:https://DESKTOP-BLFAE49:34573/WinCCRestService/tagManagement/Value/Value1
将WinCC激活,在Postman里粘贴地址,点击Send,即可从WinCC读取变量名为Value1的变量。
读取成功,状态码为200 OK。返回的内容格式为JSON,在value可以看到此时变量值为10。
读取失败的原因
若读取失败,可能存在以下原因。
状态码 401 Unauthorized:未授权。可能是前面Auth和SSL设置的地方出现问题。
状态码 200 OK,但读取的内容显示error : Forbidden。可能是WinCC中变量的REST API属性设置有问题。
请求发送失败:没有状态码,显示发送失败或者主机错误。可能是WinCC的REST设置问题,检查主机名是否对应,检查证书是否选择正确。
写入变量
通过REST向WinCC写入一个变量。地址与读取变量相同,方式改为PUT。点击Body页面,类型选择row,JSON格式输入{"value":xx}
,xx为要写入的变量值。
状态码为200 OK,说明写入成功。
读写多个变量
读写多个变量的方法与单个的类似,需要将地址最后的变量名去掉,将Value改为Values:https://{Host}:{Port}/WinCCRestService/tagManagement/Values
在Body处以JSON格式输入要读取的变量名,形如:{"variableNames" : ["Tag1", "Tag2"]}
多个变量写入时地址相同,方法类似。
读取归档组态及归档数据
通过REST还能访问WinCC的归档。首先在WinCC里组态归档。地址为:https://{Host}:{Port}/WinCCRestService/tagLogging/Archive/{ArchiveName}/Variables
方式为GET。
读取归档数据,需要在变量记录里将需要读取变量的属性中找到REST API读权限,设置为前面建立的REST读权限。地址为:https://{Host}:{Port}/WinCCRestService/tagLogging/Archive/{ArchiveName}/Value/{VariableName}
方式为GET。默认返回最近的1000条数据。可以添加参数警醒筛选:参数begin设置起始时间,参数range设置范围。格式如:https://{Host}:{Port}/WinCCRestService/tagLogging/Archive/{ArchiveName}/Value/{VariableName}?begin=yyyy-MM-dd HH:mm:ss.SSS&range=x
例如从2024年9月10日8时30分开始的10个数据,为:https://DESKTOP-BLFAE49:34573/WinCCRestService/tagLogging/Archive/Archive1/Value/Value1?begin=2024-09-10 08:30:00.000&range=10
咦?空白评论吗?你是怎么做到的
我单发了个表情