框架PEANUT-WF功能说明

框架PEANUT-WF功能说明(NET6.0,NET462)

1.框架说明

为智能制造软件(CS架构)提供快速开发平台;
关键字:智能制造、通讯、调度、轻量级、性能、快速开发、易于扩展;

2.开发模块描述

2.1GUI-系统管理

2.1.1系统编码
2.1.2系统集成配置
2.1.3菜单管理
2.1.4数据字典

2.2GUI-系统记录

2.2.1系统日志
2.2.2系统记录

2.3GUI-用户管理

2.3.1角色管理
2.3.2权限模板

2.4GUI-代码生成器

2.4.1多层架构
2.4.2模板管理
2.4.3设备通讯
2.4.4QT属性生成

2.5设备通讯模块(PLC相关基于HSL)

2.5.1基础通讯模块PLC厂家协议、通用协议(Modbus、OPC UA、OPC DA)、消息队列(Mqtt、RabbitMQ)CNC集成(SIEMENS、FANUC、HEIDAINHEN、GSK、等)
2.5.2通讯管理
2.5.3变量监控

2.6工具模块

2.6.1Attribute和枚举相关
2.6.2编码解码(加密)
2.6.3文件管理(.ini、.config、.xml)
2.6.4Http
2.6.5Lambda
2.6.6反射
2.6.7单例
2.6.8Redis
2.6.9EXCEl
2.7.0WinApi
2.7.1数据转换器

2.7初始化模块

2.7.1初始化接口
2.7.2IOC容器

2.8调度模块

2.8.1数据校验
2.8.2编码解码(数据类型)
2.8.3实时任务管理
2.8.4调度逻辑管理(实现复杂逻辑)
2.8.5设备分析计算
2.8.6时间计算与格式化

2.9用户控件扩展

3.0日志模块

3.0.1DB-LOG
3.0.2File-LOG
3.0.3操作记录
3.0.4异常管理

3.1ORM模块(基于SqlSugar)

3.1.1DataTable的绑定模式扩展
3.1.2SqlFunc扩展

3.2系统消息通知

3.3C1工具模块

3.3.1FlexGrid工具、表单列设置(灵活)、DataTable以及List结合Ribbon的管理
3.3.2InputPanel
3.3.3ToolTip
3.3.4TreeView
3.3.5Chart

3.功能说明

3.1加载主页介绍

在这里插入图片描述

3.2表单的“剪切板”和“字体布局”功能介绍

剪切板和字体布局介绍样式1
剪切板和字体布局介绍样式2
以上功能和样式均为框架代码生成,样式1表示数据源为DataTable,样式2为List
样式1(适用小表,优点:批量编辑、批量删除,缺点数据限值不方便)
(1)新增,从表单底部新增一个空白行,双击单元格即可编辑,此时仍然可以编辑其他行,编辑完成以后点击保存即可;
(2)编辑,选择单行或批量选择行后点击编辑,此时行号或变红色,表示当前行处于编辑状态,双击要编辑的单元格输入内容后,点击保存会统一保存;
(3)删除,批量选择后点击删除即可
(4)撤销=查询即重新加载取消现在操作
(5)复制,复制选中行所有可见的可编辑的列的信息,撤销、查询、保存会清空复制数据
(6)粘贴,将复制信息粘贴到选中的第一行(此行必须是新增或者编辑状态)

3.3系统管理
3.3.1系统编码

功能:根据定义规则自动生成编码,编码信息=头信息+中间样式+尾部样式;
1.头信息:固定内容,如订单编号为P-;
2.中间样式:暂时只提供时间格式年月日的三种格式;
3.尾部样式:暂时只提供递增模式,通过设尾位数和递增量来进行递增计算入001、002;
4.具体接口调用可以参考后面的接口定义;
例如:订单编号头内容为P-,中间样式为yyyyMMdd,尾样式为递增,尾位数为2,递增量1,起始数1,生成以后为P-2022092101;

3.3.2系统配置
3.3.2.1系统样式

