News And Information
-技术与支持-
微信公众号-关注紫金桥
了解软件最新资讯
当前位置:首页 >> 技术与支持 >> 常见问题
销售热线:
400-678-6601
售后热线:
13304891586
0459-8151391
0459-8151518
如何使用累计点 
如何使用累计点 
如何使用累计点
  本文包括:累计点概述,建立一个累计点,使用累计点的一个示例
  累计点概述:
  在实际生产过程中我们经常要遇到一些信号,如管道流量信号,电表的瞬时功率信号等等,与其它等信号不同的是,我们不仅仅关心瞬时信号,更重要的是其累计信号。如某管道一天的累计流量、某单位一天的用电量等,因为这些信号才能更真实的反映其生产、消耗情况。累计量是瞬时量按时间标度进行累加,或者说是瞬时量对时间的积分。
  累计点参数:累计点通过对测量值(PV)进行时间累计,计算累计量(TOTAL)。它包含下列参数:
  测量值(PV):需要进行累计的量。如流量信号等。
  累计量(TOTAL):累计计算的结果。
  时间基(TIMEBASE):计量单位的时间单位,以秒为单位。如某流量计量单位是吨/小时,则时间基是3600;如是吨/分钟,则时间基是60;如果计量单位是吨/秒,则时间基是1。它表示是计量单位的秒数。
  小信号切除开关(FILTERFL):有时由于测量信号的误差,如在现场阀门已经关闭的情况下,此时流量表中还存在一个小信号,由于是对时间的长时间进行累计,如果不把干扰信号除去,长时间的累计会带来很大误差。该参数表示是否切除小信号。
  限值(FILTER):如果进行小信号切除,低于限值的测量值将被忽略不计。
  复位(RESET):累计量清零。如果此参数从0变成1,则累计量复位变成0。
  停止(STOP):停止累计。如果该参数从0变成1,则停止累计。
  累计点的建立:
  从组态环境的导航树上选择“数据库/点组态”,进入到数据库组态,新建一个点,点类型选择为累计点即可:
  

  
  点击继续,进入到累计点组态:
  

  
  累计点的应用实例
  需求介绍
  1)每次装一罐,每罐的装重重量可以设定。现场准备完成后,按启动按钮,自动开始装车,到指定重量自动关闭进料阀。如果发生紧急情况可以手动关闭进料阀。
  2)可以按批次装车。如某客户一次需要装车20吨,应该装400罐,则可以连续装车,连续计量。
  3)现场进来的信号是流量信号,要计算机进行流量计算。
  系统简介
  1)工作流程简介:首先设定用户装车总量,单罐重量,准备装车。到现场准备罐,准备完成后,按下启动按钮,由计算机控制打开罐的入口电磁阀,自动装车。如果装到用户规定重量或已经装到罐的重量,计算机自动关闭电磁阀。如果还没有装完,则继续装车,如果已经装到设定重量,则按下启动按钮,系统提示装车完毕。
  2)计算机简介:通过板卡跟上述信号接入/接出计算机。注意由于板卡在没有信号时模拟量输入可能产生比较大的零漂,因此不装车时要把停止累计,否则要产生很大误差。
  3)IO位号介绍:
位号
类型
功能
Start
数字量IO点
启动按钮,按下该按钮启动电磁阀开始装车。为0时表示没有按下,为1时表示按下。
Stop
数字量IO点
电磁阀控制开关。为0时电磁阀关闭,为1时电磁阀打开。
Alarm
数字量IO点
报警提示。为0时不报警,为1时现场报警,提示操作工已经装车完毕。
LIC100
累计点
测量值连接装车管线的流量信号(公斤/小时),其累计值是当前正在装车的罐已经装的重量。
??? 4)内部位号:
位号
类型
功能
PreTotal
模拟IO量
预先设定总装车量,以公斤为单位
UnitWeight
模拟IO量
单罐重量,以公斤为单位
Total
模拟IO量
实际已经装车量,以公斤为单位
组态过程:
  1)设备组态:组态一个IO设备,跟实际的板卡设备连接起来。如果没有实际的IO设备可以用紫金桥提供的仿真驱动代替。进入组态环境,选择导航树的“数据库/设备驱动/仿真仪表/紫金桥/仪表仿真驱动”,新建一个驱动名为IODEV:
  
  
  2)点组态,建立上述所有的IO点和内部点。
  3)建立数据连接:
位号
连接设备
Start.pv
地址0的常量寄存器
Stop.pv
地址0的液位控制寄存器的入口阀
Alarm.pv
地址1的常量寄存器
LIC100.pv
地址0的液位控制寄存器的液位
  
  如LIC100.pv数据连接如下:
  
  4)动作控制,该过程要完成两个控制过程:
  首先,在按下启动按钮时,如果已经装车重量还没有到预设定重量,则开启电磁阀,开始装车。如果已经装完,则启动报警提示。用数据改变动作,在组态环境中导航树中选择“数据库/脚本/值改变”,进入到组态:
脚本如下:
if start.pv == 1 then//如果是按下启动按钮
if(total.pv < PreTotal.pv) then//如果还没有装到指定重量
stop.pv = 1;//启动输入电磁阀
LIC100.Stop = 0;//启动累计
else
Alarm.pv = 1;//启动报警
endif
endif
  其次,如果在装车,还需要定时对装车量进行检查,看是否:当前罐添加量已经到一个罐的最大重量或总装车量已经到达预先设定重量。可以使用数据库全局脚本实现,在组态环境中导航树中选择“数据库/脚本/全局”,选择程序周期执行:
  
脚本如下:
if (Stop.pv == 1) then//如果正在装车
if(LIC100.total >= UnitWeight.pv?
|| LIC100.total+Total.pv >= PreTotal.pv) then
//如果已经装满一罐或已经达到预设定装车量则
Stop.pv = 0;//关闭电磁阀
Total.pv = total.pv + LIC100.total;//把当前累计量计入总装车量
LIC100.reset = 1;//清0
LIC100.reset = 0;
LIC100.Stop = 1;//停止累计
endif
endif
  5)画面组态:在画面上画出相应图元并组态对应动作,其运行结果如下:
  

组态的动作如下:
图形对象
动作
预先设定装车量输出文本
模拟输入/输出动作,变量:PreTotal.PV
单罐重量输出文本
模拟输入/输出动作,变量:UnitWeight.PV
已经装车量输出文本
模拟输出动作,变量:Total.PV
本罐装车量输出文本
模拟输出动作,变量:LIC100.TOTAL
启动按钮(子图)
Start.pv
电磁阀输出
颜色相关动作/条件,表达式:Stop.PV == 0
报警提示输出
颜色相关动作/条件,表达式:Alarm.PV == 0
思考题
在数据库全局脚本周期执行脚本中有如下语句:
Total.pv = total.pv + LIC100.total;//把当前累计量计入总装车量
但是在实际的应用中,该语句可能是:
Total.pv = total.pv + LIC100.total+0.1;//把当前累计量计入总装车量
为什么?
答案:因为关闭电磁阀时由于执行机构的滞后,可能会造成较大误差,因此需要补偿该部分的误差。