西安西门子中国代理商交换机供应商
  • 西安西门子中国代理商交换机供应商
  • 西安西门子中国代理商交换机供应商
  • 西安西门子中国代理商交换机供应商

产品描述

产品规格模块式包装说明全新

西安西门子中国代理商交换机供应商


1  引言
    洁净室空调监控系统广泛应用于医疗、生物、试验室、电子、温室、办公大楼等场合,以监控其室内的温度、相对湿度、相对大气压、风量、尘、菌及有害气体的浓度等相关参数及指标。早期空调的控制设备多为就地式控制器或ddc控制器,控制功能简单、不易联网及信息集成度不高等缺点。随着计算机技术、控制技术和网络技术的发展,现在的空调系统都倾向于采用、实用、的可编程控制器(plc)来进行控制。提高空调系统的经济性、性及可维护性。

2 工程概述及电气控制要求
    本工程应用于大型生物制公司的生产车间及温室。生产车间按功能分为12个(p2洁净等级9个,p3洁净等级2个,共公水系统1个), 温室4个。考虑到各个生产车间的电气室在地理位置布较散,为便于布线及维护,要求每个生产车间均用一套立的plc控制系统。每个生产车间的运行参数及实时数据要在本地及控制室中设定与读取。每个温室的运行参数及实时数据要在本地及控制室中设定与读取。p2、 p3洁净等级的12个系统均可设定控制温度、湿度、负压;4个温室可设定控制温度、湿度。两个p3洁净等级的系统需具备两个或以上的本地数据设定与监控;控制系统要求节能。

3  用haiwell(海为)plc的实现方法
    因各个系统的位置较远,为便于布线及安装,每个生产车间(电气控制室)使用1台海为plc;负责对现象各种信号的采集与处理,同时据设定的各种工作参数对现场的执行机构(如电机、阀门、泵等)进行输出控制,以达到的控制效果。
    为实现可在本地设定及读取数据,每台plc主机挂一个人机界面,两者之间用rs-232或rs-485相联进行通讯;4个温室因信号输入输出比较简单,只有模拟量的输入(温度与湿度的实时值)与输出(风阀的比例调节),考虑到相对距离较远,为节省成本,选用海为plc的模拟量扩展模块作为远程io,用rs-485通讯连接方式与之相近的plc主机相联接(或直接与上位机相连),通过plc主机以通讯方式将当前实时数据读出及控制远程模块模拟量输出给执行机构。
    对于两个p3洁净等级的系统因需具备两个或以上的本地数据设定与监控,所以将两个人机界面以rs-485连接方式组成一个rs-485网(一台人机界面作为主站,其余的作为从站),作为主站的人机界面与haiwell(海为)plc主机的rs-232(com1)口或扩展通讯模块进行通讯,以达到多个本地设定与监控的目的;在本系统中,要达到节能的效果,除在工艺控制上进行合理的处理外,在系统硬件配置上,风机、泵的驱动执行机构可采用变频器。
变频器的开关可用plc的do进行控制,而其运转的频率可用haiwell(海为)plc的模拟量输出信号或直接用plc与变频器通讯的方式进行控制;因各个车间的电气控制室(plc)相距较远,且距监控室距离很远,各个plc主机通过rs-485的组成一个rs-485子网与位于监控室的计算机(上位机)进行通讯,达到从远程对各个控制系统进行监视与控制的目的。
控制系统架构示如图1所示。

图1  海为plc空调控制系统架构

4  通讯方面的编程
    从上面的示意图可看出,plc所涉及到的通讯比较多:plc即要与人机界面、变频器、远程io通讯,还要与远程上位机进行通讯,每种设备的通讯还要非常即时,否则将影响实际控制的效果,对于此类控制系统,plc的通讯能力及对通讯方面编程的方便性是至关重要的。
4.1 plc与人机界面或上位机的通讯
    haiwell(海为) plc与人机界面或上位机的通讯实现(rs232或rs485):因海为的每种机型的plc主机、扩展通讯模块、模拟量扩展模块均内置有modbus rtu/ascii协议,所以只要利用相应人机界面的界面编程软件编写要进行监控的画面及数据(在该数据的属性定义窗口中填写plc寄存器或位相应modbus通讯地址)后,下载到人机界面中运行,即可实现plc与人机界面的通讯,而对plc进行编程。