系统样式提供框架样式设置,该功能可以通过工具栏快捷访问或者左侧菜单->系统管理中打开,第一次登陆,会进行如下认证,密码:8421,点击“取消下次认证”会在下次切换此页的时候自动取消认证,但是关闭后重新打开仍然需要认证,开发模式下密码自动填充。
在这里插入图片描述
(1)主界面
可拖动:表示是否可用鼠标拖动标题栏;
可调整尺寸:是否能调整软件尺寸;
WinState:软件默认启动窗体状态Max或者Normal,Normal状态下通过Size来设置自定义尺寸;
FormBorderStyle:None或Sizeable,设置Sizeable情况下,会显示Winform默认的标题栏,再设置标题栏可见为false,可以达到如下效果;
系统设置标题栏样式1
Style:C1可以很容易的动态设置各种样式,旧版本中有Light和Dark两种风格,这里只是保留,当前版本只能动态设置,考虑C1的后续更新,考虑以后完善;
(2)菜单栏
隐藏:可见;
可折叠:是否允许展开;
鼠标离开自动关闭:设置自动关闭模式通过设置延时来完成;
Width/Percent设置菜单栏宽为百分比计算或者直接设置Width属性;
(3)工具栏
可见:工具栏是否可见;
其他按钮可单独设置可见;
(4)标题栏
LogoImg默认路径为软件执行目录下\ThemeImg中,不存在的话手动创建即可;
(5)消息通知栏-底部的消息通知设置;
(6)FlexGrid样式,指的是表单的“字体和布局”部分是否显示(代码自动生成情况下);
通过以上样式设置通常使用如下界面风格:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

3.3.2.3配置预览

可以通过选择Project选择不同程序集,点击查询进行参数预览和导出;
在这里插入图片描述

3.3.2.4扩展

自动扩展TabPage为当前项目使用,通常为用户控件,后续接口中会详细说明;

3.3.3菜单管理

菜单管理用来配置左侧菜单栏结构以及加载窗体和用户控件,菜单管理功能可以通过工具栏快捷访问或者左侧菜单->系统管理打开,第一次登陆,会进行如下认证,密码:p@ssw0rd,点击“取消下次认证”会在下次切换此页的时候自动取消认证,但是关闭后重新打开仍然需要认证,开发模式下密码自动填充
在这里插入图片描述
菜单管理

3.3.3.1菜单结构配置

配置节点编号为顺序编号,父节点编号指向节点编号,会建立结构树的层级关系,根节点的父节点编号为-1,为了方便扩展,通常一个根节点/菜单的全部功能的节点编号与下一个根节点/菜单是有一定的偏差,可以通过设置“偏移”点击“编号重排”完成;
节点结构树配置

3.3.3.2菜单的生命周期配置

TabPage分为两种,一种是主页另一种就是普通可关闭页,通过TabPage的图标也可以进行区分,但是即使是可关闭的页生命周期也可以为单例,具体是由IOC容器的初始化注册来决定的,这在后续会详细说明,“生命周期”的配置暂时未使用,保留的原因是由于在历史版本中加载模式为Reflector的时候是有“全生命周期”配置的,这里用“生命周期”来兼容和替换,但是未重新实现。

3.3.3.3菜单栏加载配置

1.可见:设置仅当前菜单是否可见,优先级最高,如果取消可见那么其他用户管理菜单均不可见;
2.固定Tab:设置主页;
3.窗体类型:支持Form和UserControl,如果没有ShowDialog的需要推荐使用UserControl;
4.加载模式:Reflector(反射)和IOC方式;
5.固定Tab索引:主页索引(顺序);
6.程序集:ContainerControl(Form/UserControl)程序集;
7.资源地址:Reflector模式下为ContainerControl的类全名,ICO模式下如果可以指定名称或者默认也为ContainerControl的类全名;
8.工作站权限:指明当前配置所生效的工作站号,ALL表示所有站均支持,点击设置站号可以进行配置
菜单栏的站号配置
9.快捷键,快捷切换页或者打开,具体配置格式可以通过控制台监控(后续会详细介绍功能)按键输出来设定;
控制台监控
10.显示之前执行:具体应该叫加载到Tab之前执行,配置当前类的Public的方法名称,可返回bool类型,表示是否继续进行加载,返回false表示取消加载;
11.进程方式启动程序并附加到框架
如果是加载C#程序,优先推荐以插件形式加载到框架,其次是通过配置反射(这两种方式后续会详细介绍),如果是其他程序则没有办法通过这两种模式扩展,只能通过进程启动并获取句柄添加到框架,但是有些情况下会失败!具体看编程语言和程序结构。
(1)使用抓取句柄的软件获取程序的句柄、标题并进行配置;
(2)将程序放到当前框架的根目录下并配置完整的“加载程序名称”;
(3)设置“尺寸动态”;

