编程和数控的区别十篇

时间:2023-10-20 17:32:59

编程和数控的区别

编程和数控的区别篇1

随着电子、计算机、通信和自动化技术的发展,嵌入式视频监控系统已成为现代安防系统发展趋势,并且已经引起了人们的重视。嵌入式视频监控系统主要由嵌入式处理器、嵌入式操作系统及相关软硬件等组成。TI公司的达芬奇技术是一种专门针对数字视频应用、基于信号处理的解决方案,能为视频设备制造商提供集成处理器、软件、工具和支持,以简化设计进程,加速产品创新[1]。本系统采用TM320DM365(简称DM365)视频处理芯片开发嵌入式网络视频监控系统,它具有功耗低、性能高、开发周期短、可扩展等优点。

1 网络视频监视系统结构

DM365处理器集成了一个ARM926EJ-S内核,一个H.264高清编解码协处理器HDVICP和一个MPEG-4/JPEG高清编解码协处理器MJCP,可以支持H.264/MPEG-4高清视频编解码。本系统利用DM365的强大运算能力,在ARM926EJ-S内核上运行基于Linux操作系统的应用程序实现视频采集、视频显示、网络通信、流媒体传输、器件控制等;在HDVICP协处理器上运行H.264算法来实现视频编码。

本系统所设计的网络视频监控系统总体结构如图1所示,它由摄像头、视频服务器、网络和客户监控端等模块组成。摄像头实现对现场实时视频的采集,由视频服务器读取采集到的视频信号经H.264编码器编码后进行存储和网络实时传输;客户监控端主要完成视频信号的接收、存储、播放和下载等功能。另外,客户监控端可以把用户的操作转换成相应的控制信号发送到视频服务器,由视频服务器对器件进行控制。

2 视频监控服务器模块的设计

视频监控服务器的主要任务是监听网络连接,采集视频数据,视频数据压缩编码,存储视频数据并分发给客户监视端[2]。在视频数据采集方面,使用V4L2常用模型;在编码方面,结合DM365芯片的特点采用H.264压缩编码标准;另外,使用RTP/RTCP协议在视频监控服务器与客户监控端之间进行视频数据传输[3]。

2.1 视频监视服务器模块工作流程

视频监控服务器包括三个子模块,一是视频数据处理子模块,负责视频数据采集与编码;二是视频监控控制子模块,负责开启、关闭视频监控等控制操作;三是数据传输子模块,负责视频数据的实时传输以及备份视频数据等工作。视频监控服务器模块的工作流程如下。

① 主控程序对系统初始化,主要包括ARM处理器与HDVICP协处理器的共享内存的配置,视频采集设备的初始化等。

② 主控程序建立视频采集线程Capture、视频压缩线程Video、视频数据存储与实时传输线程Trans、视频文件备份线程BackData和监听线程Listen。当主控程序完成初始化工作和线程创建工作后转化为系统控制线程Ctrl。

③ Capture线程负责采集视频信号;Video线程负责将视频采集线程采集到的视频信号用H.264编码器压缩编码;Trans线程负责将压缩后的视频数据存储在视频服务器端的硬盘上,并实时地将视频流传输给视频监控端;Listen线程主要负责监听客户监控端的控制命令,并对命令进行词法解析,执行相应的命令;BackData线程负责视频文件的传输,以备客户端备份视频文件。

④ 如果退出系统,则所有线程结束;否则循环执行③。

2.2 视频数据处理子模块流程

在视频监控服务器中涉及到的数据分为两类:一类是摄像头采集到的原始视频数据,一类是压缩后的视频数据。这两类数据均存放在缓冲区中,这些缓冲区被多个线程共享。共享的方法是采用管道通信,一方将缓冲区的地址送入管道,另一方从管道读取缓冲区地址对该缓冲区共享。

2.2.1 缓冲区共享

由于运行在Linux上的应用程序调用malloc获得的缓冲区所用地址均为虚拟地址,因此,缓冲区的物理空间不一定连续,当把缓冲区的地址传递给协处理器进行编码的时候,数据完整性问题就出现了,因为编码算法是运行在HDVICP协处理器上的,这是一个只有实地址的世界。所以,TI公司开发的编码引擎(Codec Engine,简称CE)的软件架构时提供了CMEM模块,该模块为ARM926EJ-S内核和协处理器之间通信提供了连续的内存。程序员可调用CMEM API申请物理上连续的共享缓冲区。

本系统设置了四个管道,其中CVInFifo和CVOutFifo这两个管道由Capture线程和Video线程共享;VTInFifo和VTOutFifo这两个管道由Video线程和Trans线程共享。三个线程共享四个管道的示意图如图2所示。在系统初始化时,Video线程和Trans线程通过调用CMEM API分别申请若干个物理地址连续的缓冲区,Video线程将其申请的缓冲区地址送入CVInFifo管道,Trans线程将其申请的缓冲区送到VTOutFifo管道。Capture、Video、Trans和Ctrl四个线程汇集在一起后,循环执行以下步骤以实现视频数据的采集、编码和传输。

[Video线程初始化时,申请若干个连续的缓冲区,并将各缓冲区地址送入管道。][⑤Video线程将废弃的缓冲区hCapBuf送入管道,供Capture线程使用。][②Capture线程将缓冲区hCapBuf的地址送入管道。][⑥Video线程将已编码视频数据缓冲区hDstBuf的地址送入管道。][⑧Trans线程将废弃的缓冲区hDstBuf送入管道供Video线程使用。][Trans线程初始化时,申请若干个连续的缓冲区,并将各缓冲区地址送入管道。][①Capture线程从管道获取一个空缓冲区hCapBuf,并采集一帧原始视频保存在该缓冲区中。][③Video线程获得装有原始视频帧的缓冲区hCapBuf。][⑦Trans线程从管道获取一个已编码的缓冲区hDstBuf,将其内容写入文件,并按RTP/RTCP协议传输给客户端。][④Video线程从管道获取一个空缓冲区hDstBuf,并对hCapBuf缓冲区中的视频数据进行编码,其结果存放在缓冲区hDstBuf中。] [CVInfifo] [CVOufifo] [VTInFifo] [VTOutfifo]

① Capture线程从CVInFifo管道获取一个空缓冲区hCapBuf,采集一帧视频并保存在该缓冲区中;

② Capture线程将缓冲区hCapBuf地址送入CVOutFifo管道;

③ Video线程从CVOutFifo管道中获得装有原始视频帧的缓冲区hCapBuf;

④ Video线程从VTOutFifo管道中获取一个空缓冲区hDstBuf,并对hCapBuf缓冲区中的视频数据用H.264编码器进行编码,其结果存放在缓冲区hDstBuf中;

⑤ Video线程将废弃的缓冲区hCapBuf送CVInFifo管道,供Capture线程循环利用;

⑥ Video线程将已编码的视频数据缓冲区hDstBuf的地址送入VTInFifo管道;

⑦ Trans线程从管道获取一个已编码的缓冲区hDstBuf,将其内容写入文件,并按RTP/RTCP协议传输给客户端;

⑧ Trans线程将废弃的缓冲区hDstBuf送入管道供Video线程使用。

2.2.2 H.264编码器

系统选择先进的H.264编码方案。H.264编码器继承了H.263和MPEGl/2/4视频编码器的优点,在吸收变换编码和运动补偿的基础上,采用全新的帧内预测、多帧参考预测、高精度运动估计、类DCT整数变换、基于上下文的自适应熵编码、去块效应滤波等编码技术,有效提高了数据压缩效率[4]。H.264引入了面向包的编码机制,有利于网络中的分组传输,支持网络中视频的流媒体传输,能适应于不同网络中的视频传输,网络亲和性好。

在H.264标准中定义了两个层次:视频编码层(VCL)和网络抽象层(NAL)。VCL主要负责高效的数字视频数据压缩。VCL处理的是块、宏块和片的数据,并尽可能地设计成不依赖于任何网络的特性。NAL处理的主要是片以上的数据,提供适当的接口对数据进行打包和传送。在VCL和NAL之间定义了一个基于分组方式的接口。这样,高编码效率和网络友好性的任务分别由VCL和NAL来完成。H.264的这种双结构扩大了应用范围,几乎涵盖了视频监控、视频点播、流媒体业务等大部分的视频业务。

