当前位置: 首页 > news >正文

C#上位机通过WebApi访问WinCC

在智能工厂架构中,WinCC作为SCADA一级,负责着与上级MES和下级PLC及其他现场组件的联系。与下层通信,WinCC支持S7、MC、Modbus TCP、OPC等多种接口和协议。对上层通信,WinCC从7.5 SP2开始支持REST Api这种Web接口方式。

图片

今天跟大家分享一下C#通过Rest Api访问WinCC。

一、组件安装

使用REST需要用到WinCC的两个数据包,在安装WinCC时选择数据包安装,勾选ConnectivityPack下的两个数据包,点击下一步。找到ConnectivityPack,将下面各个组件打勾,然后安装。

图片

安装之后,和WinCC一样需要进行单独授权,这里使用运行Sim_EKB_Install进行授权,如下图所示:

图片

最后检查服务是否开启,按win+R键,运行services.msc,启动服务。找到SIMATIC WinCC CCRestService并将其启动。如无法启动,需要先运行WinCC。

图片

二、创建项目

创建一个WinCC项目,添加一个西门子S7-1500驱动:

图片

然后在此驱动下添加4个变量:

图片

最后创建一个界面,绑定变量,运行结果如下:

图片

三、创建证书

启用REST需要证书,需要先签发一个证书。在系统搜索界面输入IIS,打开Internet Information Services (IIS)管理器,如果没有IIS,可以通过控制面板安装一下:

图片

双击服务器证书,找到创建自签名证书,创建一个证书,名称自定义即可,这个证书,后面会使用到:

图片

四、REST配置

首先打开计算机属性,找到启动,勾选 REST服务:

图片

选择REST设置,勾选 通过REST发送变量值,点击端口证书,选择我们刚刚创建的证书,后面的URL我们等下会使用到。

图片

五、REST权限

回到WinCC主界面,双击打开用户管理器。点击左上角用户管理器字样,在中间一栏最底端点击权限等级,添加一个新的权限——REST权限,这个名称可以自定义。

图片

在左侧用户管理器中右键单击Administrator-Group,添加一个新用户,我这里为admin,也可以取其他名称,然后在右侧设置一个密码,并在权限列表中勾选刚才新添加的权限。

图片

打开变量管理,在变量的右侧属性中找到读授权和写授权,将读写权限设置为刚才新建的Rest权限就可以了。

图片

以上设置完成后意味着我们的admin用户具备Rest权限,可以对相应变量进行读写操作,后面将使用该用户和密码进行数据访问。

六、API测试

接下来我们使用Apifox进行测试,我们首先进行权限设置,点击Auth,类型选择Basic Auth,UserName和Password输入我们前面设置的用户名和密码。

图片

1、单个变量读取,使用Get方法,URL格式如下:

https://{Host}:{Port}/WinCCRestService/tagManagement/Value/{VariableName}

我们读取TempOut变量,按照格式修改Url如下所示:

图片

我们可以看到,成功读取TempOut变量值为28.36946。

2、多个变量读取,使用Post方法,URL格式如下:

https://{Host}:{Port}/WinCCRestService/tagManagement/Values
在Body处以JSON格式输入要读取的变量名,格式如下:
{"variableNames" : ["Tag1", "Tag2"]}

图片

我们可以看到,成功读取TempIn和TempOut变量值。

当然,我们也可以通过REST进行变量写入和访问WinCC的归档,具体方法可以参考官方文档的说明,这里就不做过多阐述了。

七、代码实现

我们来通过C#编写代码实现,这里使用RestSharp库来实现。

1、我们先创建一个简单的窗体:

图片

2、这里编写一个读取多个变量的异步方法:

private string url = "https://DESKTOP-D1CLS40:34568/WinCCRestService/tagManagement/Values";
/// <summary>
/// 读取多个变量,返回字典
/// </summary>
/// <param name="varNames"></param>
/// <returns></returns>
private async Task<Dictionary<string, string>> ReadValueRestAsync(List<string> varNames)
{var client = new RestClient(url);client.Timeout = -1;var request = new RestRequest(Method.POST);client.Authenticator = new HttpBasicAuthenticator("admin", "123456");JObject body = new JObject();body.Add("variableNames", new JArray(varNames));request.AddParameter("application/json", body, ParameterType.RequestBody);var response = await client.ExecuteAsync(request);Dictionary<string, string> result = new Dictionary<string, string>();if (response.IsSuccessful){JArray array = JArray.Parse(response.Content);foreach (var item in array){result.Add(item["variableName"].ToString(), item["value"].ToString());}}return result;
}

    3、然后定时读取数据,更新仪表:

    private async void readTimer_Tick(object sender, EventArgs e)
    {var result = await ReadValueRestAsync(new List<string>() { "PressureIn", "PressureOut", "TempIn","TempOut" });if (result.Count > 0){this.meter_PressureIn.Value = Convert.ToDouble(result["PressureIn"]);this.meter_PressureOut.Value = Convert.ToDouble(result["PressureOut"]);this.meter_TempIn.Value = Convert.ToDouble(result["TempIn"]);this.meter_TempOut.Value = Convert.ToDouble(result["TempOut"]);}
    }

      4、运行程序,结果如下所示:

      图片

      5、可以对比WinCC画面,数据一致,即实现访问WinCC:

      图片

      http://www.lryc.cn/news/572454.html

      相关文章:

    • 图像特征检测算法ORB
    • 目标检测之YOLOV11谈谈OBB
    • 基于Uniapp+PHP的教育培训系统开发指南:网校源码实战剖析
    • 【机械视觉】Halcon—【十五、一维码(条形码)和二维码识别】
    • SpringBoot扩展——发送邮件!
    • Java求职者面试指南:Spring, Spring Boot, Spring MVC, MyBatis技术点深度解析
    • Windows 10开始菜单优化方案,如何实现Win7风格开始菜单的还原
    • 火山引擎TTS使用体验
    • 类与对象(中)(详解)
    • 多卡解决报错torch.distributed.elastic.multiprocessing.errors.ChildFailedError的问题
    • API 接口:程序世界的通用语言与交互基因
    • 【音视频】PJSIP库——示例简介、C++类说明
    • 深度学习——激活函数
    • # python正则表达式——实战学习+理论
    • 跟踪大型语言模型的思想:对语言之间共享;提前规划;cot
    • RK3588调试之旅:adbd服务配置全攻略
    • stm32之使用中断控制led灯
    • 新生活的开启:从 Trae AI 离开后的三个月
    • linux操作命令(最常用)
    • 打破物理桎梏:CAN-ETH网关如何用UDP封装重构工业网络边界
    • 大模型更重要关注工艺
    • 目标检测之YOLOV11自定义数据使用OBB训练与验证
    • Neo4j常用语法-path
    • JS红宝书笔记 8.3 继承
    • 煤矿井下Modbus转Profibus网关的传感器与PLC互联解决方案
    • 机器学习×第十二卷:回归树与剪枝策略——她剪去多余的分支,只保留想靠近你的那一层
    • 运维人员常用网站列表
    • 【unitrix】 3.2 位取反运算(not.rs)
    • 【数字人开发】Unity+百度智能云平台实现长短文本个性化语音生成功能
    • 吃透 Golang 基础:Goroutine