3.3.3.4清理

只有在源码运行的情况下才会显示,点击后会清理框架配置的程序集以外的信息或者资源未配置的无效的节点。

3.3.4数据字典

通过设置字典名称程序集信息以及key和value完成配置;后续扩展会详细说明。
在这里插入图片描述

3.4系统记录
3.4.1系统日志(DB)

查询历史日志信息,在开发模式下提供清空所有日志功能。

3.4.2系统记录(DB)

查询历史登录退出记录信息,在开发模式下提供清空所有日志功能。

3.5用户管理
3.5.1角色管理

1.角色基本信息管理;
2.权限设置
(1)Custom自定义模式,需要在当前项目中创建模板实体,并且在权限模板中加载模板以后方可使用;
(2)菜单栏权限配置,点击切换模式;
(3)权限模式说明
目前支持三种权限模式,用户、身份、部门;
身份和部门为分组模式,同一组任意一个配置生效以后,同组人员共享,如果同组人员信息全部删除,组内权限配置也会不会被保留;
用户及权限管理

3.5.2权限模板

创建实体模板并完成IOC的注册,点击加载模板可将当前程序集定义的实体模板内容加载。
创建权限模板
权限模板的注册

 container.RegisterType<ProjectAuthorityEntity>().As<IUserAuthorityTemplate>();

(1)默认情况下框架内部的模板不会被重新加载,如果希望全部初始化那么选择“包含框架”;
(2)输入用户名可以查询当前用户的权限状态;
(3)可以通过点击“设置忽略”或“取消忽略”来确认当前数据是否会被加载;
(4)开发模式下会有“清理”功能,会删除不包含在配置程序集内的所有权限模板信息;

3.6代码生成器(此功能只有源码运行状态下才有)
3.6.1多层架构

说明:
1.ORM框架使用的是SqlSugar,具体SqlSugar相关的功能可以关注其官网,同时也进行了少量的扩展SqlSugarEx,所以此部门的代码生成器都是基于SqlSugar的,在实体生成功能部分最早也是参考SqlSugar官网的一个实体生成工具(找不到了),后续参考其功能进行重写,除了界面保留一部分功能之外,代码已经全部重新设计;
2.由于暂时项目在ORM部分在实际业务中涉及并不复杂(暂时我们把关注点放到框架的重点部分),这里并没有业务层,只保留Dal层,代码生成也没有生成抽象接口,也没有做成服务,最早也使用三层架构+抽象工厂,在之前设计的WPF版本中(如下图,由于多种原因WPF版本并没有被应用),服务是分离的,相当于是Service调用Dal,一键配置调用的是独立服务(WebApi)还是本地模式,使用前后端分离,此处要说明的是,此处能扩展的功能和方案很多,尤其是使用WebApi,新版本中的AspNetCore的可扩展性有很多,总之此处后续会扩展,并与Web结合(暂时WebApi只作为项目对外接口寄宿到WF中);
3.多层架构会生成实体->UI->DAL;
SqlSugar文档
历史WPF版本
WebApi和本地模式的配置

3.6.1.1实体生成