4.2 plc与变频器的通讯
    haiwell(海为)plc与变频器实现、远程io的通讯实现:因海为plc作为主站,所以要在程序中编写通讯的控制程序。实现起来很简单,只要利用一两条modr和modw指令即可实现,象什么通讯中断、通讯标志位、级、数据的收发等,属于通讯底层而又难于理解与掌控的东西全由haiwell plc自己统一处理与完成操作,编程人员只要关心发送前的数据准备及接收到数据后从接收数据的寄存器中取出数据进行处理,大大降低了编程与调试的难度,提高编程效应,简化了程序;现就与台达变频通讯加以说明,通讯程序如图2所示。

图2   plc与变频器通讯程序

    haiwell(海为)plc模拟量扩展模块与上位机的通讯实现:haiwell(海为)plc模拟量扩展模块也与haiwell plc主机一样,内置有modbusrtu/ascii通讯协议,上位机作为主站,模拟量扩展模块作为从站,不需要对模块进行其它的程序处理。

5  结束语
    利用haiwell(海为)plc便利的通信功能及强大的通讯扩展能力(一台plc大可达5个通讯端口,每个通讯端口均可用于编程与联网通讯监控),轻易、经济的实现了与各种外部设备的通讯(计算机、变频器、人机界面、远程io模块),使生产过程中的数据能快速实时地传送到本地或远程监控,实现了信息的集中处理与分散控制及数据的共享。
利用haiwell(海为)可编程控制器(plc)的模拟量扩展模块的串行连接功能,可作为远程io,对模拟量的采集量与控出量要求很多的情况,轻板实现无限制点的扩展,大地提高了控制系统的配置灵活度及日后的控制扩展能力,减少了模拟量信号的布线量,同时也减小了因模拟量信号线过长带来的干扰问题,节省工程投资成本。


4.2 丰炜plc应用
    丰炜vb1系列plc是专为高速输入及定位控制应用而设计的控制器。在高速输入功能方面,除了具备原有的vb-plc家族的外部中断输入、速度侦测及c235~c255软体高速计数器外,增加了两个硬体高速计数器(hhsc)。这两个硬体高速计数器不但计数频率高达ab相200khz,而且具备硬体比较中断功能,可完成精密之定位控制。在速位控制方面,vb1-plc提供了4点高速脉冲输出,可同时执行4个立轴定位控制。其中,y0及y1输出点可输出20khz脉冲,y2及y3输出点可输出高达200khz的脉冲。在多轴定位控制之应用场合可发挥之经济效益。
    该系统用丰炜vb1系列plc通过485通讯控制变频器(主轴)旋转,通过编码器的反馈测算主轴速度,进而算出从轴速度,通过改变脉冲输出频率达到控制伺服旋转速度的目的,保主轴和从轴的同步。在光标跟随时,检测光标信号和编码器原点的相对位置,进而计算出位置误差,在特定的位置通过改变特定时间段的频率来调整位置。
4.3 系统开发难点
    (1) 该系统的伺服大脉冲输出要180khz左右。一般plc的输出频率是不够的,这里用丰炜的vb1系列正是体现出它的处理速度快,输入输出频率高等特点。
    (2) 在该系统中,系统的停机位置,调速位置都需要特定的位置,这一点用丰炜plc的高速比较中断可以很好的实现。
    (3) 该系统需要主轴的速度,用丰炜plc的测速指令spd可以很方便的实现。
    (4) 为确保精度,所有运算均采用浮点数运算。
    (5) 该系统在后包装袋切断时采用机械传动,这样在跟随调整时如果调整量过大就可能从中间将包装袋切断,造成漏料。所以,需要设定大调整量即调整周期(可修改)。为保响应,在偏差大的时候进行大量调整,同时为保证精度防止抖动及干扰在偏差小时将偏差量做除法细分逐渐调整。
    (6) 由于该系统在跟随调整时,光标相对位置可调整,这样就可能出现在调整过程中检测到光标信号的情况,这样计算出来的相对位置就是不准确的,去掉。同时,如果去掉一个检测点就可能造成调整周期加长的情况,满足不了快速响应。所以,在出现这种情况的时候对前次调整后的余量进行计算,来判断这次是否需要调整以及调整的大小。
    (7) 由于该系统是通过两轴速度的一种同步达到生产要求,所以两轴速度的及稳定性对系统精度的影响很大。由于伺服是pid调节输出,输出速度曲线有些波动,通过对伺服参数的调整可以尽量减少曲线的波动,达到客户的精度要求。