本系统采用TI达芬奇技术来实现H.264编码器,此视频压缩算法运行在HDVICP协处理器端,ARM端通过引擎Codec Engine和服务器Code Server与HDVICP协处理器进行交互[5]。编码后的H.264视频序列是由一系列NAL单元构成。一个NAL单元就是一个变长的包括某一类型的语义元素的字节流。比如,NAL单元可以装载一个图像码片、一个A/B/C的数据分割、一个序列或者图像的参数设置等。

2.3 网络传输模块的设计

网络传输模块的主要功能是负责为客户端的请求建立链接,并将经H.264编码器编码的视频流传输给客户端。这项工作由Listen和Trans两个线程完成。

网络服务器与客户监控端采用UDP数据包进行通信。Listen线程循环监听用户请求,当有用户请求实时监控视频时,Listen线程将该用户的IP地址及UDP端口号保存在与Trans线程共享的变量ClientUdp[]中,Trans线程根据变量ClientUdp[]创建UDP套接字,并按RTP/RTCP协议传输实时视频编码。当用户关闭视频监时,Listen同样将用户的关闭视频请求传递给Trans,Trans将关闭相应的UDP套接字,停止视频的实时传输。另外,Listen线程还具有接收来自客户端的控制命令,比如实现视频文件的下载,以及关闭和开启实时视频监控等功能。

2.3.1 NAL单元的提取与RTP数据包的传输

由于在达芬奇DM365开发平台上的H.264编码器的输出码流中,每个NAL单元前面有4个字节的前缀来标识NAL单元边,即起始码前缀(0x00000001)。因此,Trans线程可以根据起始码从已编码缓冲区中提取出各个NAL单元以备发送,即从Video线程和Trans线程共享的缓冲区中获得H.264编码的图像帧的数据,并在每帧的数据里搜寻出每个NAL单元。在默认情况下,达芬奇DM365开发平台采用的H.264编码器每次提供一个完整的H.264视频帧,除第一帧由三个NAL单元组成外,其他帧仅包含一个NAL单元。第一帧的三个NAL单元的类型分别为序列参数集(SPS)、图像参数集(PPS)和IDR图像片段。其他帧的NAL单元类型均为I图像片段。

实时传输协议RTP负责提供实时数据(如交互式的音频和视频)的端到端传输服务,它可以建立在底层的面向连接或非面向连接的传输协议之上。通常情况下RTP数据包使用UDP来传送,但它不能为按顺序传送数据包提供可靠的传送机制,也不提供流量控制或拥塞控制,而是依靠实时传输控制协议RTCP提供这些服务。本系统按RTP数据包格式将每一帧视频打包后,使用UDP套接字将该数据包发送给客户监控端。

2.3.2 实时监控的实现

4 结束语

本系统基于DM365嵌入式平台,设计了嵌入式网络视频监控系统。视频服务器端主要实现视频的采集、编码与网络传输,通过四个共享管道实现视频数据流的共享,整个视频服务器由五个线程相互配合完成。客户监控端采用Davinci-VLC客户端程序实现视频的监控及视频文件的备份。下一步的工作重点是研究基于WiFi+3G视频监控,以及保证视频数据在网络上的安全传输。

参考文献:

[1] TI. DaVinci? Technology Overview.http://focus.ti.com/lit/ml/sprb189b/sprb189b.pdf,2008.

. 兵工自动化,2010.29(4):75-77

[3] 张多英,申晨,刘伟平,黄红斌.嵌入式视频监控传输系统的设计与实现[J].计算机工程与设计,2010.31(4):724-728

编程和数控的区别篇2

在制造业非常发达的华南(以珠三角地区为代表)和(以江浙地区为代表),各类CAD\CAM软件的应用由来已久,而且非常广泛和成熟,即使在那些只有1~2部数控铣床或加工中心的“路边加工店”里,也随处可见Mastercam、 UG、 PRO\E、Cimatron、Powermill、Surfcam等世界知名CAD\CAM软件的身影。到目前为止,各类CAD\CAM软件应用日趋普及,特别是数控三维曲面加工,使手工编程几乎已没有用武之地。

但是必须强调的是,手工编程是根本,是基础,各种疑难杂症的解决往往还要利用手工编程;再者,学习手工编程有利于进一步完善数控程序,所以在学校中教学手工编程有着极其重要的意义,特别是“模块式”课程教学手工程序。

另外,当一些中小型认为使用正版CAD\CAM软件成本过高时,手工编程(更高层次的变量编程,即宏程序的运用)就会显示其使用价值。

因此手工编程在教学和生产中仍具有极其重要的地位。

笔者根据多年的数控生产实践经验和教学实践,提出采用主程序调用子程序的编程方案,编写结构化数控程序,有效地改善数控程序的可读性与安全性,给教学和生产带来了安全与便利。

二、用主程序调用子程序编程方案的优点

GSL990M铣床数控系统中,在主程序中用M98指令调用子程序,而在子程序中用M99指令返回主程序。采用主程序调用子程序进行编程有两大用途,一是把需要重复使用的边界程序段编写成子程序,避免了程序编写重复,使程序简洁;二是把需要重复实现的功能用子程序来完成,使程序清晰易读。阵列孔加工程序采用子程序结构,充分说明了以上第一用途;多工序加工中,系列辅助功能(如换刀、刀具长度补偿等)采用子程序结构,说明了以上第二个用途。

三、两个重要子程序

多工序加工中无原则经常换刀,换刀后在刀具接近工件的过程中,又需建立刀具的长度补偿。如果将这两项功能编写成两个子程序,将使主程序结构清晰、易变,而且不容易出错。下面介绍两个子程序。

1.换刀子程序

O5555;

N0001 G80G40M09;撤消固定循环、撤消半径补偿、

关冷却液

N0002 G91G28Z0M05;通过当前点返回参考点、主轴

停转

N0003 G49;刀具长度偏移注销

N0004 M06;换刀准备,具体调用的刀具号由主程序

指定

N0005 M99;返回主程序

由此可见,换刀子程序除实现换刀功能外,还撤销了固定循环、刀具半径补偿、刀具长度补偿,实现关冷却液、停止主轴旋转功能,使系统基本复原到初始状态,起到防止误操作的作用,提高了程序的安全性。

2.刀具接近子程序

O5554;

N0001 G90G00X0Y0;检验X、Y坐标原点是否正确

N0002 M03;主轴正转,具体转速由主程序指定

N0003 G43G00Z100;建立刀具长度补偿,并移动到

Z=100mm的位置,具体补偿参数

由主程序指定

N0004 M07;开冷却液

N0005 M99;返回主程序

刀具接近子程序建立了刀具的长度补偿,并且使刀具到坐标点(0,0,100)的位置,起到了检查工件坐标系(WCS)原点是否正确的作用,提高了程序运行的安全性。

四、数控加工中工序概念的定义

为了说明多工序加工数控编程,需对数控加工中的工序概念进行重新定义。传统机械加工中的工序概念,以两个方面区分工序,一是工序过程是否连续完成;二是工作场地是否发生变化。显然,这种传统的工序定义在数控加工中已不适用,应对数控加工工序提出新的定义。

数控加工以是否更换加工程序来区分工序,更符合数控加工的实际情况。进一步说,数控加工工序是指工件的一次安装中,使用同一把刀具、同一工艺参数和同一数控加工程序对工件进行加工,所连续完成的那一部分工艺过程。

基于以上数控加工工序的定义,数控加工工艺过程卡包括:工序号、工序名称(应说明加工部位、加工性质、加工阶段)、刀具、安装方案和有关工艺装备、工艺参数、数控程序号、加工区域简图等内容。反之,数控加工工序过程卡也正好明确了数控加工工序的概念。

五、多工序加工中采用的主程序结构

在建立数控加工工序概念的基础上,通过调用两个重要子程序,可以对多工序数控加工编写出结构性、可读性好的主程序。

假如要完成两道工序的数控加工,这两道工序分别使用说明01#、02#刀具,长度补偿值分别存放在H01、H02内存单元,转速分别为1000r/min、1200r/min,加工子程序号为O1000、O2000。以此说明主程序编写结构。

O0001;

N0001 G54;建立工件坐标系

N0002 T01M98P5555;换01#刀具

N0003 S1000H01M98P5554;01#刀具定位到坐标点

(0,0,100)

N0004 M98P1000;调用第一道工序的加工程序;

以上程序完成第一工序的加工