1.配置说明
大部分功能通过字面意思很容易理解,大概分为注释部分、类修饰部分、Sugar配置部分,大部分配置信息对应程序目录下的CodeBuild.config文件,里面有详细的说明
实体生成配置文件
如下字段进行解释说明:
设置ColumnName:表示SugarColumn中是否使用ColumnName进行字段的名称设定,通常表示属性名称和字段名称命名不一样,这里默认此项是勾选的主要原因是我们设计使用的是代码驼峰命名、数据库字段是小写+下划线,在之前的历史版本中数据库也是使用的驼峰命名,实际映射是比较方便的,尤其是在表关联的情况下,后来还是考虑小写+下划线方式更加清晰易懂,同时由于公司Java Web框架的存在,这样也全部统一;
驼峰命名:配置“设置ColumnName”一同使用自动将数据库字段进行驼峰命名;
默认配置
在这里插入图片描述

2.新建连接
新建连接
3.加载表
选择配置节点,然后点击“加载表”;
在这里插入图片描述
4.选择表,点“预览生成”;
实体预览生成
5.点击保存->下一步;
6.右键数据库配置信息/表可以进行更多的扩展操作;
更多操作

3.6.1.2UI生成

说明:UI部分根据数据源不同会有差异,数据源为DataTable的时候是没有新增/编辑窗体的,增删改查也都是直接操作当前表单,C1FlexGrid绑定的字段也是对应表单的,而数据源为List的时候C1FlexGrid字段是对应实体的,默认的情况数据源为List,由于整个框架都是基于C1ComponentOne(收费,请购买正版)的,所以代码生成器的业务都是基于C1
C1Winform官网
C1社区
UI代码生成
1.配置说明
窗体样式:由于新版C1原因此功能暂时不生效,但是保留;
编辑窗体修饰-窗体尺寸:Height=-1表示自动计算但是NET462版本中不生效,仍然需要手动调整,NET6.0版本可以;
列名:可以手动配置,但是使用Sql数据库的时候如果字段设计加上了说明,那么此处会自动读取;
是否作为查询字段:如果此字段为筛选字段的时候设置此项,同时选择“查询控件类型”;
新增/编辑字段:表示新增/编辑窗体中会自动生成该字段;
编辑必选项目:保存之前会自动判断是否为空;
2.生成
生成后保存,可以通过预料选项预料生成的文件信息;

3.6.1.3DAL生成

通常此步骤可以直接生成,在连接信息自定义配置处注意,默认是勾选“自定义”的,表示连接信息是使用框架默认的配置,这通常不用修改;
生成DAL

3.6.1.4后续扩展

1.自动添加到菜单栏;
2.添加自定义权限;

3.6.1.5模板管理

说明:
1.代码生成大部分都是基于模板的,此处也可以自行扩展和添加,操作步骤为选择左侧模板信息->选择“编辑”操作->修改模板,保存即可;
2.每个模板里面都定义了很多宏格式为 N a m e Name Name,提供使用;
模板管理

3.6.1.6ORM功能管理(未维护)

手动录入Sql常用功能,有需要可以手动录入,通常情况下参考官网即可,以后可以考虑将官网文档寄宿到框架;

3.6.2设备通讯
3.6.2.1概述

设备通讯实体生成模块,主要支持Hsl系列(常用西门子、三菱)、OPC UA、Modbus/TCPIP(主要根据项目需求情况扩展),不同的通讯需要不同的模板支持。
设备实体生成

3.6.2.2模板说明

1.通讯类型,与模板中的ProtocolType对应;
在这里插入图片描述
2.与电气接口设计原则(西门子)其他通讯类似;
在这里插入图片描述

(1)共同讨论解决问题方案;
(2)确认所需读写变量功能并由电气为主软件为辅,填写到描述列中;
(3)由电气填写地址(下位)、数据类型(下位)、读/写操作(软件读写);
(4)剩余部分全部由软件填写,根据Hsl格式填写地址(上位),数据类型(上位)System.DataType如System.Boolean ,如果是Boolean类型那么BOOL列填写bit位信息同时“地址(上位)”填写的是字节地址,当前地址与上一个地址连续的时候则“是否连续”填Yes,否则为No,如果是连续结束的情况则填写End,有时候为了通讯连续也可以中间补充预留字段或数组,也就是通讯会优先连续分段读取,所以在使用S7进行西门子系列通讯的时候,读字段最好定义连续,否则会影响性能和效率,只要涉及连续读取的协议都与此类似,例如Modubs,但是OPC UA就不用;
3.HSL配置的详细说明