5  结束语
    该新型包装机械借由plc加伺服的系统替代现在普遍存在的单片机加步进的系统,使得包装速度由传统的50-60袋/分提高到了70-140袋/分,并将包装精度由传统的±2mm提高到了±0.5mm。经现场实际应用,精度高、响应快,可实现稳定正常工作。通过丰炜vb1系列plc在包装机上的应用,充分说明了vb1系列plc处理速度快,输入输出频率高,等优点. 业内人士认为,未来包装业将配合产业自动化趋势,在技术发展上正朝着机械功能多元化;结构设计标准化、模组化;控制智能化;结构化等几个方向发展。罗升公司希望为提高我国包装机械的自动化程度作出大的贡献。


    自动贮存使能端固定接低电平, 因此,x9511在掉电时不执行自动保存,每次上电后vw回零。

4  设计中的几个问题
    用数字电位器构建d/a转换接口,简单实用,但也有几个问题在设计过程中需要注意:
4.1 分辨率  
    分辨率是d/a转换单元的重要技术指标。数字电位器用作d/a电压转换器件时,分辨率是施加在电位器两固定端的电压除以其电阻阵列的电阻数。本例中vh与vl间电压为5v,电阻阵列的电阻数为31,则d/a转换的电压分辨率为5/31v。从上面的分析可知,x9511的d/a转换分辨率仅相当于5位d/a转换器,分辨率较低,只适合应用在调节精度要求不高的场合。要提d/a转换分辨率,选用抽头数高的数字电位器。目前已有256、1024抽头的产品。
4.2 自动存储功能的选择  
    在工业控制系统中,机械式电位器是一个常用的电子器件,常用作模拟量调节。但在实际应用中也一直有个无法解决的难题,即设备开机时若电位器不在零位就会产生一定的冲击,甚至引发事故。数字电位器分易失性和非易失性两种,区别在于芯片是否能在掉电时自动保存滑动端的位置并在下次上电时自动恢复存储数据。采用数字电位器作d/a转换单元时,选用易失性数字电位器或将数字电位器设定为非自动存储状态,可有效避免冲击性启动。
4.3 端点电压
    端点电压就是加在数字电位器两固定端的电压。数字电位器与传统的d/a转换器不同,其输出量不是电流或电压,而是电阻变化值。数字电位器作d/a电压转换器,变化的是滑动端的分压值。因此,端点电压性能的好坏直接影响d/a转换的输出,在设计时应予以考虑,尽量利用已有的基准电压源。本例中的端点电压取变频器的频率设定用电源。
4.4 抗干扰能力  
    数字电位器的输入是串行脉冲数字信号,输出是模拟信号,相对而言输入端的抗干扰能力强。使用时将d/a转换单元就近连接或直接安装在被控模拟调节装置上,缩短模拟信号的传输距离,可有效提高转换电路的抗干扰能力。

5  结束语
    数字电位器是为了克服传统机械式电位器滑动片磨损、数字接口性能差等不足而推出的一种新型电子器件,目前多应用于智能仪器仪表、消费类电子产品等领域。本文利用数字电位器x9511设计的plc模拟量输出接口,实现了plc数字信号的模拟转换。选择非自动存储状态使d/a转换单元具有上电输出自动回零的功能,有效解决了传统机械式电位器设定的启动冲击问题。另外,结合器件特点而采取的抗干扰措施提高了接口电路的性。实际应用表明这种方案不但,而且还简单实用,性高。


202202221739073176584.jpg20220222173907301904.jpg202202221739072455394.jpg



