`
阅读更多
HugeBoss开发规范

目录

概述

项目依赖关系

开发模式

1 查询模式

2 提交模式_二次业务

3 提交模式_维护

编码细节及案例说明

1 命名问题

2 设计问题

数据库规范

Sql提交规范

版本控制规范(For 版本管理员)




概述

HugeBoss开发编码基础是Java编码规范,加上Huge自己的规范组成。

本文着重介绍的是Huge自己的开发规范。
要想清楚的了解HugeBoss的开发规范,首先要对HugeBoss项目的整体有个把握,因此我们会先介绍项目之间的依赖关系,再说一下从编码角度看到的三种比较典型的开发模式,最后是一些编码要注意的细节及案例。


项目依赖关系

!worddav2ca459935363688ec396a7044b48656f.jpg|height=309,width=553!如上图所示

UI包括所有以ui开头的项目,界面层

Model包括所有以presentationmodel开头的项目,处理界面交互逻辑

Dto包括所有以dto开头的项目,前后台交互的数据

Service包括所有以service(不带.internal)开头的项目,后台服务公布给前台调用的接口

Service.internal包括所有以service.internal开头的项目,后台服务公布的接口实现

Assembler包括所有以assembler开头的项目,组装器,负责将Domain组装成Dto或反之

Domain包括所有以domain开头的项目,领域对象

Data包括所有以data开头的项目,处理数据层的查询更新等

Dtv.service包括所有以dtv.service(不带.internal)开头的项目,第三方系统对我们的接口

Dtv.service.internal包括所有以dtv.service.internal开头的项目,第三方系统对我们的实现

Sysway包括所有以sysway开头的项目,放一些基础类和工具类,任何项目都可以依赖于他
UI,Model,Service,Dto,Sysway 发布成前台客户端程序

Service,Dto,Sysway,Service.internal,Assembler,Domain,Date,Dtv发布成后台服务程序
另外还有一些规则:

包名以"com.sysway"开头且不含有"boss"的项目,都是放与boss无关的公共的类接口。
编码时要注意

1 不要有直接或间接的循环依赖(例如ui依赖于model,model如果再依赖ui就是错误的)。

2 不要有跳过某一层建立依赖的情况(例如model依赖domain层就是错误的),因为我们的系统是分层设计的(参考《HugeBoss架构》)。


开发模式

所有的命名,统一按先动词后名词的顺序,符合自然语言逻辑。

所有的类该放到哪个包里,以Domain为参照。

1 查询模式

命名规则:

接口名称定义规则是:"I"+ Domain类名 + "Service"

接口实现类名称定义规则是:接口名去掉I

接口查询方法定义规则是:"find"+ Domain类名 + 特性标识+ "Info"

查询条件的DTO定义规则是:Domain类名 + 特性标识 + "Info"

如果查询条件特别简单如只有一个code可以不必定义DTO

查询结果的DTO定义规则是:Domain类名 + 特性标识 + "Info"

如果返回结果特别简,如只是个数字,可以不必定义DTO

其中"特性标识"是根据具体应用场景对Domain的修饰,用于说明被命名对象的含义。

Finder接口命名规则:"I"+ Domain类名 + "Finder"

Finder实现命名规则:Finder接口名去掉I

Assembler命名规则:返回的DTO类名 + "Assembler"实现Domain对DTO的转换
查询接口实现方法:

1 前置条件检查

2 调用要查询Domain对象的finder中符合条件的方法(如果没有自己加)

3 查出的Domain通过Assembler组装出需要返回的DTO或列表
举例说明:

以客户(Customer)为例子,按客户编码查询客户摘要信息

接口名定义为:ICustomerService

接口实现类名称为:CustomerService

查询条件DTO定义为:不定义DTO,直接用参数customerCode

查询结果DTO定义为:CustomerSummaryInfo

接口方法定义为:

CustomerSummaryInfo findCustomerSummaryInfo(String customerCode);

实现:

public CustomerSummaryInfo findCustomerSummaryInfo(String customerCode) {

assert customerCode != null : "传入的customerCode不能为null";

Customer customer = Customer.getCustomerFinder().findByCode(customerCode);

return CustomerSummaryInfoAssembler.create(customer);

}




2 提交模式_二次业务

命名规则:与上面相同的不再重复说明

接口查询方法定义规则是:"业务动词"[ + Domain类名]

前台提交的数据以DTO的形式传到接口参数中,特别简单的情况可以不定义DTO

Act命名规则:"业务动词"[ + Domain类名] + "Act"

Order命名规则:"业务动词"[ + Domain类名] + "Order"

二次业务的接口一般定义在ICustomerOrderServcie中

二次业务的接口参数,一定要带个CommitType类型的commitType,这个参数说明本次是预提交还是真正的提交(预提交是为验证整个提交过程用,不会真正提交到数据库)

在实现中不需要对commitType参数做出处理,因为有方面统一处理预提交/提交。
前台实现方法:

界面必须继承BaseCustomerSection,model必须继承BaseCustomerSectionModel
查询接口实现方法:

1 前置条件检查

2 组织新建Act需要的数据

3 调用Act.run()方法,下受理单。

注:一般来说二次业务接口实现无返回值,出错信息(如前置条件不符)通过抛异常或断言实现(有方面把断言转换为异常)。
举例说明:

以新客户订购为例子

前台提交的DTO为:CustomerPurchaseOrderInfo

接口定义如下:

void purchase(

CustomerPurchaseOrderInfo customerPurchaseOrderInfo,

CommitType commitType);

接口实现请参考代码。


3 提交模式_维护

命名规则:与上面相同的不再重复说明

Page命名:"Maintain"+ Domain类名 + "Page"

Section命名:"Maintain"+ Domain类名 + "Section"

Model命名:"Maintain"+ Domain类名 + "Model"

接口方法命名:"Maintain"+ Domain类名

Act命名:"Maintain"+ Domain类名 + "Act"

Assembler命名规则:Domain类名 + "Assembler"

这里的Assembler与查询功能的Assembler相反,是把DTO转换成Domain,并提供增加、更改的方法。
接口定义参数统一有三个列表:

addInfos(增加的信息)、updatedInfos(修改的信息)、deletedInfos(删除的信息)

可以根据情况增加其它参数
查询接口实现方法:

1 前置条件检查

2 组织新建Act需要的Assembler

3 调用Act.run()方法,循环三个列表,分别进行增加、修改、删除操作。

注:一般来说维护功能的接口实现也无返回值,出错信息(如前置条件不符)通过抛异常或断言实现(有方面把断言转换为异常)。
举例说明:

维护设备为例子

DTO定义为:MaintainDeviceInfo

接口名称为:maintainDevice

Act名称为:MaintainPhysicalDeviceAct

Assembler名称为:PhysicalDeviceAssembler

接口定义如下:

public void maintainDevice(List<MaintainDeviceInfo> addedDeviceInfos,

List<MaintainDeviceInfo> deletedDeviceInfos,

List<MaintainDeviceInfo> updatedDeviceInfos);

接口实现

public void maintainDevice(List<MaintainDeviceInfo> addedDeviceInfos,

List<MaintainDeviceInfo> deletedDeviceInfos,

List<MaintainDeviceInfo> updatedDeviceInfos) {

Act act = new MaintainPhysicalDeviceAct(

PhysicalDeviceAssembler.create(addedDeviceInfos),

PhysicalDeviceAssembler.create(updatedDeviceInfos),

PhysicalDeviceAssembler.create(deletedDeviceInfos)

);

act.run();

}



编码细节及案例说明

1 命名问题


所有的命名都以动词在前名词在后的形式,符合自然语言的逻辑
常量定义要大写,不同单词之间以下划线分隔




维护xxx的功能,都以"Maintain"开头。

例如:维护物理资源规格的页面

正确的命名是:MaintainPhysicalResourceSpecificationPage

错误的命名1:PhysicalResourceSpecificationPage(缺少动词)

错误的命名2:PhysicalResourceSpecificationMaintainPage(违反先动词后名词的原则)错误的命名3:ModifyPhysicalResourceSpecificationPage(修改不能够反应所有维护的意 思,维护是指新增,修改,删除的动作集合,并非仅仅把已存在的东西做更改,这是有区别的。)


ActTypeCode的取名以Act结束,不要命名为xxxPage等非Act结尾的,因为Page是实现方式,Act是与业务相关的,与实现无关。

正确的例子:

pageHash.put("MaintainSimpleTypeAct", "com.sysway.boss.ui.businessconfiguration.MaintainSimpleTypePage");//维护简单类型
错误的例子1:

pageHash.put("NewBizMonthReportPage", "com.sysway.boss.ui.syntheticalstatistics.NewBizMonthReportPage");//新宽带业务月报表

不该以"Page"结尾,应该是"Act"。
错误的例子2:

pageHash.put("PhysicalResourceStorageActIn", "com.sysway.boss.ui.resourcemanagement.physical.storage.PhysicalResourceInStoragePage");//物理资源入库

pageHash.put("PhysicalResourceStorageActOut", "com.sysway.boss.ui.resourcemanagement.physical.storage.PhysicalResourceOutStoragePage");//物理资源出库

不是以"Act"结尾。


变量名要写全称,不要缩写,为了易读。

我们的代码命名提倡完整的命名,不提倡缩写,缩写只用在两种情况,

1.该缩写已约定俗称比如:MAC、I、j、k等。

2.由于客观的限制不得不缩写:比如有长度限制的数据库字段名、表名

正确的定义:ChangeBaseProductOrderInfo changeBaseProductOrderInfo;

错误的定义1:ChangeBaseProductOrderInfo info;(引用时从名称看不出含意)

错误的定义2:ChangeBaseProductOrderInfo cbpoi;(引用时从名称看不出含意)


变更名与值,函数名与函数实现要保持一致。

错误例子1:final String IS_PRINT_BEFORE_COMMIT="isCommitBeforePrint";(名称与含义相反)

错误例子2:public List<Product> findRecurringProductByCustomerAndProductStatus(String customerCode, String... productStatuses) {

return findByCustomerAndProductStatus(customerCode, productStatuses);

}

最先是取得有周期性价格的产品,但由于某些地方的需要改为取得所有产品

改了实现后没改函数名称


不要有类似xxx2的命名(类,变更,存储过程等)。

为了程序的易读性,如果在同一作用域里有两个同类的变量,命名时考虑将这两个变量的用途和角色,加入变量名中。不要取为xxx2名称,如果一定不可避免(例如是临时方案),则一定要写明注释。

另外一种类名有XXX2的情况,这个多半是对第一个类的替换和优化,但是又不想影响原来的实现,这种允许存在,但最终要把废弃掉的那个删除,把2改成正常名称。
错误的例子1:

NoteDetailInfo.itemName2

发 票明细项NoteDetailInfo的显示各地不同导致加了多个itemName2的属性


变更字段的取名要精准

如果字段的作用是id请不要命名为code,如果字段的作用是code也不要取成id。


2 设计问题


有时类中需要增加一些静态的方法取得常用值的实例,这时要用方法,不要用静态值。

例如:Money类,外面可以通过Money.ZERO来取得Money为0的实例。

public static final Money ZERO = new Money();

public void setAmount(BigDecimal amount) {

super.setAmount(amount.setScale(DEFAULT_SCALE, RoundingMode.HALF_UP));

}

由于ZERO是静态的,Money又有setAmount()方法会改写amount的值,那么当一个变量采用Money.ZERO的方法做了初始化后,又直接通过setAmount()方法更改Money中amount的值(假设新的值是x),则所有引用ZERO的值都改为了x,这是很危险的做法。
所以在这种情况下,需要把ZERO的值改为通过方法取得一个新的实例。

public static Money getZero(){

return new Money();

}


修改了函数实现后,要遍历所有调过该方法的地方,看是否会受到影响。

错误的例子:

public List<Product> findRecurringProductByCustomerAndProductStatus(String customerCode, String... productStatuses) {

return findByCustomerAndProductStatus(customerCode, productStatuses);

}

最先是取得有周期性价格的产品,但由于某些地方的需要改为取得所有产品

是否看了原来调用该方法的所有地方是否会受到影响?


当前台需要的信息缺少时,应该先找相关人员沟通看有没可用的接口,如果没有,自己重新写一个接口取得相应的数据,不要找个复杂的接口缺只取其中很小一部分数据。

错误的例子:

List list = productSpecificationService.findAll();

// 转换成typeInfo

List<TypeInfo> typeInfoList = this.ConversionTypeInfo(list);


包之间的引用参考下图关系

参考项目依赖关系一节。
错误的例子1:

sysway.presentationmodel引用dto.product

本来是个底层的包,但这样做导致编译sysway.presentationmodel时必须要将所有dto的项目编译通过

sysway.presentationmodel,应该是放与boss无关的类。而dto.product与boss是相关的。


遇到不明白的问题,要先找相关人员或组长进行沟通,了解现有的实现方案,再做决策

是否原来就有现成可用的东西?是否需要小范围的重构?是否需要大面积的重构?
错误的例子1:

ProductOfferingPriceInfo里增加SmartCardCode

SmartCardCode与产品价格信息没关系,是否考虑应该换个方式实现?
错误的例子2:

NoteDetailInfo.itemName2

发 票明细项NoteDetailInfo的显示各地不同导致加了多个itemName2的属性

命名上也看不出来区别,构造函数也没有

一定要加成xxx2吗,发 票的需求越来越杂,原来的结构已很难支持当前的变化,是否应该考虑重构?
错误的例子3:

已经存在的工具方法,在Model又写一遍私有的

private static final SimpleDateFormat format = new SimpleDateFormat("yyyy-mm-dd");

private String format(Calendar date) {

return format.format(date.getTime());

}

实际上DateHelper.toDateString(...)就可以实现


已经没使用的了代码,直接删除掉,不要只注释掉,没人使用,未来也不会有人使用的方法函数也应该删除掉。因为我们有版本控制,需要时可以找到。




所有关于Code的定义,统一通过新建立一个以大写I开头的接口,放在与业务相关的service项目中,包与Domain所在包的位置保持一致。




接口应该与业务相关,放到与当前业务相关的包及接口类中。

错误的例子:

查物理资源信息的放到CommonService中

ICommonService.findPhysicalResources()

应该放到IPhysicalResourceService 中



数据库规范

1 建表时要考虑未来的数据量和性能问题,例如:是否需要建立索引?

2 建表或增加字段时的字段类型不要随便写,请参考自动生成的建表sql中相应的类型。

自动生成sql的脚本是:ant generate-schema-script;

注意:需要ant default;执行完成后才可以执行成功。



Sql提交规范

基本规则:

文件类别有两种,sql,prc

prc文件: 代码块,有begin...end的那种,一个代码块要以~作为结束标识符.

如a.prc文件的内容

Begin

....

End~

Sql文件: 非代码块内容,以;结束。

如 b.sql内容

Insert into ..... ;

Update .....;

Call addmenu....;

注意:每一个完整的sql语句,比如一个存储过程,单个insert语句最后要加一个回车.

文件命名格式.

两位数字[~[两位数字]].prc/sql,前面的数字代表了sql文件执行顺序。

如01.XXX.sql

11.XXX.sql

01~01.XXX.sql

注意 . 号前只能两位数字,不能超过3位.文件命名最好是xx.内容概要[jira号].sql/prc
注意事项:

1有关sql校验的问题,要注意用sql.check工具校验过再提交。

2不同内容的sql不要用同样的文件名。如果是对上一个sql的升级,第2个sql文件名要注明详细点。

例如一个不好的例子:

20090115提交的一个01.proc_staJobs.pdc

和20090316也提交了 01.proc_staJobs.pdc

两个sql内容不一样,在出升级sql时会过滤掉重名的文件。

3.开发只能在全局的s00_current和项目.current下提交或修改当前的sql,已经在history里的sql表明已经

在现场执行过或已经升级到基础库了,修改的话会给其他项目造成影响或造成已执行过该sql的项目的sql版本不一致问题。

4.改变表结构的sql应该放到s00_current下面,修复数据的sql放相应所属项目的current下面,如果需要设置默认值,需要考虑s00_current中的设置不能影响其它项目的执行。
分享到:
评论

相关推荐

    htmlagilitypack.1.11.62.zip

    htmlagilitypack.1.11.62

    第14届蓝桥杯嵌入式省赛题大题代码+自做未评测

    蓝桥杯第14届蓝桥杯嵌入式省赛题大题代码+自做未评测应该会有点错误的

    C# WPF智慧工厂数据平台开发:从MVVM架构到工业组件应用

    内容概要:本文详细介绍了基于C#和WPF构建智慧工厂数据平台的方法和技术要点。首先阐述了WPF的核心设计理念MVVM模式,展示了如何将界面逻辑与业务逻辑分离,使代码更加清晰易维护。接着讨论了工厂看板的数据可视化,包括使用LiveCharts库创建各类统计图表。随后讲解了页面布局技巧,如利用Grid、DockPanel等进行模块化设计。此外,探讨了通过动画效果提升用户体验的具体方法,以及工业组件的专业化设计,如模拟工业设备按钮和指示灯。文中还涉及MES开发中的数据采集与处理,介绍如何通过PLC Communications Toolkit实现与PLC的通信。最后讲述了数据库集成的相关内容,包括使用Entity Framework进行数据操作。 适合人群:对C#和WPF有一定了解并希望深入学习智慧工厂数据平台开发的技术人员。 使用场景及目标:适用于正在参与或计划开展智慧工厂项目的开发者,旨在帮助他们掌握从架构搭建到具体功能实现的全过程,提高开发效率和产品质量。 其他说明:文章不仅提供了理论指导,还附带了大量的实际代码示例,便于读者理解和实践。同时强调了工业应用场景下的特殊需求,如稳定性、实时性和实用性。

    小兔AI创作助手-批量海报制作

    小兔AI创作助手-批量海报制作

    3dmax插件030-材质通道.ms

    3dmax插件

    基于Simulink的锂电池充放电双闭环控制系统仿真与优化

    内容概要:本文详细介绍了使用Simulink进行锂电池充放电控制仿真的全过程。主要内容涵盖充电和放电两种模式下的双闭环控制策略,包括电压和电流环的设计、参数整定以及模式切换逻辑。文中特别强调了电流环和电压环之间的协调配合,提供了具体的PI控制器参数设置方法,并讨论了常见的仿真问题及其解决方案。此外,还涉及了电池等效电路建模、模式切换时的状态机设计、以及一些实用的调试技巧。 适合人群:从事电力电子、嵌入式系统开发的技术人员,尤其是对锂电池管理系统的开发者。 使用场景及目标:适用于希望深入了解锂电池充放电控制机制的研究人员和技术人员。主要目标是掌握双闭环控制系统的原理和实现方法,提高仿真效率并优化系统性能。 其他说明:文中提供的参数和方法均经过实际测试验证,能够帮助读者更快地搭建和调试类似的控制系统。同时,文中还提到了一些常见错误和注意事项,有助于避免初学者走弯路。

    基于MATLAB和混合整数规划的微电网储能电池容量优化及经济效益分析

    内容概要:本文详细介绍了利用MATLAB和混合整数规划(MIP)进行微电网储能电池容量规划的方法。首先,通过构建全寿命成本模型,将投资成本、运维成本以及电网交互成本纳入目标函数。其次,在约束条件设计中,采用二元变量确保电池充放电互斥,并引入BigM技巧提高求解效率。此外,针对电网交互成本,采用分时电价策略,分别设置购电和售电变量。文中还探讨了负荷跟踪约束、求解器参数调优、结果可视化等方面的内容,并展示了如何通过引入电池退化成本动态计算、电网交互爬坡率约束和光伏预测误差补偿机制来提升模型性能。最终,通过对实际案例的测试,证明该方法能够显著降低成本并延长电池寿命。 适合人群:从事微电网研究、储能系统设计及相关领域的科研人员和技术开发者。 使用场景及目标:适用于需要精确规划储能电池容量并优化经济效益的实际工程项目。主要目标是在满足负荷需求的前提下,通过合理的调度策略,最大化储能系统的经济性和使用寿命。 其他说明:文中提供了详细的MATLAB代码示例,涵盖从数据预处理到结果可视化的完整流程。特别强调了在处理非凸问题时的手动分段线性化处理方法,以及通过引入随机因子增强模型鲁棒性的做法。

    基于EKF与里程计的机器人定位MATLAB实现:误差分析与验证

    内容概要:本文详细介绍了基于扩展卡尔曼滤波(EKF)和里程计模型的机器人定位算法,并通过MATLAB程序进行了实现和验证。首先解释了两种模型的基本原理,然后展示了具体的MATLAB代码实现,包括状态预测、观测更新以及误差计算。实验结果显示,EKF通过融合多种传感器数据,能够有效抑制误差累积,显著提高定位精度,而单纯依靠里程计会导致较大误差。文章还讨论了不同应用场景下的选择建议,并提出了未来可能的研究方向。 适合人群:从事机器人技术研究的专业人士、自动化专业学生、对机器人定位感兴趣的开发者。 使用场景及目标:适用于需要精确机器人定位的应用场景,如自主导航、服务机器人等。主要目标是帮助读者理解EKF和里程计的工作机制及其优劣,掌握MATLAB实现技巧,以便应用于实际项目中。 其他说明:文中提供了完整的MATLAB代码示例,便于读者动手实践。同时强调了EKF在处理非线性运动模型方面的优势,以及其在多传感器数据融合中的重要作用。

    三相感应电机SPWM驱动的储纬器控制系统设计与实现

    内容概要:本文详细介绍了基于N76E885主控芯片的储纬器驱动器设计方案,主要涵盖三相感应电机的SPWM驱动技术及其正反转、加减速和刹车控制的具体实现方法。首先解释了三相感应电机的工作原理,然后深入探讨了SPWM驱动技术,包括定时器配置、中断服务程序的设计以及正弦波表的应用。接着,文章详细描述了正反转控制的实现方式,即通过改变三相电源的相序来实现电机的方向切换。对于加减速控制,则通过调整PWM的占空比来实现平稳的加速和减速效果。刹车控制方面,通过硬件和软件双重措施确保电机能够迅速停止。此外,文中还提供了详细的原理图、PCB设计和源程序,帮助读者更好地理解和实现这一方案。 适合人群:具有一定嵌入式系统开发经验的工程师和技术爱好者。 使用场景及目标:适用于需要精确控制三相感应电机的应用场合,如纺织机械、自动化设备等。目标是通过本方案掌握三相感应电机的SPWM驱动技术,实现高效稳定的电机控制。 其他说明:文章不仅提供了理论讲解,还有具体的代码实现和硬件设计指导,有助于读者全面理解并应用于实际项目中。

    C#高并发高性能TCP/UDP Socket实现:物联网与游戏服务器的最佳实践

    内容概要:本文详细介绍了使用C#实现高并发高性能的TCP和UDP Socket的技术方案,特别针对大规模物联网项目、制造执行系统(MES)以及游戏服务器的应用场景。文中展示了多个关键技术点,包括内存池管理、异步IO处理、流控制、UDP乱序包处理、客户端重连策略、批处理模式等。通过具体代码示例解释了如何利用MemoryPool、BufferBlock、TokenBucket、SemaphoreSlim等工具来优化性能并确保系统的稳定性。此外,还讨论了诸如指数退避重连、消息分片、SIO_UDP_CONNRESET处理等实战技巧。 适合人群:对网络编程有一定基础,尤其是从事物联网、MES系统或游戏开发的中级及以上水平的研发人员。 使用场景及目标:①构建能够承受大量并发连接的TCP/UDP服务器;②提高数据传输效率,降低延迟;③增强系统的容错能力和鲁棒性;④掌握处理高并发场景下的常见问题及其解决方案。 其他说明:本文不仅提供了理论指导,还给出了具体的代码实现,帮助读者更好地理解和应用相关技术。对于希望深入了解C#在网络编程领域的高级特性的开发者来说,是一份非常有价值的参考资料。

    MATLAB源程序代码合集.zip

    【MATLAB源程序代码合集】: 基于仿射变换的数字图象置乱技术 MATLAB源程序代码.rar 拉格朗日插值 MATLAB源程序代码.rar 蒙特卡洛法求椭圆面积的 MATLAB源程序代码.rar 牛顿(Newton)插值MATLAB源程序代码.rar 杨氏双孔干涉实验的计算机模拟源程序代码.rar MATLAB DCT水印源程序代码.ra 图形界面实现动态画图曲线的源程序代码.rar MATLAB符号计算实例 函数的最值点渐近线拐点 源程序.rar 光通过三棱镜色散动画。rar 绘制维维安尼(Viviani)曲线源代码程序。ra MATLAB绘制分子结构 源程序代码.rar 霍夫曼编码译码gui界面设计源程序代码.rar MATLAB计算粒子速度分布 源程序代码.ra 建模人口增长模型源程序代码.rar MATLAB拟合求解圆心和半径 源程序代码.rar MATLAB牛顿法求解非线性方程组 源程序代码.rar 求解非线性方程组源程序代码.rar MATLAB求解非线性最小二乘法拟合问题 源程序代码.rar 求解混沌系统微分方程组。rar MATLAB求解矩阵的特征值 源程序代码.ral 求解偏微分方程(扩散方程)有限差分法源程序代码.rar MATLAB求解无穷区间定积分问题 源程序代码.rar MATLAB 三次样条插值法 求信号的包络线 源代码.ra MATLAB设计的简单滤波器程序源代码.rar 生成gif图片程序源代码.rar MATLAB实现不同插值方法的gui界面设计源程序代码.rar MATLAB实现单摆在外力矩作用下的动画 源程序代码.ra MATLAB实现股票价格预测 源程序代码.rar .......

    基于国产MCU的全开源无感FOC风机控制代码解析及其应用

    内容概要:本文详细介绍了基于国产MCU芯片的全开源无感FOC(磁场定向控制)风机控制代码。主要内容涵盖龙博格电机观测器用于角度估算、SVPWM(空间矢量脉宽调制)技术的应用、顺逆风启动及调制方式的选择。此外,文中还探讨了代码的优势,如国产芯片的通用性和全开源易移植的特点。具体实现方面,展示了多个关键函数的代码片段,如角度估算、SVPWM波形生成、顺逆风启动检测等,并讨论了移植到不同国产MCU平台时需要注意的问题。同时,文章强调了工程细节,如PCB布局、MOS驱动电路的设计等。 适合人群:对风机控制技术感兴趣的工程师和技术爱好者,尤其是那些希望深入了解国产MCU在风机控制中应用的人士。 使用场景及目标:①研究和开发基于国产MCU的风机控制系统;②优化现有风机控制系统的性能,特别是在启动策略、调制方式和保护机制等方面;③学习和掌握FOC控制技术和SVPWM调制的具体实现。 其他说明:本文不仅提供了理论和技术背景,还附带了具体的代码实现和工程细节,有助于读者更好地理解和应用于实际项目中。

    VS2010旗舰版的VB.NET版本任意进制互相转换程序源代码QZQ.zip

    VS2010旗舰版的VB.NET版本任意进制互相转换程序源代码QZQ

    基于遗传算法的MATLAB实现热电联产选址定容及热电网、电网潮流计算

    内容概要:本文介绍了利用遗传算法在MATLAB中实现热电联产(CCHP)系统的选址和容量规划的方法。热电联产项目涉及多个复杂因素,如燃料成本、运营成本、环境影响及电网和热网的承载能力。传统的选址定容方法难以全面考虑这些因素,而遗传算法因其全局优化能力和适应性强的特点,成为解决此类问题的有效手段。文中详细阐述了遗传算法的基本原理、程序结构与功能,包括参数设置、适应度函数设计、染色体编码与解码、遗传操作等,并提供了具体的MATLAB代码实现。此外,还讨论了适应度函数中对建设成本、热网和电网潮流计算的处理,以及交叉算子的自适应调整策略。最终,通过实际案例验证了该方法的有效性,相比传统方法,能够显著降低初期投入并优化资源配置。 适合人群:从事热电联产系统研究、设计和优化的专业人士,以及对遗传算法及其应用感兴趣的科研人员和技术开发者。 使用场景及目标:适用于需要进行热电联产项目选址和容量规划的实际工程场景,旨在寻找最优解决方案,降低成本,提高系统效率。同时,也为相关领域的研究人员提供了一种有效的优化方法。 其他说明:文中提供的MATLAB代码可以直接用于类似项目的仿真和优化,但需要注意根据实际情况调整参数和适应度函数。此外,文中提到的一些特殊处理方法,如自适应交叉算子和粒子群优化辅助搜索,有助于提高算法性能和收敛速度。

    单片机学习记录09 - 结合工作实现flash数据的读写(持续更新中)

    单片机学习记录09 - 结合工作实现flash数据的读写(持续更新中)

    C++实现BP与CNN神经网络算法:不依赖外部库的手写代码解析

    内容概要:本文详细介绍了使用C++从零开始实现BP(反向传播)和CNN(卷积神经网络)两种神经网络算法的方法。首先解释了BP神经网络的工作原理,包括神经元类和层的定义,以及前向传播和反向传播的具体实现。接着探讨了CNN神经网络的设计,特别是卷积层、池化层的实现及其在图像处理中的优势。文中展示了大量代码片段,帮助读者理解每个算法内部的操作流程。最后,通过手写数字识别任务验证了这两种网络的有效性,BP网络达到了91.6%的准确率,而CNN则达到了96.4%。 适合人群:对深度学习感兴趣的开发者,尤其是希望深入了解神经网络底层机制并有一定C++编程基础的学习者。 使用场景及目标:适用于想要掌握神经网络核心概念和技术细节的人群。通过阅读本文,可以学习到如何不依赖外部库实现神经网络,理解BP和CNN的工作原理,以及如何优化模型性能。 其他说明:尽管该实现不如现有深度学习框架高效,但对于理解神经网络的内部运作非常有价值。文中提供的代码和注释有助于读者逐步构建自己的神经网络模型。

    3dmax插件A自动道路.ms

    3dmax插件

    3dmax插件018-整理场景

    3dmax插件018-整理场景

    西门子PLC S7-1200/1500与优傲UR机器人Profinet通讯配置及应用实例

    内容概要:本文详细介绍了西门子PLC(S7-1200/1500)与优傲UR机器人通过Profinet通讯的实际应用案例。主要内容涵盖前期准备工作如获取并安装GSD配置文件,硬件配置包括PLC和UR机器人的网络参数设置,以及博图PLC程序的具体配置方法。文中提供了具体的代码示例,解释了变量定义和主程序逻辑,强调了配置过程中需要注意的关键细节,如设备名称的一致性和IO映射的设计。此外,还分享了一些实用的经验和技巧,例如解决常见的配置问题和优化通讯性能的方法。 适合人群:从事工业自动化领域的工程师和技术人员,特别是那些负责PLC与机器人集成项目的人员。 使用场景及目标:适用于需要将西门子PLC与优傲UR机器人进行Profinet通讯配置的工业自动化项目。主要目标是提高生产效率,确保二者之间的高效协作,减少配置过程中可能出现的问题。 其他说明:文中提到的所有配置和代码均基于博图(TIA Portal)v15及以上版本,同时提供了多个实用建议,如使用工业级网线、调整Profinet更新时间和正确设置设备名称等,以确保通讯稳定可靠。

    IEC 60068-2-27-2008

    IEC 60068-2-27-2008

Global site tag (gtag.js) - Google Analytics