框架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表示数据源为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,可以达到如下效果;

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文档

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社区

1.配置说明
窗体样式:由于新版C1原因此功能暂时不生效,但是保留;
编辑窗体修饰-窗体尺寸:Height=-1表示自动计算但是NET462版本中不生效,仍然需要手动调整,NET6.0版本可以;
列名:可以手动配置,但是使用Sql数据库的时候如果字段设计加上了说明,那么此处会自动读取;
是否作为查询字段:如果此字段为筛选字段的时候设置此项,同时选择“查询控件类型”;
新增/编辑字段:表示新增/编辑窗体中会自动生成该字段;
编辑必选项目:保存之前会自动判断是否为空;
2.生成
生成后保存,可以通过预料选项预料生成的文件信息;

3.6.1.3DAL生成

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

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属性生成

框架PEANUT-WF功能说明相关推荐

  1. OpenCASCADE:OCCT应用框架OCAF之功能服务

    OpenCASCADE:OCCT应用框架OCAF之功能服务 功能服务 查找函数.它们的所有者和根源 存储和访问有关功能状态的信息 传播修改 功能服务 功能服务聚合了重新生成模型所需的数据.TFunct ...

  2. SSM整合框架实现发送邮件功能

    SSM整合框架实现发送邮件功能 1.导入发送邮件的依赖 <!-- 发送邮件jar包--><!--spring支持--><dependency><groupId ...

  3. mysql抢红包功能_Laravel框架实现抢红包功能示例

    本文实例讲述了Laravel框架实现抢红包功能.分享给大家供大家参考,具体如下: 首先进行登录 {{csrf_field()}} 用户名: 密 码: 在登录时,我们会进行一些相应的验证:比如用户名,手 ...

  4. 毕业设计——音乐播放系统 可以自己上传歌曲 SSM框架 MYSQL数据库 功能齐全

    音乐播放系统 可以自己上传歌曲 SSM框架 MYSQL数据库 功能齐全 可以注册账号 登录 在线上传歌曲 发表评论 在线听音乐 登录 注册 首页 播放音乐以及在线评论 个人后台页面 查看我发布的以及上 ...

  5. 基于ci框架 php商城,如何基于CodeIgniter框架实现购物车功能

    这篇文章主要介绍了基于CI(CodeIgniter)框架实现购物车功能的方法,结合实例形式分析了CodeIgniter框架购物车功能类的定义及数据库建立相关sql命令,需要的朋友可以参考下 本文实例讲 ...

  6. 什么是Web框架、web框架有什么功能?

    随着Web最新发展趋势的不断升级,Web项目开发也越来越难,而且需要花费更多的开发时间.所以,Web程序员灵活运用Web开发框架显得更为重要.下面为大家简单的介绍一下Web框架的基本内容,希望对大家有 ...

  7. tp5框架实现登录功能

    TP5框架实现登录功能 安装TP框架 使用最简单的安装方式,直接从官网下载解压,将压缩包里的文件复制到项目目录下. 管网地址:http://www.thinkphp.cn/down.html 安装完框 ...

  8. 一个javascript框架应有的功能

    一个人学许多东西,不等于他会很多东西,学了也会忘的,学了也不等于会运用,这时我们应该整一个很复杂的东西出来,那么就知道自己到底去到什么程度.基于这样的理由,我开始搞框架了,像我群里面的许多人那样,因此 ...

  9. 框架实现修改功能的原理_JAVA集合框架的特点及实现原理简介

    1.集合框架总体架构 集合大致分为Set.List.Queue.Map四种体系,其中List,Set,Queue继承自Collection接口,Map为独立接口 Set的实现类有:HashSet,Li ...

  10. Golang实践录:使用gin框架实现转发功能:上传文件并转

    近段时间需要实现一个转发 post 请求到指定后端服务的小工具,由于一直想学习 gin 框架,所以就使用这个框架进行尝试,预计会产生几篇文章.本文先研究如何在 gin 框架中实现上传和转发功能. 问题 ...

最新文章

  1. R语言ggplot2可视化:指定标题的坐标轴位置(X轴坐标和Y轴坐标),将图像的标题(title)放置在图像内部的指定位置(customize title positon in plot)
  2. android singleTop 不起作用
  3. kube-proxy源码解析
  4. 电脑卡顿不流畅是什么原因_为什么Windows/iOS操作很流畅,而Linux/Android却很卡顿呢...
  5. pycharm怎么查看代码结构,看函数定义、变量定义、类定义索引、目录?(左方structure)
  6. vs2005 vc++ 生成非托管的 不需要.net运行环境的exe程序方法
  7. Facebook隐私泄露事件继续发酵,黑客明码标价出售聊天信息
  8. java文件与bean所定义的_Spring定义bean的三种方式和自动注入
  9. Android开发笔记(八十)运行状态检查
  10. mapreduce代码示例_MapReduce算法示例
  11. JSON转EXCEL代码( java)
  12. Andriod --- JetPack :LiveData setValue 和 postValue 的区别
  13. Qualcomm MPM introduction
  14. LiveZilla 详细 配置 设置 (四) 查看成果及总结
  15. 【Android破解笔记】割绳子2内购
  16. python小游戏:教你如何称霸朋友圈
  17. dmesg 命令详解
  18. csv文件——简单读操作01
  19. Nodejs纯esm模块的迁移方法、社区冲击、评价浅论
  20. 矩阵知识:矩阵乘法、单位矩阵、数量矩阵、初等矩阵、行等价

热门文章

  1. ORA-65096: 公用用户名或角色名无效
  2. MySQL之undo log
  3. 计算机快速启动BIOS,win10:你的系统快速启动如果变慢了,通过一下方法即可解决...
  4. 2022年Android中高级面试框架
  5. 洛谷 P2031 脑力达人之分割字串
  6. 快捷方式‘Tim.lnk’指向的驱动器或网络连接不可用——笔记本突然读不到机械硬盘了
  7. flowable 候选人候选组同时使用
  8. 大连医科大学中山学院计算机工程学院,大连医科大学中山学院
  9. 分开搭建DNS和AD的方法(一)
  10. 围棋AI之路(一)理论