N0005 T02M98P5555;

N0006 S1200H02M98P5554;

N0007 M98P2000;调用第二道工序的加工程序;

以上程序完成第二道工序的加工

N0008 T02M98P5555;

N0009 M30

可见,多道工序的数控加工程序可依次编写。此主程序结构简单、编写容易、程序易读,由于在每道工序加工中不必考虑刀具长度补偿的建立与撤消,程序运行的安全性好,而且编程人员可以集中编写每道工序的加工子程序。

对于每道工序的加工子程序,编写人员只要从坐标点(0,0,100)开始编写,不必考虑刀具长度补偿以及开关指令(换刀、主轴启动/停止、冷却液开/关)等,只要考虑快速移动(G00)、切削加工(G01、G02)、指定进给速度(F指令)、刀具半径补偿(G41、G42、G40)和固定循环等指令。

编程和数控的区别篇3

PLC是专为工业控制而开发的装置,其主要使用者是工厂广大电气技术人员,为了适应他们的传统习惯和掌握能力,通常PLC不采用微机的编程语言,而常常采用面向控制过程、面向问题的“自然语言”编程。国际电工委员会(IEC)1994年5月公布的IEC1131-3(可编程控制器语言标准)详细地说明了句法、语义和下述5种编程语言:功能表图(sequential function chart)、梯形图(Ladder diagram)、功能块图(Function black diagram)、指令表(Instruction list)、结构文本(structured text)。梯形图和功能块图为图形语言,指令表和结构文本为文字语言,功能表图是一种结构块控制流程图。

梯形图是使用得最多的图形编程语言,被称为PLC的第一编程语言。梯形图与电器控制系统的电路图很相似,具有直观易懂的优点,很容易被工厂电气人员掌握,特别适用于开关量逻辑控制。梯形图常被称为电路或程序,梯形图的设计称为编程。

梯形图编程中,用到以下四个基本概念:

编程和数控的区别篇4

Abstract: The solution of forest fire monitoring and controlling repository are discussed from three aspects of overall technical program, front-end video capture systems and geographic information systems and other technical documentation.

关键词:库区森林防火;监控;解决方案

Key words: area of forest fire prevention;monitoring;solution

中图分类号:S762.3 文献标识码:A文章编号:1006-4311(2010)27-0209-01

1技术方案综述

“森林防火及生态保护数字化监控预警系统”有如下几个特点:数字云台结合GIS,火点精确定位;林火自动识别系统,实现火情自动报警;纳米波滤光技术穿透烟雾,清晰成像;短信火情信息,及时迅速。本方案所设计的系统完全满足“森林防火防护监控系统建设”项目的要求,实现的主要功能如下:监控指挥屏幕墙可以实时显示前端采集点的图像;数字图像可以通过光纤网络和计算机网络实现远程传输;所有视频图像进行全程录像存储;采用野外重载数字云台,具有实时回显位置信息功能;同时配备电动三可变长焦距镜头和低照度高清晰摄像机;可以通过专用操作键盘或监控软件控制云台和镜头。

1.1 系统特点①数字云台精确定位。重型数字云台在保证普通云台功能的基础上添加了许多其他的功能,其最大特点是当前云台位置的角度值会实时回显,并可按给定的指定角度值旋转。采用数字云台后,云台在水平及俯仰运动时均可将旋转的角度通过解码器实时回传至指挥中心,送入GIS系统进行实时解算,根据水平与俯仰的角度及监控点的已知位置就可将发生火灾的确定位置明确的在GIS系统上呈现出来。同时还显示着火点的地形地貌,林分类型,火灾发展蔓延趋势,以及通往火场的主要道路及通行能力,防火隔离带的位置及阻火能力,距着火点最近的消防队伍的具置及赶赴火场所需要的时间等重要指挥信息。②林火自动识别预警。林火自动识别预警是通过对被监测对象的视频数据流进行处理,根据森林背景图像和火灾、空间几何特征、纹理特征进行比较,选择合理方式、设定报警门限值进行判决报警。③综合供电系统。系统采用铠装电缆直埋供电方式,避免了用太阳能、风力供电不稳定的不足,从而保证前端设备及控制设备的可靠运行。④火情短信平台。为了让林区防火相关部门能在第一时间内得到火情信息,我们通过手机平台将火点的相关信息,如经纬度、地理方位、起火时间等信息以短信的形式放送给林区防火领导,及时组织扑救林火,最大程度的减少经济损失。⑤滤光透雾技术。林区烟多雾重,大大地缩短了监控林火的可视范围。森林防火防护远程数字化监控系统采用先进的滤光透雾技术,使远处的火情影像清晰地显示在监视屏幕上。

防火指挥中心远程控制与通讯是指挥中心的主要功能,即通过指挥中心可完成对林场各个地区的通讯指挥工作,同时在指挥中心可以实现对火情地区的实时监视、控制功能。以指挥中心为核心将各个系统进行整合,实现办公的信息化网络化,通过有线、光纤调度系统完成对下属部门的命令、工作查询、人员调配工作;同时把监控系统与地理信息系统进行无缝结合,完成对林区的监控以及资源调查工作。

1.2 功能概述地理信息指挥决策系统(GIS)是本项目建设的核心,是防火指挥平台,对整个系统的日常管理和防灾的指挥都是在GIS平台上完成。

本系统主要任务是实现信息共享,充分发挥信息系统的资源优势,建立高质量、高效率的管理信息网络。

系统中每个前端采集站应有独立地址编码,且每个前端采集站的坐标与地理信息系统中的位置一一对应,通过安装在前端采集站的数字云台巡回监控覆盖区域的林区火情,一旦发现火情,GIS系统接收到特定地址编码的前端数字云台回传的火情位置数据,经GIS系统通过数据处理即可实现火点定位。同时,启动后台的短信平台在第一时间通知防火相关领导和人员。

系统还可以提供最近扑火队前往火情点最短路径以及通往现场的主要道路和通行能力,提供防火隔离带的位置和阻火能力及赶赴火场的时间等重要信息。

在正常情况下,摄像机以自动巡航扫描方式工作,观测人员在监控中心可观测到一定范围内的林木地貌、道路、人员等实况图像,系统可进行全程录像;若遇异常情况,工作人员可及时将摄像机从自动状态下转为手动状态,并对有关目标进行跟踪、定位、放大,以便更加仔细全面地进行观测。

2前端视频采集系统设计

森林防火防护监控系统的前端视频采集部分包括光纤传输系统、视频编码系统、低照度摄像机、重型数字云台、室外护罩等组成。

摄像机输出的模拟视频信号通过视频线缆联接到视频编码器的视频输入端,视频编码器的485接口通过485控制线与重型数字云台解码器相连,通过接收视频监控服务器发送的云台、摄像机的控制信息,驱动云台、摄像机进行旋转、变焦。视频编码器的网络接口通过网线联接到光端机上,光端机通过光纤联接到指挥中心的网络交换机,将视频编码器输出的视频流媒体传输到监控中心。

3地理信息系统技术文档

3.1 主要任务①火情识别报警:当监控摄像机扑捉到林火时自动报警,由值班人员确认火情及火点位置,通过短信平台报警信息;GIS管理系统:以电子地图为基础,通过各类空间操作和分析方法,采用三维电子沙盘功能查看山形地势,实现对森林火灾的分析预报,森林防火工作的动态管理,为防火提供直观的规划和决策支持。②火灾定位功能:利用前端采集系统中的数字云台,实现定位功能。同时,系统具备实现人工定位功能。

3.2 功能概述有效的管理多种比例尺矢量图和栅格图,满足海量数据的查询检索,并实现地图量算、态势制作、跟踪监测、三维飞行模拟等业务功能。

编程和数控的区别篇5

关键词:反编译; 控制流分析; 嵌入式系统; 逆向分析

中图分类号:TP314 文献标志码:A

0引言

反编译是一个由机器代码或汇编代码生成更易理解的高级语言程序的过程 在这一过程中,根据程序控制流图提取高级程序控制结构是至关重要的一步在嵌入式程序中,为减少生成的代码所占用的存储空间,编译器对程序进行了大量的优化,导致程序中的跳转错综复杂,提取出的控制流图中包含了大量的非结构化子图,对高级程序控制结构恢复造成了较大的影响