电气人员添加:
描述、地址(下位)如果是Boolean类型请填写BOOL位、类型(下位)、
读/写操作、默认值、访问CPU需要的资源信息,如IP、PORT等;


变量说明:
变量名称:软件设计人员填写;


描述:软件设计人员或者电气设计人员;


地址(下位):电气设计人员根据实际设计添加;
地址(上位):软件设计人员根据电气人员提供实际地址进行格式化如下:
西门子PLC:
BOOL:DB10.DBX1.5->DB10.1(BOOL位填写1)
Byte:DB10.DBB2->DB10.2
INT:DB10.DBD4->DB10.4


数据类型(下位):由电气设计人员根据实际设计添加;
数据类型(上位):由软件设计人员填写枚举如下:
Boolean,Byte,Char,Int16,UInt16,Int32,UInt32,Single ,
Int64,UInt64,Double,String,DateTime,Unknow;


默认值:无默认情况不填


CPU类型:由软件设计人员添加枚举如下:
SieNc,Sie828D,Sie840DOld,Sie840DNew,Sie840DSl,PLC,
PC,HMI,SCM,Unknow;


变量类型:由软件设计人员添加枚举如下:
Control,Monitor,Alarm,Param,Unknow


变量所占字节数:用来强制约束当前类型所占字节个数,默认情况下
系统是通过数据类型(上位)枚举的大小/10取整来计算的例如81、82、83
都是8个字节,但是有些类型长度本身就是数组比如String其实就是Char[]
这种不定长度的类型需要强制约束长度,其他类型就不要设置此参数了;


BOOL位:软件设计人员或者电气人员针对bool变量地址添加其位索引;


读写操作:由软件设计人员添加枚举如下:
Read、Write、Read,Write;


读写权限:由软件设计人员或者电气人员添加枚举如下:
ReadOnly、WriteOnly、ReadAndWrite、Unknow,此变量暂时没有使用;


是否连续:由软件设计人员或者电气人员添加:
如果当前地址与上一个或者下一个地址连续则添加Yes连续结束用End否则No
此参数是必须一定设置正确且有需要连续读的地址最好强制约束电气来进行连续地址
设计、因为这将直接影响到实时读取的实时性;


3.6.3Q属性生成