1  引言
    在变压器传统的干燥方法是将器身置于真空干燥罐内,采用pid控制器控制罐内温度,热源采用蒸汽。加热的同时抽罐内真空,不同电压等级的变压器对真空度要求是不同的[1],例如110kv等级的变压器罐内真空度达到133pa以下。在这样的条件下,加热阶段是在有氧条件下进行的,容易造成绝缘的老化,在高真空阶段,加热靠辐射,缺乏热对流,加热效率低,同时容易造成绝缘表面干燥过快,以至毛细管萎缩,影响绝缘深层水分的蒸发,后只能靠延长干燥时间来保证水分蒸发,这样又加剧表层绝缘的老化。同时在加热过程中,由于真空度的变化,pid控制器的参数难于整定,又由于罐的体积很大,造成温度的滞后,终造成温度的调。因此针对上述问题,本文提出采用变压法代替原有的真空干燥方法;pid控制器采用智能自整定系统;执行器采用西门子plc,人机界面采用工控机平台下的组态软件;针对产品质量的,提出三段法的终点判断法。对改造前后系统运行效果进行比较,结果表明,改造后能有效改善系统的动态品质,提高抗干扰能力,减少干燥时间,提高产品质量。

2  变压法干燥系统器的设计
2.1 理想的变压法系统模型

    理想的变压法真空干燥系统内部的真空度与温度的曲线如图1所示。

图1  理想的变压法模型

    整个干燥过程分为4个阶段:
    (1) 预热阶段,此阶段罐内处于低真空,罐内压力在80kpa至40kpa之间变化,以确保水蒸汽处于不饱和状态,排除了水蒸气在铁心表面冷凝的可能性。此阶段铁心温度上升到72℃,可排除变压器35%至45%的水分;
    (2) 过渡阶段,罐内真空度逐级降到10kpa;
    (3)主干阶段(变压器脱水阶段),抽真空一段时间(15min),关闭主阀一段时间(15min),抽真空时,将脱出的水蒸气抽走,此时真空度上升而温度下降,关闭主阀时,绝缘层中水分又蒸发出来,使真空度降低,水蒸汽又参与热对流传热,使器身温度上升,此阶段排除变压器45%至50%的水分;
    (4) 终干阶段,当主干阶段真空到0.5 kpa时,进入终干阶段,终干结束压力随变压器电压等级而不同。
2.2 真空系统的设计
    真空系统主要由各种阀及抽真空的旋片泵、罗茨泵等构成,如图2所示。

图2  真空系统原理

    在干燥罐真空系统中,总气动挡板阀的作用是控制罐体抽真空的启停,系统若靠频繁启停泵来控制抽真空的启停,将对泵造成很大冲击,严重影响泵的寿命;总充气阀的作用是运行中充气和干燥完毕解除真空;旋片泵的作用是获得低真空;罗茨泵的作用是获得高真空,但罗茨泵不能单使用,配置前级泵(如旋片泵),以获得预真空;冷凝器的作用是将抽出水分冷凝,以避免润滑油乳化。
2.3 执行器的设计
    plc的设计主要包括数字量输入和输出,模拟量的输入和输出。数字量的输入主要包括:现场按钮旋钮状态、限位开关位置、阀的状态反馈、现场冷却水有无的检测等;数字量的输出主要包括泵和阀的控制、各种报警指示等;模拟量的输入主要包括温度的、真空的;模拟量输出主要是蒸汽阀门开度的控制,用以控制罐内温度。其总体结构如图3所示。

图3  可编程控系统原理

2.4 人机界面的设计
    人机界面的硬件平台采用了研华ipc-610h工业计算机,组态软件[2]采用国内的力控组态软件,通讯采用rs-485总线,计算机的com口通过转接器与plc的485口相连,兼作通讯和编程用。人机界面的结构形式如图4所示。

图4  人机界面

    在初始画面下,登录,否则其他选项不能;如果是管理员登陆,还可以管理用户;进入自动后,选择相应的工艺参数,点击开始后输入工作号等自动开始,此外,系统还可查询工作、历史曲线、数据报表等历史记录,以便于管理。

3 研发难点分析及解决方案
3.1 真空的检测
    事实上,任何传感器在从大气压到几pa量级的高真空全程检测都是非常困难的[3]。选定的传感器ttr91s满足函数:u=c+1.286log10 p, 其中p为气压,c为常数6.143, 使用中发现,在大气压至40kpa的范围,因为检测数值是指数函数,使用滤波等技术手段都无法数值的抖动,后采用分段线性化了抖动。
3.2 pid参数的整定
    对干燥罐的温度采用pid控制,由于罐内真空度是实时变化的,这样就造成传热介质的不稳定,pid的参数难于整定,加上罐的体积大(400m3),通常会造成调。在实践中采用西门子plc[4]的自整定控制,可以得到合理的参数(如图5所示),因此有效地解决了调问题。