目前控制结构恢复技术的研究主要针对桌面系统中的可执行程序进行,且主要关注结构化子图的分析与识别[1-3],这些方法能够提取出控制流图中的大部分控制结构,但是对于非结构化区域的处理略显不足对于非结构化流图结构恢复问题的研究目前主要采取4种方法,分别是引入布尔变量[4-6]、代码复制[7-8]、引入特殊控制结构[9-10]和图转换系统[6,11]采用布尔变量和代码复制的方法虽然可以获得等价的结构化的控制流图,但是改变了程序的语法和逻辑结构,引入特殊控制结构导致某些结构无法被大多数高级程序语言正确描述,图转化系统保持程序控制结构不发生变化,但是在高级代码生成阶段产生大量的“goto”语句

为了更加准确地恢复嵌入式代码的高级程序控制结构,本文将编译领域经典的控制流分析算法——结构分析方法引入到控制结构恢复过程中,并在该方法上作了适当改进以适应嵌入式代码的特点在对非结构化流图进行结构化的过程中,本文针对结构分析涉及的三类非结构化区域分别提出了基于规则的结构化方法实验结果表明改进的结构分析算法能够更加准确地恢复程序的高级语言控制结构

1嵌入式代码高级程序控制结构恢复

结构分析是一种更为精致的区间分析方法,与基本的区间分析不同,它能表示出比循环更多的控制结构类型,并使每一种类型的控制结构形成一个区域结构分析考虑流图的深度为主生成树,然后对各种区域类型的实例按后序次序依次考察流图中的节点,将它们规约为抽象节点,蜕化掉连接边,并构造对应的控制树[12]

经典的结构分析算法可以准确识别顺序结构(图1(a))、ifthen(图1(b))、ifthenelse(图1 (c))、switch(图1(e))、selfloop(图1 (f))和whileloop(图1(d))等六种结构化区域;非正常选择路径(图 2(a))、自然循环(图2(b))和非正常区间(图2(c))三种非结构化区域需要说明的是,图2中的自然循环是指除了selfloop和whileloop以外的单入口循环非正常选择路径区间是指既没有包含环路也不能规约为任何简单无环结构的区域,这种结构在嵌入式代码中很常见图中所给出非结构化区域都是示意性的,因为循环可能不止两条出口边,非正常区间的入口基本块可能有两个以上的后继

由于结构分析算法在编译领域主要用于控制流分析和数据流分析,它没有对非结构化区域进行结构化处理,也不适合直接用于嵌入式代码的结构恢复为了使结构分析算法可以进行嵌入式代码的结构恢复,本文对算法进行了以下改进:

首先,由于在嵌入式汇编代码中,同一个函数中可能包含多条返回指令,这样得到的控制流图可能存在多个节点后继为空在此情况下,如果严格按照结构分析算法,流图无法规约为一个节点为了让结构分析算法顺利进行,本文将结构分析算法可以识别的结构加以扩充,使得其可以识别如图3所示的结构图中的虚线表示该边可以不存在,这样较好地解决了一个函数包含多条返回指令的问题

其次,结构分析算法识别到非结构化区域时,并不对非结构化区域进行结构化处理,而非结构化区域无法用现有的高级语言控制结构表示为了解决这个问题,本文设计了算法对这些非结构化区域进行结构化处理该算法对非结构化流图进行剪边处理,使其结构化剪下的边将被记录,在高级代码生成阶段,产生相应的“goto”语句形式对结构分析得到的三种非结构化区域的处理规则定义如下:

非正常选择路径区间无法规约,是由于ifthenelse结构的一个分支有多个前继,所以,只需要把通向该分支的边剪下,便可以将流图结构化对非正常选择路径区间的处理方式如图4所示

导致自然循环无法规约的原因是循环有多个出口,所以结构化方法可以选择破坏循环结构(图5(a))或者剪掉多余的出口(图5(b))在具体对非结构化流图进行处理时,可以根据程序的上下文选择合适的处理方式

导致非正常区间无法规约的原因在于它包含一个循环,该循环有多个入口所以非正常区间结构化的方法可以选择剪掉多余的入口(图6(a))或者破坏循环(图6(b)),需要根据程序的上下文选择更合适的处理方案

需要说明的是,对于非结构化区域的处理,往往不能简单通过一步处理实现结构化在实际处理过程中,可以按以上规则先剪一条边,然后对流图进行规约,如果不能完全规约,则对非结构化区域继续结构化处理,直到程序流图可以被完全规约

经过以上改进,结构分析算法便可以更好地应用于嵌入式代码的高级程序控制结构恢复当中下面通过一个控制流图的处理过程,详细介绍本文算法的工作流程

图7(a)是一个非结构化程序的控制流图,它包含7个基本块,分别记为B1~B7,在进行控制流分析时,其执行过程如下:

步骤1对控制流图进行深度优先后序遍历,获得控制流图的后序遍历序列:7, 5, 6, 3, 4, 2, 1

步骤2依次对后序序列中的节点进行分析,判断其是否符合某一种高级程序控制结构,当扫描到基本块B6时,B6包含两个后继却不能识别为ifthen或者ifthenelse,所以它被认定是非结构化区域中的点,然后查找该非结构化区域包含的节点,可以找到B3、B5、B6、B7四个基本块构成非正常选择路径区间结构

步骤3对找到的非结构化区域进行结构化处理,利用前文定义的剪边规则,将流图中的边B6B5剪去,得到图7(b)

步骤4由于控制流图已经改变,重新扫描后续遍历序列进行规约,当遍历到基本块B3时,B3有两个后继B5、B6,且符合ifthenelse结构特点,所以节点B3、B5、B6被抽象为一个新的节点,记为B8,控制流图也被变换为图7(c)

步骤5继续对后续遍历序列进行扫描,到达节点B2,B2有两个后继,两个前驱,并且B4和B2构成一个环路,B2和B4符合while循环特点,所以可以进行规约,抽象得到节点B9,控制流图转换为图7(d)

步骤6继续对后续遍历序列进行扫描,到达基本块B1,B1是入口基本块,且只有一个后继,不断沿着其后继进行分析可以知道基本块B1、B9、B8、B7满足顺序结构特点,所以可以规约得到节点B10,此时,控制流图变为图7(e)由于控制流图已经抽象成一个节点,说明控制流分析已经完成

经过控制流分析后,可以得到程序的控制树,如图8所示

在图8所示的控制树中,叶子节点是代码划分得到的基本块编号,其他节点是结构分析得到的控制结构信息需要说明的是,控制树展现的是结构化的程序信息,对于非结构化控制流图,无法展示剪下的边的信息,剪下的边被另外保存,在代码生成阶段进行特别处理

2高级代码生成

经过结构分析算法处理后,程序的控制流图便被转换为一棵控制树和一个被剪的边的集合(对于非结构化流图),这棵控制树的每个节点包含以下属性:节点ID、结构类型和所包含子节点信息等,通过这些信息,便可以进行程序的高级代码生成,高级代码生成算法如下:

功能:根据结构分析得到的节点信息生成程序的高级代码形式

输入:节点ID;

输出:该节点对应的高级代码形式

程序前

GenCode(NodeID)

{

根据节点ID找到相应节点CurrNode;

如果节点CurrNode的类型是基本块

2.1)进行该基本块的高级代码生成;

2.2)如果该基本块的后继有剪边的情况,

2.2.1)查找剪下的边的详细信息;

2.2.2)将该边的后继基本块在高级代码生成时加上标号;

2.2.3)该基本块加上跳转到后继基本块的“goto”语句;

如果节点CurrNode类型是高级程序控制结构

3.1)根据控制结构类型,产生高级代码框架;

3.2)递归调用高级代码生成函数,对孩子节点进行高级代码生成,将生成的高级代码嵌入到代码框架中;

返回生成的高级代码

}

程序后

该算法的特点是严格按照结构分析得到的程序控制结构信息进行代码生成,对于剪下的边进行“goto”语句的生成由于结构分析算法完整地提取了程序的控制结构,而代码生成算法也完整地展现了结构分析的结果,从而保证最终生成的高级代码完全体现了汇编代码的结构信息

下面针对上文提到的例子详细描述该算法的执行过程:

从结构B10开始进行代码生成,B10包含结构B1,B9,B8,B7四个子结构依次对这四个子结构进行高级代码生成B1,B7是基本块,首先进行基本块代码生成,然后判断B1,B7是否有剪边处理,若有,则进行“goto”语句生成处理B9,B8为非叶子节点,分别递归调用高级代码生成算法进行处理

