基于C++的自动绘图技术在风机塔架设计中的应用
2020-11-09陈茁
陈茁
摘 要:风力发电机(以下简称风机)作为风电能源转换的主要设备已在全球范围广泛应用。塔架作为风机支撑系统在整个设计中占据举足轻重的地位。在实际设计中由于定制化策略的推行,塔架设计任务往往十分繁重。考虑到塔架结构统一的特点,设计趋向标准化,理论上可以使用编程,控制绘图软件完成参数化绘图以节省人力和时间。本文即设想选用一种编程语言设计一种应用程序实现上述功能。
关键词:塔架;C++/CLR;自动绘图;AutoCAD
1 绪论
风力发电机塔架设计有模式可循,这对使用程序控制绘图软件自动绘图提供了可行性。本文希望通过甄选出合适的编程语言,编制应用程序控制AutoCAD使其自动绘制图纸,并希望通过输入参数的方式让程序实现绘制不同类型不同尺寸塔架的功能。
2 塔架设计
现存风机塔架结构多种多样,除了圆锥形分节钢筒式塔架之外,桁架式和混合式塔架结构也因其在价格和易于建造等方面的优势在慢慢兴起,但从实际建造情况看来,圆锥形分节钢筒式塔架依然是主流。
在风力发电机中,塔架结构主要包括筒壁、连接法兰、平台和内附件以及一些基础部件。绘图需要获取的绘图数据就包括上述组件的各项定形定位尺寸。
塔架虽说结构简单,但在行业定制化政策推行的背景下,一个风电项目往往会出现两个及以上机型,在海上项目上甚至会出现更多机型的情况,每种机型包含数百张图纸,这也是编写该自动绘图程序的意义所在。
3 C++/CLR
3.1 语言选择
如今编程语言众多,有以学习成本低,跨平台使用便利等优点迅速崛起的Python,也有功能强大简单易用的Java。本程序由于会出现大量的跨程序调用,而选用了在处理速度上有优势的C++。同时,C++开发的程序通用性强,对后期普及和修改也十分友好。
3.2 C++/CLR优点
C++/CLR的基础是C++,在讨论C++/CLR之前,我们需要了解CLI(Common Language Infrastructure,通用语言框架),该框架提供了一套可执行代码和它所运行需要的虚拟执行环境的规范。更通俗的说,它是一个虚拟平台,是操作系统和应用程序间的一层抽象联系。本文研究的目的在于用微软的.NET框架设计一个可执行程序窗体,以此来收集数据并控制绘图软件绘图,而作为微软的.NET基础的CLR(Common Language Runtime,实时通用语言)就是CLI的一个实例。C++/CLI支持对本地ISOC++编程和.NET托管编程的无缝集成,这不仅是一种机械的相加,而是能够像.NET调用Windows API一样通过P/Invoke来实现函数互调,而且可以实现类型class级和ISOC++和.NET类库的相互使用,更重要的是它能够实现类型的混合。
4 自动绘图
4.1 技术基础
本文所探究的自动绘图技术是针对AutoCAD绘图软件的,本质上是一种参数指令化的编程绘图过程,这很容易让人联想到AutoLISP。AutoLISP提供了操控AutoCAD绘图的各种基础命令,但是其代码繁杂且可读性差。对于风力发电机塔架这种图纸众多的大型项目而言代码必定冗长,后期的更改难度也大。另外,这种方式编制的程序对于外部文件的支持性较差,风机塔架有众多数据,若手动输入数据则会耗费大量时间,这与省时省力的初衷背离。
虽然AutoLISP用在像风力发电机这样图纸众多的大型项目上有些吃力,但AutoLISP中的命令和AutoCAD的API却给我们提供了无限可能。
4.2 技术实现
4.2.1 控制
上文提到,很多应用软件都留有API(Application Programming Interface,应用程序接口),这些接口为程序之间互联和二次开发以提供了渠道,机械制造设计常用的绘图软件AutoCAD当然也包括在内。编程前从CAD的安装位置找到对应版本的API并添加到主程序中即可让程序拥有沟通CAD的能力。
打通程序之间的壁垒后,就可以进行绘制命令的编写了。AutoLISP中的命令在《AutoCAD VBA开发人员手册》中都有相应介绍,例如使用AutoLISP在CAD画直线,虽然只需要定义起点终点两个参数,但是代码定义繁杂易读性不高,同时代码的移植性不好,很难脱离CAD环境运行,此时C++改写的优势就凸显出来了。改写的指导书就是《AutoCAD VBA开发人员手册》,将AutoLISP命令用C++的语法改写,就可以借C++的快捷便利和优良的移植性弥补AutoCAD VBA编程的缺点。
4.2.2 数据
上文2.1塔架设计内容所述的塔架各部分组件的定形定位尺寸就是本程序的数据输入。这部分数据可从载荷强度计算单位获得。考虑到参数众多,可利用表格处理工具将参数整理分类,将筒壁、法兰、平台、基础和参数化的配置选项分列不同表单,并保存输出一个表格文档,绘制时只需通过更改表格对应部分数据即可。
4.3.3 绘图
编程和手工绘图在原理上是相同的,都是将基本图元进行排列组合成完整的图纸。不同的是手工绘图通过点选或者输入命令一个个图元添加,大型重复度较高的项目图纸对于手工绘图来说费时费力且易出错;编程绘图过程则是通过程序调用命令进行图元添加。程序编制好后正确性有保障且速度快。
绘图代码的编写最重要的就是确定好几何关系,根据数据表中的信息和图元相互关系拆解图纸,并通过解析法转换成代码;其次需要控制好图层,编程按图层顺序绘制,在对应的图层添加内容,可在一定程度上避免繪制混乱。
块调用是一个很好用的命令。通过创建块我们可以将图纸中参数固定的复杂线图形事先画好,并单独保存在统一的块库文件夹,使用时只需通过代码调用即可。代码中还可以设置块的方向、大小和比例,可大大节省分别编写的工作量,同时节省运算消耗。需要注意的是绘制块时应留心线型和比例,否则会出现视觉不匹配。
自动绘图进行中切忌操作CAD软件,软件内部通过指令代码来工作,简单的鼠标点击也会将点击的指令代码插入到预设的指令流,这样会造成指令对错位报错。若需要在绘图过程操作电脑上的其他软件,可将CAD后台运行即可。
4.3 软件封装
经过上述步骤,自动绘图软件的功能已完成,接下来只需将程序制作成安装包。若条件允许,可将安装包制作成自动更新版本,后期将更新包放在公共服务器上,安装过该软件的电脑在连接服务器局域网的情况下打开自动绘图程序即可自动检测更新。
5 小结
计算机对于现代工业的颠覆显而易见,在信息革命和工业4.0浪潮下,传统工业模式正在发生着天翻地覆的变化。绘图作为设计阶段的一环,从最初的尺规到CAD再到本文探究的参数化自动绘图,也许在未来还会因为时下热门AI技术的加入而实现智能出图都在促进工业的不断升级。
本文从多方面叙述了自动绘图的优点,其不足也显而易见--编程耗时长,对于设计变更快的机型,有时会出现上一个更新还没写好就变更的情况。当这种差值大到一定程度的时候,自动绘图的优势就失效了。针对此问题,本文设想未来借助机器学习改善。
从原理上看,本文所探究的自动绘图技术不仅可以用于风机塔架的设计,对所有具有一定程度规律性的图纸都可以定制使用。21世纪是信息的时代,各行各业都应插上信息的翅膀方可继续腾飞。