图5  pid整定控制面板

3.3 终点判断
    对于干燥终点的判断,传统的干燥方法只能是通过经验时间的数值大小来判断。本文所提出的变压法使用的是三段法,在终干阶段完成后,再连续抽两个小时,时间的长短可以通过参数调整,记录此时真空数值,停止抽半个小时后,记录水蒸汽的分压,连续三次,如果水蒸气分压递减则产品合格,否则重新抽真空判断。
    系统改造后即投入使用,根据改造前后的系统特性,以及投入以来的实际效果表明,人机界面加plc的运行模式较人机界面加计算机板卡的方式运行稳定性明显提高。采用pid自整定后,温度调的现象了,终点判断程序投入后,操作者的劳动强度明显降低,整个过程不用人工干预,变压器干燥充分,平均干燥用时减少了5至10小时。

4  结束语
    采用分段变压法对变压器的器身进行干燥,较之原来的恒压干燥及热风循环干燥有明显的优点:,由于干燥时间的减少,以整个干燥系统的功率以50kw计算,每干燥一罐就能节约电250kwh~500kwh,因此具有很高的经济和社会;其次,干燥程度明显提高,变压器的质量明显提高,使用寿命明显延长;后,整个干燥过程几乎不用人的干预,降低了操作者的劳动强度,自动化水平得以提高。


1  引言
    道岔作为铁路线上的重要设备,其设备的状态直接关系到列车的运行,通过转辙机动作电流监测,可有效的分析道岔的运行状态,为设备的维护和检修提供依据,以确保设备的完好和列车行驶。
    转辙机是道岔的驱动设备,转辙机的动作电流直接反应道岔的动作阻力。因此,在转辙机动作过程中,通过对其动作电流的采集和分析,了解道岔的工作状态,及时发现设备故障隐患。对道岔进行状态检修,减少了检修和维护对行车的影响,而且延长了设备的使用寿命,尤其是当道岔动作发生故障时及时发出报警,及时发现故障点,从而提高检修和维护的速度及质量,对于列车的运行发挥了重要作用。
    由于所采集的相关模拟量和开关量均由轨道现场返回的信号,因此,监测系统对于性和抗强电冲击-防雷特性具有很高的要求。以omron可编程控制器plc作为轨道转辙机动作电流监测系统的采集机不仅使系统具有很高的性,而且其标准的梯形图编程语言,也提高了系统的可维护性和可扩展性。

2  系统设计
    系统基于omron的cs1系列plc设计。转辙机动作电流监测系统结构如图1所示,系统中由plc的di模块采集与转辙机动作过程相关的开关量,转辙机动作电流经电流盒采集;通常一个站有几十台(道岔)转辙机,大站甚至上百台,每8台转辙机的电流信号接入一个信号切换电路,切换电路的输出接入plc的ad转换模块,即每8台转辙机电流信号为一组,占用1个ad转换通道。切换电路由plc的i/o模块控制。plc的cpu模块对所采集的电流数据进行预处理、暂存,再由模块将至上位机,终由上位机对数据进行分析、管理、显示、报警。

图1  监测系统结构示意图

2.1 转辙机动作电流的数据采集


图2  采集流程图

    作为随机事件转辙机动作电流的为中断型采集过程,转辙机的动作由一启动继电器控制,一启动继电器状态由i/o口,并对所采集的数据进行分析,以判断该时刻动作转辙机的编号及同时有多少台动作。转辙机动作时通过plc相应i/o口控制信号切换电路,立即并持续采集其电流数据。图2为转辙机动作电流采集流程图。由于每8台转辙机为一组,因此采集过程可分为以下情况:
    (1) 一台转辙机动作:此时只需将每次的采集数据依次存入该转辙机数据区相应的一个单元即可。由于plc的ad转换周期较长,采用非同步方式转换时,每次需10ms,因此每个数据代表该时间段的电流,因此每个数据不仅表示电流的大小,同时也包含相应的时间特性。
    (2) 二台转辙机动作:当兼顾二台转辙机电流采集时,相应的采集周期延长了一倍,为保证数据的时间特性,将每次采集的数据同时存入二个单元。如图3所示。