当进行基本块B6的高级代码生成时,B6有剪边处理,所以需要额外产生一条“goto”语句,而对于基本块B5,由于有通向B5的边被剪,所以B5需要产生一个标签这样得到的高级代码既保证了与汇编代码的等价性,又最大可能地接近高级代码表示形式本文的例子经过高级代码生成后得到的高级代码形式如下:

程序前

B1.code

while(B2.code)

{B4.code}

if(B3.code)

{if(B6.code) goto L1;}

else{L1: B5.code}

B7.code

程序后

3实验结果及分析

为了对本文的方法进行可行性和有效性验证,从Intel 8051可执行程序中随机选择了10个非结构化程序的控制流图,并利用基于本文所述方法设计实现的反编译器BITDEC对这些流图进行反编译为了更好地说明本文的算法是有效的,利用一款开源的反编译工具DCC对同样的测试用例进行分析,并将实验结果加以对比实验结果如表1,其中“—”表示产生的高级代码没有正确描述汇编代码的结构

通过对实验结果的分析可知,改进的结构分析算法可以完全正确地描述嵌入式代码的程序结构,而DCC方法有4个函数产生的高级代码没能正确反映汇编代码的程序结构和内容由于在对非结构化区域结构化的过程中,采用的是基于规则的处理方式,因此无法保证在所有情况下都剪最少的边,进而产生最少的“goto”语句,这也是为什么图1和图4剪下的边比DCC算法多的原因

4结语

本文在深入了解嵌入式汇编代码程序结构的基础上,分析了现有高级程序控制结构恢复算法的不足,提出了利用编译领域经典的结构分析算法进行嵌入式代码高级程序控制结构恢复的方法,在实现的过程中,针对嵌入式代码的特点,对经典结构分析算法进行了改进,并针对结构分析算法没有很好解决的非结构化区域结构化的问题进行了深入研究,提出了可行的解决方案最后,在结构分析结果的基础上,设计算法实现了高级代码的生成算法通过与开源反编译器DCC的对比,实验结果表明,本文提出的算法是正确和有效的

参考文献:

[1]侯文永,徐志宏.反编译过程中的结构变换[J].上海交通大学学报, 1996, 30(6): 81-84.

[2]赵蕾,王开铸.C反编译控制流恢复的形式描述及算法[J].计算机学报,1998,21(1):87-91.

[3]刘宗田,兰群.C子集程序到C语言程序的变换[J].计算机研究与发展,1991,28(3):29-34.

[4]BOHM C, JACOPINI G. Flow diagrams, turing machines and languages with only two formation rules [J]. Communications of the ACM, 1966, 9(5): 366-371.

[5]ASHCROFT E, MANNA Z. The translation of ‘go to’ programs to ‘while’ programs [M]// Classics in Software Engineering. Upper Saddle River: Yourdon Press, 1979: 49-61.

[6]EROSA A M, HENDREN L J. Taming control flow: a structured approach to eliminating goto statements [C]// Proceedings of the 1994 International Conference on Computer Languages. Piscataway: IEEE, 1994: 229-240.

[7]KNUTH D E, FLOYED R W. Notes on avoiding ‘go to’ statements [J]. Information Processing Letters, 1970, l(1):22-23

[8]OULSNAM G. Unravelling unstructured programs [J]. The Computer Journal, 1982, 25(3): 379-387.

[9]BAKER B S. An algorithm for structuring flowgraphs [J]. Journal of the ACM, 1977, 24(1): 98-120.

[10]CIFUENTES C, GOUGH K J. A methodology for decompilation [C]// Proceedings for the XIX Conferencia Latinoamericana de Informatica. Buenos Aires: [s.n.], 1993: 257-266.

编程和数控的区别篇6

关键词:锅炉监控;无人值守换热站;以太网通讯;Openprocess;应用

        1  应用背景

        哈尔滨市一热网工程改造项目包括集中供热热源厂三台热水炉和8个换热站,总供热面积94万平方米。最远的换热站距离热源厂2公里。

        2  客户需求

        数据采集:监控系统能够采集到包括换热站和热源锅炉房在内的所有运行参数,将之存储在数据库中,并能按一定方式查询。

        实时监视:通过实时显示运行参数和设备状况来监视换热站和热源锅炉的运行状况。

        控制功能:热源锅炉的燃烧控制、定压自动补水控制、设备安全联锁控制,换热站二次供水温度控制、气候补偿控制,自动补水控制,换热站独立工作和远程控制。

        3  解决方案

        监控中心设在热源锅炉房,上位机由3台IBM商用计算机组成(2台操作员站,1台工程师站),内装英文版Win2000操作系统,配备一台行式网络打印机,以打印报警信息和报表。控制设备采用GE公司的DCS系统,其中硬件控制器选用的是PA30和9030系列I/O模块,软件采用OpenprocessTM。换热站的控制器由Versamax系列PLC和触摸屏组成。各个换热站和热源厂之间通过光缆连接,整个网络的传输数据(包括热源厂内的上位机和下位机设备)采用以太网通讯协议。

        热源厂内每台锅炉都设有设有后备手操屏,以保证控制系统出现故障时,运行人员可以进行应急操作以及切换到手动状态继续运行。

        每个换热站中设有光电转换设备和控制箱,结点处设有100M Switch HUB。控制箱设有就地和远程控制转换开关,当转换到远程控制时,可以接受监控中心的指令和参数设定,真正做到无人职守的换热站。光缆环型敷设可保证通讯更加可靠。

        热源厂和换热站的控制器中存有当地地区的供热曲线,实现热源出水温度和换热站二次供水温度的气候补偿控制。换热站的供热曲线可以远程修正。

        4  系统组态

        系统的监控软件采用GE公司的DCS软件。包括PLC编程软件ME 2.6和OpenprocessTM 7.10,上位机组态软件Cimplicity HMI 6.0。ME 2.6对PLC进行硬件设置和梯形图编程,OpenprocessTM 7.10对PLC进行策略图编程。

        4.1 配置PLC硬件

        在用OpenprocessTM 7.10进行控制算法编程之前,要先在ME中配置PLC,包括CPU和I/O模块。主要是通讯端口配置,通讯协议选择,I/O地址分配,以及PLC的其他工作特性设置。

        4.2 在Openprocess中编程

        Openprocess的编程环境(Designer Workbench)界面非常简洁,类似Windows的资源管理器。整个界面分三部分:上面是主菜单,下面是左右并列的两个窗口,左面的是项目目录窗口,按树形目录形式显示一个项目的结构,右面的内容窗口详细显示左面被选项的内容。

        Openprocess编程是以回路为基础的,形式类似组态,操作方法以鼠标拖放为主。

    4.2.1 定义标签

        标签的定义、查找、更改和删除的操作简便灵活。

        对于现场的实际信号,要创建与之对应的标签名。标签名的内容很详细,包括名称、描述、工程值范围、工程单位、信号类型、信号量程、制造商信息、报警信息、级别、死区、高限、低限等。定义好的标签一起分配I/O地址。系统会自动将标签分类,只显示与模块类型相同的标签,便于选择。

        4.2.2 策略图编程

        主要的控制算法的编程是在策略图完成的。策略图编辑窗口分以下几部分:菜单、工具条、图块库和画图区。图块库中包含丰富的功能图块,包括基本的数学、逻辑计算模块,PLC内存访问模块,操作面板模块,时间功能块,其他的如PID、顺序控制等复杂的功能块。每个功能块都有各自的管脚,接入的数据分模拟量和数字量,通过连线(分实线和虚线与之对应)连接。

编程和数控的区别篇7

关键词:沟槽;数控编程;指令;区别

在孔轴类零件加工中,常见退刀槽、圆形沟槽、密封槽等沟槽,槽的结构特征看似单一,但加工的难易程度除了与刀具和零件材料性能有关之外,往往取决于沟槽的深浅和宽窄情况,一般沟槽越深越宽,加工越难。在传统普车上不论手动或自动切槽,刀具走刀基本上不理想,而现在应用数控加工克服了许多问题,但对于数控编程而言,需要考虑的问题是如何选用合适的指令进行编程更加合理、效率更高。本文将通过几种指令对沟槽进行数控编程,比较其中的区别,从而助于我们今后对沟槽的编程。

