WinCC控件开发入门
一般来说,WinCC(经典WinCC和TIA WinCC Prof.,不含Unified)支持三种控件开发方法,分别是WinCC自身内置的面板技术,ActiveX技术和.Net技术。这三种技术各有优缺点,我们以一张表来汇总下。
图1 各控件开发技术比较
ActiveX技术因为比较老旧,目前已经很少有人用了。WinCC自带的面板技术虽然也算不错,但是对于功能要求较丰富的场合还是难以满足,因此本文将简单介绍基于.Net平台来开发WinCC控件的入门知识。
本篇文章需要一定的C#开发基础,如果您对基于.Net平台开发控件有兴趣,可以参考我们的C#教程。
在本篇文章中,我们需要开发一个三色灯控件,它会自动根据属性值切换显示。本控件比较简单,用WinCC自带的面板技术也可以实现,我们用它作为例子是为了方便大家入门。
为了简化开发,三色灯的样式我们这里为了方便采用了贴图的形式,当然也可以使用GDI+绘制,绘制的效果会更好一点,但是代码工作量比较大。我们准备的图片是这样的。
图2 素材准备
左边灰色图形是底图,用于表示灯未被点亮的状态,右边表示三种颜色的灯。
打开Visual Studio,项目类型选择为“Windows窗体控件库(.Net Framework)”。
图3 创建项目
然后输入项目名称及选择目标框架版本。
图4 项目配置
框架版本不宜过高,建议4.5就可以了。然后点击按钮“创建”。
图5 控件窗体
首先拖一个TableLayoutPanel到控件窗体上,设置其属性“Dock”为Fill,并调整好行比例。
图6 控件布局
点击控件TableLayoutPanel右上角黑色三角形按钮设置行高。
图7 配置TableLayoutPanel
使用控件TableLayoutPanel进行布局的好处是我们在使用中调整控件的大小时不会影响三个灯的大小比例。然后再为控件TableLayoutPanel的每一行添加一个PictureBox控件,设置其图片为灰色底图。
图8 添加底图
设计好控件界面后我们添加一个名为”SetStatus”的自定义方法,用于根据属性值动态切换三色灯,代码如下。
图9 状态切换
然后我们再为控件添加一个自定义属性,用于接受外部变量值。当新值进入时调用方法“SetStatus”来更新三色灯。
图10 自定义属性
到这里控件基本上是完成了。大家可以自行进行测试,这里就不再赘述了
打开WINCC画面,从右边工具箱中拖一个.NET控件到画面上。
图11 插入控件
点击按钮“浏览”,定位到控件所在文件夹。
图12 查找控件
选中控件,点击按钮“打开”。
图13 选择控件
拖到画面上是这样的。
图14 WINCC窗体上的控件
然后为属性“Status”绑定变量。
图15 绑定变量
激活wincc,当我们改变变量值时就会看到三色灯颜色随之进行切换。
视频加载中…
Nacos注册中心最全详解(图文全面总结)
Nacos注册中心是微服务的核心组件,也是大厂经常考察的内容,下面我就重点来详解Nacos注册中心@mikechen
本篇已收于mikechen原创超30万字《阿里架构师进阶专题合集》里面。
微服务注册中心,是用于管理和、协调微服务架构中各个服务的组件。
比如:大家熟知的Eureka、Nacos…这些都是平常开发,经常使用到的注册中心。
Nacos 既可以作为服务注册中心,也可以作为配置中心,接下来我们详细解析 Nacos 注册中心功能原理@mikechen
微服务,注册中心原理,主要会涉及到:服务注册、服务发现…等机制。
整体流程,如下图所示:
Nacos 的注册中心功能,依赖于以下3大关键组件:
1.Nacos Server
提供服务注册和发现的核心组件,负责管理服务实例、健康检查和服务列表的维护。
2.Nacos Client
服务提供者和消费者通过 Nacos Client 与 Nacos Server 进行通信,完成服务注册、发现以及心跳续约等功能。
3.Naming 模块
Nacos 的服务注册与发现模块。Nacos 将每个服务视为一个命名实体,客户端可以通过服务名动态发现可用的实例。
整体工作流程,如下:
首先,是服务注册。
服务启动时,将其地址、和相关元数据,注册到注册中心。
比如:
- 服务名称(Service Name):服务的逻辑名称,用于区分不同的服务实例;
- 实例 ID(Instance ID):服务实例的唯一标识符,通常由服务名称、和实例的 IP、端口…等信息生成;
- IP 地址(IP Address):服务实例所在机器的 IP 地址;
- 端口(Port):服务运行的端口号,用于其他服务进行访问,比如:8020、8021…等等;
- 健康检查 URL(Health Check URL):注册中心使用该 URL 定期检查服务实例是否健康;
- 元数据(Metadata):额外的服务信息,可能包括服务版本、所在区域(Zone/Region)、负载情况…等。
示例,如下:
注册中心,会维护一张服务注册表,记录所有可用的服务实例,而且,当新的实例上线或离线时,注册表会更新。
其次是,服务发现
服务发现,指的是:服务消费者(Service Consumer)在需要调用其他服务时,向注册中心发送请求,询问某个服务的可用实例信息。
这里我以Nacos为例,比如:消费者请求某个服务时,Nacos返回可用的服务实例列表。
然后,消费者根据负载均衡算法,选择一个服务实例。
常见的负载均衡算法,有包含:轮询、随机、最少连接………等等。
如果 service-*** 有多个实例运行(例如:端口为 8081 、和 8082 的两个实例)。
Nacos 会自动处理服务实例的负载均衡,@LoadBalanced 注解会确保调用时自动选择一个可用的服务实例。
如下所示:
再次,就是健康检查
比如:注册中心监控服务的状态,如果某个服务实例不可用,会从注册表中移除。
注册中心,会定期检查已注册服务的健康状态,比如:主动探测(主动发起 HTTP 请求、或 TCP 连接)和被动探测(服务实例的心跳检测…等等)。
如果某个服务实例未能通过健康检查,注册中心会将其标记为不可用,并从注册表中移除该实例,防止客户端调用不可用的服务。
比如:Nacos 定期通过心跳检测服务实例的健康状况,如果某个实例失效,Nacos 会自动将其从可用实例列表中移除。
本篇已收于mikechen原创超30万字《阿里架构师进阶专题合集》里面。
04、组件注册-@Import-使用
在Spring框架中,有几种主要的方式来向Spring IoC容器注册bean:
- 使用包扫描+注解(@ComponentScan 和 @Component):Spring会扫描指定的包及其子包,对于带有@Component、@Service、@Repository或@Controller等注解的类,Spring会自动注册它们的bean实例。
- 使用@Bean注解:这是在配置类中注册bean的一种方式。这对于第三方库的类非常有用,因为我们不能在这些类上添加@Component注解。通过在配置类中定义一个返回对象的方法,并使用@Bean注解,我们可以将这个方法的返回对象注册到Spring IoC容器中。
- 使用@Import注解:可以快速将一个或多个组件类导入到Spring容器中。使用@Import有三种方式:
- 直接导入组件类
- 使用ImportSelector接口
- 使用ImportBeanDefinitionRegistrar接口
以下是一个直接导入组件类的示例:
这里,OrderService类被导入到Spring容器中,即使OrderService类上没有@Component注解。注入的bean的名称默认是类的全限定名。
如果你实现了ImportSelector接口,那么Spring将会在解析@Import注解时调用你实plement的selectImports方法。此方法返回一个包含类全名的数组,Spring会将这些类作为bean注入到容器中。
以下是一个ImportSelector示例:
在此示例中,只有指定在selectImports方法返回的数组中的类(UserService和PersonService)被注入到Spring容器中,而实现ImportSelector的OrderService类并没有被注入。
还可以通过实现ImportBeanDefinitionRegistrar接口来手动注册bean。需要重写registerBeanDefinitions方法,然后在其中自定义bean的注册过程。
以下是一个ImportBeanDefinitionRegistrar示例:
在这个例子中,UserService类被注册为了一个bean,而实现了ImportBeanDefinitionRegistrar接口的AService类并没有被注入。
然后是DeferredImportSelector,这是ImportSelector的子接口,这个接口的实现类的处理会被推迟到所有的@Configuration类都被处理完之后。比如说,想等待所有的配置都加载完成后,基于某些条件动态地注册一些bean,这时候就可以使用DeferredImportSelector。一个典型的例子就是Spring Boot的自动配置(auto-configuration)。
本文作者及来源:Renderbus瑞云渲染农场https://www.renderbus.com
文章为作者独立观点不代本网立场,未经允许不得转载。