图3  数据存储图

    (3) 三台转辙机动作:与上述情况相似,将每次采集的数据同时存入三个单元。
    (4) 四台转辙机动作:若此时同时采集四台转辙机的动作电流,其采集周期将出相关规定,因此,在转辙机分组时已兼顾考虑,在同一组中四台同时动作的概率非常低,但若发生有四台动作时,程序中将后动作的转辙机屏蔽,即该转辙机在此次动作过程中即使其他三台转辙机动作结束,使同时动作的台数小于四台,为保证过程数据的完整性不予采集。
2.2 数据拟合
    当转辙机动作的台数大于一台时,电流数据包括有重复填写的数据,若不对重复填写的数据进行拟合处理,上位机依据数据绘制电流曲线图时,将呈现马赛克效果。因此,对重复填写的数据进行拟合处理。由于plc所提供函数有限,因此,程序中只能对数据作线性拟合。以n=3时的数据为例,由于采集周期须填写3个数据:dn1、dn2、dn3,dn-1为dn1的个数据,dn+1为dn3的后一个数据;分以下3种情况讨论:
    (1) dn1为实际采集数据,dn2、dn3为重复填写数据;
    若不作线性拟合,则:
    dn1= dn2= dn3;
    若作线性拟合,则:
    dn2= dn1+ (dn1- dn-1);
    dn3= (dn2+ dn+1)/2;
    (2) dn2为实际采集数据,dn1、dn3为重复填写数据;
    若作线性拟合,则:
    dn1=(dn2+ dn-1)/2;
    dn3= (dn2+ dn+1)/2;
    (3) dn3为实际采集数据,dn1、dn2为重复填写数据;
    若作线性拟合,则:
    dn2= dn3+ (dn3- dn+1);
    dn1= (dn2+ dn3)/2;
    由于在进行线性拟合时应尽量依据实际采集数据,只有在采集过程中方便对实际采集数据,即通过plc在对转辙机动作电流采集过程中对相关数据进行修正。上位机程序对转辙机数据进行分析时,着重分析持续电流的平均值及动作持续时间,因此修正的目的在于使相关曲线在外观上为光滑。
2.3 数据缓冲区的管理
    根据铁道部相关规程,对转辙机电流的采集持续时间和采集周期都有严格的规定。为了准确描述动作电流的变化全过程对电流的限制在30ms。通常单动岔的动作过程约为4秒,双动岔的动作时间约为8秒。因此,一台转辙机动作一次的电流数据单动岔为400,双动岔为800;另一方面,一个中型车站约有40台道岔,大型车站约有100多台道岔。若为每一台转辙机保留一个专属数据缓冲区(单动岔为400个字,双动岔为800个字),则需要几十“k”的数据寄存器,显然一般的plc难以提供如此大的容量,同时也是没有必要的,因为道岔动作的次数是有限的,同一个车站内多只有几台道岔会同时动作。因此,程序中设置了一个公共数据缓冲区,缓冲区采用环形结构,由10个子缓冲区组成,(子缓冲区的数量可根据车站的规模调整);其中每个子缓冲区占用400个字,单动岔动作时占用1个子缓冲区,双动岔动作时则占用2个子缓冲区


 引言
    可编程控制器(plc)广泛应用于机电一体化、工业自动化设备的开关量控制。随着微电子技术的发展,嵌入式plc在现代数字化控制系统中的应用日益发展。嵌入式plc借助数控系统的硬件平台,用软件的方法实现标准硬件plc的基本功能,提高了数控系统的开放性,降低了数控机床成本。实现对plc编程语言的的编译是研制开发嵌入式plc系统的一项关键性任务。
    传统的开发方法是用语言自行开发的plc指令编译器,需要对每个程序字和程序规则编写识别和相应的处理程序,工作量大、开发周期长,容易产生疏漏,可维护性很差。为了提高软件的开发效率,保证软件质量,增强软件的可维护性,本文基于通用编译工具lex&yacc,设计开发了一种面向三菱功公司fx2n可编程控制器系列的plc指令编译器。

2  编译器总体结构
    编译过程可由一遍、两遍或多遍完成。所谓“遍”,是对源程序或其等价的中间语言程序从头到尾扫描并完成规定任务的过程。每一遍扫描可以完成一个阶段或多个阶段的工作[1]。通常,一个多遍的编译程序比一遍的编译程序占内存少,且整个编译程序的逻辑结构清晰。本系统的编译过程包含三遍,分别进行词法分析、语法分析和代码转换。编译过程结构图如图1所示。