一、槽加工指令G1的编程应用

1.G1指令含义

G1指令是指刀具以给定的进给速度从当前位置沿直线移动到指定的目标位置进行线性加工的指令。

2.G1加工特点

单向线性运动

3.G1编程格式

G1 X_Z_ F_;

X Z为目标点的坐标,F为进给速度。

4.G1编程应用案例,如图1-1所示

零件结构分析:零件上仅有单一的退刀槽且深度、宽度适当,采用Fanuc系统编程,应用G1编程一般较快捷方便。切槽程序段如下:

G0X40XZ-34

G1X23F0.2

G4P2000

G0X40

X100Z100

M5

M30

从程序中可见,对于单个槽,采用G1编程,程序语句不多,编程简单。

二、槽加工M98子程序的编程应用

1.子程序

在加工程序中,若其中有些加工内容完全相同,为了简化程序,把这些重复的程序段单独列出,并按一定的格式编写成子程序。主程序在执行过程中如果需要某一子程序,通过调用指令来调用该子程序,子程序执行完后又返回到主程序,继续执行后面的程序段。主程序和子程序的组织结构图,如图2-1所示。

2.子程序应用特点

1)零件上若干处具有相同的轮廓形状,在这种情况下,只要编写一个加工该轮廓形状的子程序,然后用主程序多次调用该子程序的方法完成对工件的加工。

2)加工中反复出现具有相同轨迹的走刀路线,如果相同轨迹的走刀路线出现在某个加工区域或在这个区域的各个层面上,采用子程序编写加工程序比较方便,在程序中常用增量值确定切入深度。

3)在加工较复杂的零件时,往往包含许多独立的工序,有时工序之间需要适当的调整,为了优化加工程序,把每一个独立的工序编成一个子程序,这样形成了模块式的程序结构,便于对加工顺序的调整,主程序中只有换刀和调用子程序等指令。

3.调用子程序M98指令

格式:M98P功能:调用子程序

说明:P__为要调用的子程序号。为重复调用子程序的次数,若只调用一次子程序可省略不写,系统允许重复调用次数为1~9999次。

4.编程应用案例,如图2-2所示

此零件的沟槽较多,但形状相同,尺寸大小完全一样,且分布均匀,等距相隔。应用子程序,巧妙地避免了程序重复编写,只需编一个沟槽的加工程序,等距增量定位,这样简化程序,节省存储容量,减少编程时间,减轻编程工作量,便于检查。

三、槽加工指令G75的编程应用

1.G75指令含义

G75是一般应用于外径宽槽或者等距槽断续切削的循环指令。

2.G75指令加工特点,如图3-1所示

断续切削

3.G75指令格式

G75 R(e)?

G75 X(u)Z(w)P(i)Q(k)R(d) F(f)

式中

e―分层切削每次退刀量;

u―X向终点坐标值;

w―Z向终点坐标值;

i―X向每次的切入量,用不带符号的半径值表示;

k―Z向每次的移动量;

d―切削到终点时的退刀量,可缺省;

f―进给速度。

4.G75指令编程实例, 如图3-2所示

此类零件具有外径宽口槽的结构,应用G75编程虽然编程形式上看起来很复杂,但其克服了沟槽加工数据计算的困难,简化了程序,加工过程中由于径向断续切削,这样利于断屑、及时排屑,起到散发热量,减少切槽刀磨损,有效保护刀具等作用。 外径宽口槽加工程序:

T0202M3S500(切槽刀刀宽3mm)

G0X60Z-53.17

G75 R1

G75 X40.2 Z-89.77 P2000 Q3000 F0.1

G0X100 Z100

综合上述,对于不同结构的沟槽,编程指令的采用,我们不应主观盲目地选用什么指令编程,而应于编程之前分析零件中槽的结构特点和要求,根据这些再来选择,从而利于我们实现加工的同时提高编程速度,缩短时间,提高效率,减少成本,增大效益。

编程和数控的区别篇8

关键词:W5500;以太网;Socket;C++;服务器;客户端

引言

随着自动化控制技术的飞速发展,基于以太网的工业控制总线得到了广泛的使用,给工业生产带来了极大的效益,然而主流的现场控制总线成本较高,对维护和使用人员的技术有着较高的要求,这使得一些中小工厂无力享受技术进步带来的红利,于是基于嵌入式系统的集成以太网芯片W5500应运而生。相关技术行业的发展,让基于以太网的运动控制系统变得多元化,有广泛的应用前景和潜在的经济价值,在此基础上研究使用便捷,适应性强,信号传输稳定,低成本的嵌入式以太网接口是非常有意义的。

基于嵌入式的以太网接口以往都采用软协议栈,因此会占用大量的CPU资源,导致传输延迟较高,可连接客户端较少且容易掉线,在这种情况下就需要一种基于硬件协议栈的以太网通信接口来满足控制信号的稳定高速传输。W5500是一款采用全硬件TCP/IP协议栈的嵌入式以太网控制器,它能使嵌入式系统通过SPI(串行外设接口)接口轻松地连接到网络,通过使用W5500,用户只需通过使用一个简单的socket程序就能实现以太网的应用,而不再需要处理一个复杂的以太网控制器了。

1 系统硬件平台

主控芯片采用意法半导体公司的基于ARM-CortexM3内核的STM32F103VCT6处理器作为系统核心,器件有SPI2332,W5500配上一块带电容触摸输入的TFT液晶彩屏。

2 以太网客户机端的搭建

2.1 以太网硬件接口的设计

本控制器通信接口采用W5500方案,将硬件TCP/IP协议栈,MAC层以及PHY层集成到一块芯片里,大大简化了硬件设计,通过SPI通信协议与MCU通信,且对CPU性能要求不高,节省了嵌入式处理器的I/O资源(图1)。

2.2 通信部分软件设计

由于TCP/IP协议栈已经在W5500中实现,MCU只需要配置和读取寄存器的数据即可,程序框图如图2所示。

3 基于socket编程的服务器端功能的实现

服务器是基于Vc++6.0平台开发的,采用的是MFC和Socket套接字编程,Socket的版本为2.0.所采用的通信协议是TCP/IP协议。为了适用于多客户端的连接要求,服务器采取多线程的编程方案,即可以同时响应多客户链接请求事件和数据读取事件[1]。接下来介绍的是服务器的工作流程:

3.1 响应连接请求

启动服务器,首先进行初始化,设置监听端口(监听的端口号为6000)及绑定计算机,无误后开启一个线程等待客户端连接。当一个客户端连接成功后,服务器立即开启一个新线程等待下一个客户端连接,当客户端断开连接后,相应的线程也会随之结束。这样服务器便可以响应多客户端连接了。

3.2 数据区分与转发

不仅仅是PC端要向服务器上传数据,客户机也要向服务器上传设备运行数据,如何来区分和存储这些数据显然是一个头号问题。这里采用的方法是给数据一个“身份证号”ID,每一个设备发的数据具有唯一的ID,这样这些数据到任何一台设备上都能被识别。具体做法在后文中说明。服务器在收到数据后用left()函数取出前两位进行“身份识别”,然后将其存入相对应的数组中,这样便完成了数据的区分存储。数据转发是服务器最重要的功能,服务器收到PC端发来的数据后向下位机转发,服务器收到下位机传上来的收据后下PC端转发。

以上功能的实现还需要用到以下几个函数:

Listen():监听端口;

Accept():用于响应连接请求;

Send():用于发送数据;

Receive():用于接收数据[2]。

还有一些用作数据存储的数组,如csdata[],csRundata[].

3.3 服务器工作流程图(图3)

4 基于socket编程的PC端的实现

(1)PC端是服务器的控制终端,开发平台和技术支持和上面服务器一样,这里不再介绍。PC端的功能是通过连接服务器向下位机传输控制数据。

(2)PC端操作界面(图4):

操作界面一共五个区域。其中三个操作区,操作区一和二都是指令和数据输入区,一共10组。每组的指令都相同,一共有六个,分别是:位移,时间,速度,输入,输出,扫描和跳转;每个指令对应唯一的ID,见表1,默认为空。每个数据为四位,和前面的指令ID组成一个数据块,指令ID在前,数据在后。在发送时,每个数据块依顺序连在一起组成数据链。数据块的个数放在数据链的开头,再加上能够被其它设备识别的帧头和帧尾,形成一个数据包。格式如下:

