高级语言在工程施工图设计中的应用
2020-03-15高杰
高杰
(天津市市政工程设计研究院 天津市 300392)
1 引言
目前工程师在市政公用工程项目设计时主要采用AutoCAD 软件进行施工图设计。相比20年前进行手绘图纸,工作效率已经大幅提升。可随着我国人民生活水平不断提高,城市基础设施建设投资逐年增加,工程项目数量大增,且规模及复杂度不断增大。在这样的形势下,工程师面对着越来越紧张的工期和越来越激烈的市场竞争,双重压力下难免出现图纸质量下降或设计错误,给后续施工带来麻烦甚至造成工程事故,为国家带来经济损失。
本文以污水处理厂自控系统设计为例,介绍一种采用高级语言编程实现程序自动绘图的方法,可大幅度提升设计效率,并避免设计错误。
把工程师从繁琐的重复的绘图工作中解放出来,将精力放在设计、创新等更高级的任务中。
2 污水处理厂自控系统设计简介
2.1 市政污水处理厂
城市污染源排出的污水,因含污染物总量或浓度较高,达不到排放标准或不符合环保要求,必需经过污水处理厂进行人工强化处理,以便达到国家规定的排放标准或回用标准。
从处理方法上,污水处理工艺分为物理法、化学法和生物法;从处理深度上,处理工艺分为一级、二级、三级和深度处理。污水处理工艺设计要求技术先进,经济合理,费用最省。
污水处理厂设计包括各种不同处理阶段所需的构筑物、建筑物、设备、管道、厂区道路、绿化、管线综合、给排水、供配电、自控仪表等。
2.2 污水处理厂自控系统
污水处理厂自控系统构成整个污水处理工程的重要组成部分,其设计优劣及功能稳定直接关系到全厂设备的正常运行。
自动控制系统采用基于可编程逻辑控制器(PLC)的集散型控制系统,通过现场PLC 完成各自辖域内工艺设备和检测仪表的数据采集和自动控制。
控制系统由三级组成:
第一级——就地控制(现场控制柜控制);
第二级——过程控制(各PLC 控制站控制);
第三级——监控管理(中央控制室监控)。
2.3 自控系统图纸内容
自控专业施工图设计一般包括控制系统结构图、PLC 配置图、PLC 模块接线图(图1)、电缆清册(图2)、自控安装图等。其中用于直接指导自控设备生产和现场工人安装的是PLC 模块接线图、电缆清册,这两部分也是设计中最为繁琐和容易出错的地方。对于一个中等规模的处理厂,其需要接入自控系统的工艺设备和仪表可超过600 个,设置大小PLC 控制站在20 台左右,输入输出信号超过5000 点,安装电缆3000 余根。
这种图纸绘制和错误排查由人工来做是一项耗费精力、枯燥且极易犯错的工作。但不难看出,它是一项重复性强且有规律的工作,应该采用编程的方法由计算机自动完成。
3 C++应用于AutoCAD绘图
图1:PLC 模块接线图
图2:电缆清册
AutoCAD 自带高级编程语言LISP,但使用它做复杂的设计需要很高的编程技巧,若要设计用户界面,难度就更高了。而C++语言在实现复杂逻辑运算上拥有绝对优势,若使用VC,更可轻松实现用户界面设计。
本文提出利用AutoCAD 脚本文件作为接口,实现C++语言直接生成绘图指令,控制AutoCAD 自动绘图方法。
3.1 AutoCAD脚本
AutoCAD 脚本实际上就是批处理命令,是AutoCAD 命令提示行中所用的命令的一个有序集合。脚本文件中的每一行对应着AutoCAD 命令提示行中的一个命令,将它们按一定顺序组合在一起就可实现复杂的制图工作。
脚本文件是纯文本文件,可直接打开、编辑、修改,阅读起来也很直观。
图3:程序可视化界面
3.2 C++生成脚本
对于上述的纯文本文件,用C++语言进行创建、读写非常简单,使用CFile 类即可实现。
在CAD 中的所有绘图工作可分解为若干种基本操作,如画一条线段、画一条弧线、写一段文本等。这些基本操作都有对应的脚本命令,如“_LINE 100,100 500,500”表示以坐标(100,100)为起点,(500,500)为终点画一条线段,“_MTEXT 350,110 监测仪表组电源”表示以坐标(350,110)为基点插入一行文字。
图2 的电缆清册可以拆分成绘制线段和插入文字2 种基本操作,只要指定了表格间距,就可使用C++简单的循环逻辑轻松绘制出来,而C++输出的是一组脚本指令,并将他们存储在文本文件中,CAD 调用该文件后即可自动生成表格。更复杂的图纸绘制原理也一样。
3.3 基本绘图函数
用C++语言实现绘图首先要先编写一些基本的绘图函数,每个函数对应着一个CAD 的基本操作的脚本命令。函数的参数尽量设计成和脚本命令的参数基本一致,这样在后续C++编程中可以采用与编写脚本类似的语法和习惯。函数的输出则是在生成的脚本文件中插入一行对应基本绘图操作的脚本命令。
例如上一节所述的画一条线段的C++函数可以定义成:
void DrawLine(CFile* infile,long x1,long y1,long x2,long y2)
其含义是以(x1,y1)、(x2,y2)为端点画一条线段,函数执行结果就是在已打开的infile文本文件中加入一行画线的脚本命令。可以看出调用该函数时的语法与编写脚本文件的语法极其类似。
同样的我们定义了过对角线上两顶点坐标画矩形的函数:
void DrawRect(CFile* infile,long x1,long y1,long x2,long y2)
以及在指定点插入文字的函数:
void DrawText(CFile* infile,long x1,long y1,long x2,long y2,char*data)
4 自控系统数据结构设计
C++语言的优势在于面向对象的思想,自控专业制图中,我们考虑将系统中的每一台设备作为一个对象。前文已经介绍了,对于污水处理厂中的设备,首先在地理上它们位不同的建(构)筑物中,其次在自控网络中它们接入了不同的PLC 分控站中,从传输数据角度看,每台设备拥有各自的输入和输出端口,并向系统发送和接收着不同定义的数据。
我们将设备封装为一个类,它的定义如下:
class instrument
{
char name[30];//设备名称
char shortname[10];//名称缩写
char construct[30];//所在建筑物
char construct_ID[10];//建筑物位号
char PLC[10];//所属分控站
char position[50];//信号线接线点
char m_DI[20][20];//数字量输入信号
char m_DO[10][20];// 数字量输出信号
char m_AI[10][20];// 模拟量输入信号
char m_AO[10][20];// 模拟量输出信号
bool pow;//是否提供电源
}
成员变量包含了所有绘图时需要用到的设备属性。同时定义了绘制自控图纸的成员函数:
void draw_IOlist(CFile* infile,long x,long y)//绘制输入输出信号统计表
void draw_IOcable(CFile* infile,long x,long y)//绘制电缆清册
void draw_IOmodule(CFile* infile,long x,long y)//绘制IO 模块接线图
这些函数都是反复调用前文介绍的基本绘图函数。函数执行结果是在打开的infile 文本文件中加入若干行脚本命令。
程序的工作就是遍历所有生成的设备类(instrument)实体的所有成员函数,当所有函数均按顺序执行一遍后,infile 文件就包含了完成图纸的所有脚本指令,在CAD 中调用这个脚本文件即可自动生成图纸。
5 用户界面
在程序自动绘图之前,工程师需要把全厂几百个设备的信息录入程序,以便生成设备类(instrument)实体,每个设备又包含了至少10 个属性,这仍然是一项繁琐而容易出错的工作。因此必须设计一个直观且易操作的用户界面帮助工程师完成录入工作。
这里采用Visual C++开发一个可视化界面,可以帮助用户完成对设备的添加、删除、属性编辑、复制等操作。程序可以将所有添加的设备按所在构筑物分类列出,当点选设备后,其所有属性将呈现出来,方便用户查询、修改。程序可将一个工程项目的所有信息保存为一个文件,供用户随时调取。
当所有工程信息录入完成并核对无误后,用户可通过程序提供的制图按钮生成绘制该工程自控专业图纸的脚本文件。程序可视化界面如图3 所示。
6 结束语
目前计算机技术已经广泛应用于工程设计行业,在该领域中,专业划分较多,现有的成熟软件远没有覆盖到所有专业,现在市面上有针对建筑、桥梁、管网、电网等行业的专业辅助设计软件,但本文所说的自控系统设计,因其涉及的领域较窄较偏,还没有现成的商业软件可用。
本文提供的思路是,采用高级语言编写程序自动生成脚本文件,并用脚本自动生成CAD 图纸,它没有程序之间相互调用,开发者不需掌握复杂的接口、库函数,以及兼容性问题。对于一线的工程技术人员,只要有简单的高级语言知识,即可写出自己专业需要的自动绘图软件。冷门专业的工程师可以通过此方法提高自身的工作效率。