图1  plc指令编译过程结构图

    词法分析,检查是否有拼写错误。在这个过程中不返回标识符,当发现词法错误时,报告错误,继续扫描直至文件结束。扫描结束后,如果在扫描过程中有词法错误,并退出编译。如果没有词法错误时才进行下一步的语法分析。
    语法分析,检查语法错误和逻辑错误。当没有语法和逻辑错误时进入代码转换阶段。
代码转换,将plc指令转化为目标代码。

2  lex & yacc简介
    lex & yacc 是美国贝尔实验室用c语言研制的词法分析程序和语法分析程序的自动生成工具,是目前广泛使用的编译软件之一。lex是词法分析器,yacc是语法分析器,它们可以根据用户提供的词法、语法规范文件自动转化为多种语言源代码,如c或c++等。lex&yacc进行词法、语法分析工作流程如图2所示。

图2  lex&yacc工作示意图


3  编译器的设计与实现
3.1 词法分析 
    词法分析是程序解释的步,是编译的基础。词法分析的任务是:从左到右逐个字符地对源程序进行扫描,产生一个个单词符号,把它作为字符串的源程序改造成为单词符号串的中间程序,用于随后的语法分析。为了有效地实现fx2n可编程控制器系列的plc指令编译功能,本编译器设计的词法分析程序需要完成以下任务:
    (1)建立plc指令字集。三菱fx2n plc指令集基本逻辑指令包括:ld、ldi、and、ani、or、ori、anb、orb、out、set、rst、inv、k、mps、mrd、mpp等。
plc指令的单词符号一般可以分为一下几种:
    ·基本字。如ld、and、or等。
    ·常数。整形数。
    ·注释词。即“;”开始的注释语句和符号组成。
    ·界符。空格或制表符tab
    ·结束词。本系统中为回车换行符。
    (2)给出对应于上述程序字集的lex正规式表达式,并且对应于每条词法规则,编写其被识别时应执行的动作。其中部分lex源程序如下:
     ";".* {/*注释内容不作检查*/}
    [ \t\r]+ {  /*滤掉空格*/  }
    \n {
    if(g_icoding==1) {/*代码转换*/}
    if( g_ilexreturn == 1)  return eol;
    }
    "ld" {
    if( g_ilexreturn==1) return op_ld;
    if(g_icoding==1) {/*代码转换*/}
    }
    …
    "end" { if( g_icoding ==1) { /*代码转换*/ }
    return op_end;
    }
    (3)通过lex plcil.l指令,将lex源程序转换成c语言的词法分析程序yylex。