Ni+A5+number+数据块1+数据块2+……+数据块N+5A

Ni:下位机代号(i=1,2,3…);

A5: 帧头;

Number: 数据块个数;

数据块:指令+数据;

5A: 帧尾。

操作区三是控制区,执行连接服务器和相关操作。还有两个区是显示区,其中左显示区显示软件的运行状况,右显示区显示服务器返回的客户机设备运行数据。

操作界面上的“连接”和“上传”两个按钮分别执行连接服务器和向服务器上传数据的功能。

(3)PC端工作流程图(图5)

5 云端服务器实现

云服务器采用阿里云方案,采用Windows Server操作系统。具体搭建过程:

5.1 租用合适的服务器

进入阿里云首页,选择弹性计算中的云服务器ECS,点击立即购买后选择服务器配置,由于本控制器不需要做大规模的运算,所以选择最为廉价的简约型t1,将服务器地址选为最为便宜的青岛地区,由于简约型t1服务器仅有1核志强E5 CPU和1GB内存,所以在操作系统选项中选择32位的Windows Server 2008标准版SP2 32位中文版,购买后系统会自动安装。

5.2 配置服务器系统

服务器系统安装完成后,在实例详情中点击连接管理终端,输入密码后可以对云端服务器进行操作。首先,为了今后操作方便,在个性化中把计算机,用户文件等常用快捷方式添加到桌面,接着,为了程序不因内存过小而运行不了,在计算快捷方式上右键,点击高级系统设置,选择性能-高级-虚拟内存,将C盘作为托管的系统,然后,为了方便将调试程序传输到服务器系统,在服务器系统中下载安装百度云,至此,服务器系统部分基本搭建完成。

6 服务器与客户机通信协议的制定和实现

根据事先约定:

(1)客户机上传的数据以Di开头,Di结尾(i是客户机号,如1、2、3);(2)PC端上传的数据格式:Ni+A5+数据个数+数据块+5A。(i是客户机号,如1、2、3)。

7 结束语

采用W5500作为以太网接口的运动控制器与云端服务器连接稳定,数据传送延迟低,PC端客户机数据传输顺利,可以及时观测到运动控制器的工作情况。

参考文献

[1]汪晓平,钟军,等.Visual C++网络通信协议分析与应用实现[M]. 北京:人民邮电出版社,2003,2.

[2]梁伟.Visual C++网络编程经典案例详解[M].北京:清华大学出版社,2010,6.

作者简介:贺顺,性别:男,年龄:21,籍贯:浙江省绍兴市,职称:学生,学历:在读本科,南京工程学院,研究方向:自动化。

编程和数控的区别篇9

目前,应用于各种领域和场合的计算机分布式监控系统种类繁多,设计方法和构成方式各不相同,但共同的目标都是朝着高效、可靠和通用方向发展。此外,所设计的监控系统应具有较高的性能价格比也是业内人士的共识。笔者根据多年的开发经验,设计了一种性能价格比较高的适用于中小型的分布式数据采集与监控,运行效果良好。

1 监控系统的构成

某自来水厂按功能分为两部分,一部分是水源地;另一部分是水厂区,二者距离 900m。水源地的任务是通过三台深井泵对水厂区的蓄水池进行供水;而水厂区的任务是对水池的水进行消毒处理后,通过加压泵向市区管路进行恒压供水。

整个监控系统由位于水厂区的上位PC机、主站PLC和水源地的三个从站PLC构成(见图1)。上位PC机通过CP5611MPI卡与主站PLC完成整个系统的现场数据检测、数据处理及计量等工作。主站PLC完成两方面任务,一是水厂区现场数据的采集及市区恒压供水的控制;二是与水源地的三个从站进行通信,完成水源地现场数据的采集与深井泵的控制。

    监控系统的主站和从站PLC都选用西门子S7系列产品。该产品在工程领域应用广泛,尤其是有较强的是有较强的组网能力。S7系列PLC通常有四种组网方式:点对点、MPI多点网络、PROFIBUS和工业以太网。其中PROFIBUS现场总线的应用目前较为普遍,它有较好的通用性,速度达12Mbps,距离达28.5km,相关应用著作也较多。而其它方式如工业以太网方式对硬件要求较高;点对点的速度太慢,都不适合本监控系统。相对而言,MPI网络速度可达187.5Mbps;通过一级中继器可达距离1km。根据水厂的具体情况,我们最后确定了以MPI方式组成网络,主站CPU为S7-300系列的CPU312IFM;从站为S7-200系列的CPU222.这样既满足了系统要求,又相对于PROFIBUS网络节省了三分之一的开销,更重要的是为中小规模场合的分布式监控系统的设计提供了一种较高性能价格比的设计方法。至于中继器的选择,由于PLC的物理层采用RS485接口,所以有很多相关的第三方产品支持。从中我们选用一种带防雷保护的中继器,使系统的安全运行得到了保障。

2 主部PLC控制原理

主站PLC有三个任务:

(1)水厂现场数据采集;

(2)供水管恒压力控制;

(3)水源地数据采集及深井泵远程控制。

以CPU312IMF为核心的主站控制电路如图2所示。

首先,水厂现场数据有7路模拟量,我们选择的AI/AO扩展模块为SM334,它包括4路模拟量输入和2路模拟量输出。为降低成本,我们用2片CD4066模拟开关进行扩展,构成8路AI输入。当AO2输出0V时,选通4066-1的4路模拟量输入;而当AO2输出10V时选通4066-2的4路模拟量。这种分时采集的方法利用PLC编程较易实现。实际应用中,分时操作时间间隔为100ms,各个采集量的含义及内存地址如表1所示。

表1 水厂区模拟量数据

名  称AI地址内存AO2输出(V)含  义电压PIW256MW00变频控制柜电源电压电流1PIW258MW201#水泵工作电流电流2PIW260MW402#水泵工作电流备用PIW262MW60备用流量PIW256MW1010供水流量压力PIW258MW1210供水母管压力液位PIW260MW1410蓄水池液位余氯PIW262MW1610蓄水池水中余氯含量其次,对水厂加压泵的控制采取变频调速技术,以供水母管压力为被控量,实现恒压力控制。水厂加压泵有P1和P2两台,在恒压力控制过程中,根据市政区用水流量的大小变化,PLC要通过数字输出端口Q124.0~3控制两台泵的工作状态。两台加压泵共有5种工作状态,如表2所示。

表2 P1和P2水泵的工作状态

状态Q124.0.1.2.3说   明S11000P1变频 P2停机S20110P1工频 P2变频S30010P1停机 P2变频S41001P1变频 P2工频S00000系统停机5种工作状态的相互转换如图3所示。当然,实际PLC编程时,要根据水泵的工作特点,应利用定时器加入适当的延时,在我们设计的系统中,欠压加泵延时为90秒;超压减泵延时为60秒。

供水压力闭环控制算法,我们采用一种适用于PLC控制的智能PID算法[1]。其原理是,按压力偏差e(k)划分三个区,如图4所示。该偏差变化率为ec=e(k)-e(k-1),PID算法输出为U(k),相应的控制规则如下:

规则1:e(k)>emax,则U(k)=Umax;最大值输出

规则2:e(k)<-emax,则U(k)=0;最小值输出

规则3:|e(k)|<emin,则U(k)=U(k-1);保持区

规则4:emin≤|e(k)| ≤emax,

则U(k)=U(k-1)+k1×e(k)+k2×ec(k)/(k)

式中,k1和k2为系数。PID运算的结果U(k)通过AO1输出(0~10V),送给变频调速器,通过调速加压泵P1或P2达到供水恒压控制的目的。经实验验证,该PID算法效果较理想。

关于水源地数据采集及深井泵控制问题,将在后面通信问题中讨论。

另外,变频控制系统中的故障信号分别通过I124.0、I124.1和I124.2输入PLC中。当故障产生时,系统停机。图5(a)为主站PLC的程序结构。

3 从站PLC控制原理

三个从站PLC都以CPU222为核心,控制电路及结构相同,分别控制三个取水深水泵的运行及现场数据采集,如图6所示。其中Q0.0控制深井泵的运行,I0.0为深井泵过载信号输入端,Q0.1为故障报警输出端。深井的水管压力、深井泵电压和电流三路模拟信号的现场采集通过4路模拟量输入模块EM231实现。程序框图见图5(b)所示。