QT属性生成

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
坚持学习WF(1):从HelloWorld开始 本文主要通过实现了一个可以接受参数的HelloWorld程序来了解WF。 坚持学习WF(2):WF创作模式和设计时工具 坚持学习WF(3):WF框架概览 2.3两篇主要全面的阐述了WF框架和Visual Studio对开发WF的一些设计时的工具。 坚持学习WF(4):活动(Activity)和依赖属性(DependencyProperty) 坚持学习WF(5):自定义活动(CustomActivity) 4.5两篇对主要对活动(Actibity)的介绍和依赖属性(DependencyObject)和DependencyProperty事件的使用。 坚持学习WF(6):开发可复用的宿主程序 主要实现两个类来对WorkflowInstance和WorkflowRuntime进行简单的封装。 坚持学习WF(7):流程控制(Flow Control) 主要说了WF中和流程相关的活动,主要包括以下这些活动:IfElseActivity,WhileActivity,ParallelActivity,ReplicatorActivity,ConditionedActivityGroup,InvokeWorkflowActivity,TerminateActivity,SuspendActivity等。 坚持学习WF(8):本地服务之调用外部方法 坚持学习WF(9):本地服务之事件处理 工作流能够使用方法和事件通过消息与宿主程序交互。 事件用于将数据发送到工作流,而工作流使用方法将数据发送到主机应用程序,8.9两篇主要说了本地服务如何调用外部方法和接收事件。 坚持学习WF(10):在工作流中使用关联 当工作流实例在本地服务接口上侦听相同事件的不同实例时,就无法确定该响应哪个事件。如何解决这个问题呢,我们就需要在工作流中使用关联。 坚持学习WF(11):工作流通信与队列 WF 提供的通信模型是构建于队列系统的基础之上,我们可以使用自定义活动来注册以接收关于队列的消息,而宿主应用程序中的服务则发送关于队列的消息。自定义活动可以使用此模型来处理外部事件,也可以传递异步活动执行的完成。这样,您的活动可以先执行到某一点,然后等待激发因素的到来以便继续执行。 坚持学习WF(12):使用EventHandlingScopeActivity活动 EventHandlingScopeActivity活动包含一个主线子活动和一组事件处理活动(EventHandlersActivity),它的主线子活动中只能包含一个子活动。它会执行其主子活动比如SequenceActivity。 同时,可能会执行每个EventDrivenActivity,也可能不执行它们,这取决于在SequenceActivity 活动执行时是否发生了它们的事件,当主线活动执行完了整个EventHandlingScopeActivity活动也就结束了。 坚持学习WF(13):WF中的持久化服务 主要介绍了如何使用WF中提供的SqlWorkflowPersistenceService来进行持久化存储。 坚持学习WF(14):自定义持久化服务 我们除了使用WF提供的SqlWorkflowPersistenceService外,还可以自定义持久化服务。因为有的时候你可能不想使用Sql Server数据库,我们就可以通过自定义持久化服务来使用其他的数据库,文件等来进行持久化存储。 坚持学习WF(15):状态机工作流 本文主要介绍WF中状态机工作流的基础知识,状态机工作流和顺序型工作流不同。顺序型工作流一般是比较固定的,可预测的,和系统交互的时候比较多。而状态机工作流一般是不可预测,和人的交互会比较多一些,一般有回退流程的时候使用状态机工作流会比较好一点,如何正确的选择顺序型工作流还是状态机工作流是十分重要的。 坚持学习WF(16):WF中的事务 在关系型数据库中支持事务已经有10几年了,事务用来解决数据的完整性、一致性等等问题。在WF中提供了TransactionScopeActivity活动用来支持事务,当该活动执行时一个System.Transactions.Transaction实例就被创建了,如果TransactionScopeActivity中的子活动有一个有异常,就会执行回滚操作。 坚持学习WF(17):WF中的补偿 事务是你在做一组更新时要不成功,要不失败,不可能只部分更新。事务最经典的使用场合就是在关系型数据库中。补偿是取消之前已经成功的操作,在我们的工作流中我们可能完成一项任务有很多活动组成,比如我们的活动都使用了TransactionScopeActivity,我们在之后发现错误了,想要取消之前成功的操作,这个和事务就没有关系了,因为事务已经成功了。这个时候我们就可以使用补偿。 坚持学习WF(18):使用IPendingWork接口 WF会定期在各个持久性点(Persistence Point)检查并将工作流实例保存到持久化存储中,这样如果工作流出现错误或是异常终止时相关的信息就会被存储,下次加载工作流实例时就会从此做为开始点。这个主要是针对工作内置的服务。工作流的外部服务使用工作批次来保留状态信息。 这些服务对其工作项进行批处理并共享与工作流的事务相同的事务。 如果工作流尚未提交事务,则服务仍可以在持久点期间对某些工作项进行批处理。WF提供 IWorkBatch 和 IPendingWork 以帮助服务和工作流实例保留状态信息。 坚持学习WF(19):工作流线程 WF中提供了很多内置的服务,其中工作流计划服务是用来管理工作流实例线程的。默认情况下WF会自动使用DefaultWorkflowSchedulerService服务,我们还可以手动去加载ManualWorkflowSchedulerService服务。本文利用MSDN中的一个例子来说明工作流中的线程以及如何使用DefaultWorkflowSchedulerService和ManualWorkflowSchedulerService服务。 坚持学习WF(20):规则引擎中的活动条件 坚持学习WF(21):规则引擎中的RuleSet 坚持学习WF(22):跟踪规则 坚持学习WF(23):以代码的方式构造和执行RuleSet WF提供了非常灵活,强大和简单易懂的规则引擎。这几篇文章介绍了WF中规则引擎的相关知识。 坚持学习WF(24):WF中的异常处理 坚持学习WF(25):取消容器(CancellationHandlerActivity) 说明了WF如果捕获和处理异常,并介绍了CancellationHandlerActivity活动的基本使用。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值