3.2 语法分析
    与词法分析相比,语法分析要复杂的多,由手工自行开发的语法分析器往往难以出所有的语法错误。本系统利用yacc自动构造了一个lalr(1)语法分析器。
    lr分析法是自底向上语法分析的一种形式,即从左至右扫描和自底向上进行语法分析,且在分析的每一步,只需根据分析栈当前已移进和规约出的全部文法符号,并至多再向前查看k个输入符号,就能确定相对于某一产生式左部符号的句柄是否已在分析栈部形成,从而便可以确定当前所采取的分析动作[2]。根据k值不同,可形成相应lr(k)分析器。lalr(1)语法分析器即向前lr分析器,它通过构造lr(0)项目集并添加相应向前搜索符号而形成。语法分析程序构造具体包括如下步骤:
    (1)分析plc指令程序结构,提取隐藏在指令代码中的结构信息,这种信息往往有操作指令隐含地表达出来,例如:指令or/orb与梯形图中的并联结构对应,而and/anb则与梯形图中的串联结构对应。
    plc指令语句的文法用巴科斯范式描述如下:
    梯形图::= {<梯级>}
    <梯级> ::= <一般逻辑块><输出逻辑块>
    <一般逻辑块> ::= <与逻辑块>
    | <或逻辑块>
    |
    | <一般逻辑块>
    <特殊逻辑块> ::=
    |
    | <一般逻辑块>
    | <特殊逻辑块><一般逻辑块>
    | <特殊逻辑块> 
    <输出逻辑块>::=<单输出逻辑块>
    | <多输出逻辑块>
    <与逻辑块> ::= <一般逻辑块> 
    | <一般逻辑块><一般逻辑块>
    <或逻辑块> ::= <一般逻辑块> 
    | <一般逻辑块><一般逻辑块>
    <单输出逻辑块> ::=
    …
    <多输出逻辑块> ::= {}
    ::= 
    <特殊逻辑块><输出逻辑块>
    ::=
    ("ld"|"ldi") ("x"|"y"|"m"|"c"|"t") <数字>[<注释>]"\n"
    …
    (2) 给出对应于正规文法的yacc语法规则所需的正规表达形式。部分代码如下:
    ladder: rungs s_end  { yyaccept; } ;
    rungs:   /*空规则*/
    | rungs rung ;
    rung : block_logic block_out ;
    block_out  /*输出逻辑块*/
    : block_out_single
    | block_out_multi ;
    block_out_single  /*单输出逻辑块*/
    : s_out
    …
    block_out_multi  /*多输出逻辑块*/
    :block_mps block_mrd block_mpp ;
    block_logic: s_ld  
    | block_and 
    | block_or 
    | block_logic s_inv ;
    block_logic_special /*特殊逻辑块*/
    : s_inv | s_and | s_and s_inv
    | block_logic s_anb
    | block_logic s_anb s_inv
    | block_logic_special block_logic ;
    block_and : block_logic s_and /*与逻辑块*/
    | block_logic block_logic s_anb ;
    block_mps: s_mps block_out /*mps逻辑块*/
    | s_mps block_logic_special block_out;
    s_ld: op_ld ele_num eol ; /*ld语句*/
    …
    (3)设计上述语法规则被执行的语义动作。
    (4)将变量声明、语法规则和语义动作写入yacc源程序plcil.y,用yacc -dv plcil.y指令编译成符合c语言语法的语法分析程序yyparse。
3.3 代码转换 
    在词法分析、语法分析完成后,如没有错误,语法分析程序输出目标代码。本系统的目标代码是plc指令的二进制编码,例如:操作符ld的内部码为 0xff00,元件x的编码为0x01,将操作符的编码与元件编码相加作为目标代码的高十六位,低十六位为元件的编号,指令ld x1的编码为0xff010001。代码转换的过程在词法分析时完成。
3.4 错误处理
    错误处理能力是评价一个编译器好坏的一项重要性能指标。错误报告应该对可能的错误给予尽可能多的详细资料。为了提供尽可能多的错误信息,本系统在出错处理中采用以下方法:
    (1)在词法分析过程中遇到错误时并不停止检查,而是出错信息后继续进行词法、以便发现多的拼写错误。
    (2)在语法分析时将错误分为两种:
    非逻辑错误:如元件设置错误、指令操作码正确但指令不完整等错误。这一类错误指令已经指出操作类型,不影响后续的逻辑检查。对这类错误的处理是报告错误后继续进行编译,这样可以减少错误级联,并能准确地报告错误的性质。
    逻辑错误:指令的操作内容不符合逻辑规则,这类错误由yyparse调用yyerror()报告错误并结束编译。
    (3)设计详细的报错信息。错误信息包括内容包括行号,行内容和错误类型。
    部分错误处理的代码如下:
    词法分析时,非法字符检查通过lex源程序后一条规则来实现:
    [a-za-z0-9]+ |
    . {
    fprintf(g_pfileerror,"%d:%s\n%s%s\n", g_ilinenum, g_clinebuf, "未知字符:",yytext);
    }
    在语法分析时通过设置错误陷阱俘获非逻辑错误,示例代码如下:
    s_ld: op_ld ele_num eol 
    | op_ld eol {
    fprintf( g_pfileerror, "%d:%s\n%s\n", g_ilinenum, g_clinebuf, "元件设置错误");
    }

4  结束语
    使用lex&yacc设计开发plc指令编译器,只需要描述词法规则、语法规则和动作语句,就可以自动生成词法分析器和语法分析器,大大提高了开发效率和代码的可维护性。虽然文中的指令代码只针对三菱功公司fx2n可编程控制器系列,但只需对lex源程序稍作修改即可适用于其它厂商的产品,而语法分析程序则不需要改动,具有良好的目标系统适应性。




http://zhangqueena.b2b168.com

产品推荐