4 主从站PLC的通信

主、从站PLC的通信主要是完成水源地深井泵的控制及现场数据的采集。在MPI网络中,各节点的地址分别为:PC机为0;主站PLC为2;从站1 PLC为4;从站2 PLC为6;从站3PLC为8。主站通过系统功能函数SFC67和SFC68分别对三个从站进行读和写操作。具体说,主站PLC的M8.0实现深井泵的启停控制,而深井泵的压力、电压、电流和过载故障信号则由主站PLC进行读取。

5 上位PC机编程

编程和数控的区别篇10

关键词:城市轨道交通计算机联锁

考虑到信号工程的技术趋势和经济上的合理性,北京城市轨道交通13号线信号计算机联锁控制系统,采用铁科院开发研制的TYJL2Ⅱ型系统。虽然此系统已在全路400余个站场投入使用,但在满足现有的各项技术条件要求,实现进路上的道岔、信号机和轨道电路的正确联锁关系,确保列车运行安全的同时,还必须进行一系列的改进和完善,以满足城市轨道交通所要求的特殊联锁功能,并实现与ATP系统结合的安全编码逻辑功能。

1系统结构的改进

根据北京城市轨道交通的特点,对TYJL2Ⅱ型计算机联锁的系统结构做了如下的改进。

1.各站通常不设信号维修人员,为了确保系统在监控机或控制台故障的情况下仍能够不间断地可靠运行,将监控机和控制台纳入到了双机热备的覆盖范围之中,使其在故障时可由相应的联锁机申请切换。具体地讲,对站场简单的车站,直接将监控机安装在联锁机柜内,取消联锁总线的切换电路。A监控机和A控制台随着A联锁机的切换而切换,B监控机和B控制台也如此。而对站场复杂的车站,除切换方式同简单车站外,仍采用原有TYJL2Ⅱ型计算机联锁系统的结构,保留联锁总线的切换电路。

2.由于计算机联锁控制系统的操作方式分为控制中心集中控制和车站分散控制,且通常采用中心集中控制方式,因此系统在各站的监控机部分增加了与CTC分机的接口,接收中心集中控制时的命令信息,并向中心发送本站的表示信息,接口采用RS2422双网结构。车站分散控制时,系统采用鼠标式控制台和按钮式单元控制台互为备用的原则进行设计,使操作方式更加方便灵活。

3.为了便于维修,计算机联锁控制系统的采集、驱动电路板均改为6U标准,计算机电源、采集电源、驱动电源和地线检查器改为插接方式。同时,为适应北京城市轨道交通机柜上出线的要求,系统的联锁机柜结构也相应地改为采集、驱动层在上,计算机层、电源层在下。

4.在保持原有TYJL2Ⅱ型计算机联锁系统电路结构不变的情况下,为提高系统的可靠性和抗干扰能力,采取的措施主要包括:提高印制板采用的芯片等级,按5V计算机电路与12V采集、驱动电路分别布线,并且分开设置接插件;在接口架的驱动条件线上增加防雷器件;采集、驱动32芯电缆靠电路板一侧增加抗电磁干扰磁环等等。

2系统特殊联锁功能的实现

由于北京城市轨道交通计算机联锁控制系统增加了诸如自动进路、自动折返、扣车、紧急关闭和轨道区段故障时单独操纵道岔等一系列特殊联锁功能,因此在联锁软件中又增加了相应的模块,具体可分为3类。

1.原联锁软件中没有与其类似的功能,需要建立全新的算法,增加新模块。如,扣车必须确定扣车状态的输入与哪些所要驱动的发车进路的信号控制输出有关;扣车状态的输出与哪些扣车按钮的输入有关。在此基础上建立实现扣车这种特殊联锁功能的算法,并予以实现,完成扣车作业。

2.原联锁软件中有与其类似的功能,可利用原有算法。如,紧急关闭与原有的超限绝缘检查功能非常类似,其技术条件也基本相同。因此,可利用原联锁逻辑模块中的超限检查的算法,在股道的二端分别设置与超限检查模块类似的紧急关闭模块来实现紧急关闭作业。

3.原联锁软件中虽有与其类似的功能,但需对其算法稍加修改。如,轨道区段故障时单独操纵道岔与原联锁逻辑模块中的单独操纵道岔稍有不同,二者的区别在于是否进行区段占用检查。只要在原联锁逻辑模块中的单独操纵道岔模块的算法中,去掉区段占用检查条件,就可以得到轨道区段故障时单独操纵道岔模块的算法。在道岔区段轨道电路故障的情况下,且人工确认该道岔区段无车时,可以采用非常手段实现单独操纵道岔作业。

虽然实现各项特殊联锁功能的模块所采用的算法是不同的,算法的确定也是不同的,但由于原有的TYJL2Ⅱ型计算机联锁控制系统的联锁软件是按照故障2安全的原则设计的,新增加或修改的模块也均按此原则设计,不会影响原有计算机联锁控制系统软件故障2安全性的实现。

3安全编码逻辑功能的实现

北京城市轨道交通计算机联锁控制系统,增加了与ATP系统结合的安全编码逻辑功能,并通过软件加以实现。其软件的数据仍采用按站场图形基本模块链表进行连接的方式,遇有站场改变时只需在相应位置插入对应的模块。程序采用模块化的设计方法,如需增加或改动某个环节,也只需增加或改动相应的模块。

与ATP系统结合的安全编码逻辑软件的数据分为静态数据和动态数据2部分。其中,静态数据包括:与站场结构紧密相关的编码模块的代码、在链表中的位置、其控制特征以及其他必须的信息,如软件运行所需的索引表、控制表等相关内容。就编码模块而言,对于非道岔区段,每1个轨道区段均设有1套速度码继电器和1个编码模块,并入链;对于道岔区段,考虑到道岔区段设有定位发码和反位发码2套独立的速度码继电器,因此也分设2个编码模块。动态数据则是在模块静态数据对应的缓冲区记录模块状态、在程序中当前所处的层,以及程序运行所必须使用的变量等信息。定义了编码模块的数据结构之后,在联锁逻辑运算模块中增加编码逻辑处理模块,可以实现与ATP系统结合的安全编码逻辑软件的技术要求。模块中包含2类程序,一类是不受进路控制的编码模块,另一类是受进路控制的编码模块处理程序,二者的区别在于模块扫描方式的不同,不受进路控制的编码模块处理时按索引表扫描,受进路控制的编码模块处理时按进路管理缓冲区扫描。

与ATP系统结合的安全逻辑编码软件的实现,无论是数据结构还是程序结构,都借鉴了联锁逻辑运算模块在提高软件可靠性和安全性方面的经验。为减少形成危险侧错误输出的可能性,软件采用冗余编码方式,将有关安全的编码信息按不同规则分别存储于不同的缓冲区,使用时需比较一致才认为其有效。同时,软件采用分层递进的网络结构,上一层的错误会被下一层发现,不会由于错误扩展导致系统级错误。此外,软件对可能发生的错误视情况不同,采取不同的方式进行处理。对于数据错误,程序从发现错误层开始终止执行,对已进行的处理采取程序卷回的方法恢复执行命令前的状态,并给出相应的提示。当影响安全的关键缓冲区发现错误后,程序将采取切断输出的措施。对于硬件故障引起的错误,如果硬件故障导致发生的错误是不影响安全的,那么程序将给出报警提示,并将故障可能影响的信息置为安全侧。如果当硬件故障可能导致发生影响安全的错误时,程序将采取停止工作的措施。

4结束语

北京市城市轨道交通计算机联锁控制系统是国内城轨领域首次采用国产计算机联锁设备。由于联锁控制系统在性能等方面具有强大的优势,改进后的系统结构更为合理,特殊联锁功能的实现方式安全可靠,并成功地增加了与ATP系统结合的安全编码逻辑功能,完全满足了现场运营的实际要求,因此,在运营期间,信号系统以运营状况稳定、性能安全可靠、维护便利,获得了用户的认可,并在提高作业效率,改善劳动条件等方面收到了良好的使用效果。

参考文献

1张庆贺.地铁与轻轨〔M〕.北京:人民交通出版社,2002.

2何梅芳,段武,开祥宝等.TYJL2Ⅱ计算机联锁控制系统研究报告〔R〕.北京:铁道科学研究院,1997.