您现在的位置:智能制造网>技术中心>世纪星控件DBComm:小块儿有大“智慧”——DBComm.OCX控件 实现PID控制

直播推荐

更多>

企业动态

更多>

推荐展会

更多>

世纪星控件DBComm:小块儿有大“智慧”——DBComm.OCX控件 实现PID控制

2010年12月16日 10:02:33人气:482来源:北京世纪长秋科技有限公司

1 引言

  尽管组态软件已经具备了很强的功能,但是在很多场合同样有直接使用第三方代码的要求。例如用户需要将组态软件采集的实时数据传送到自己开发的VB程序中做更复杂的数据分析或者是将世纪星采集的数据做特定的处理之后再传送给世纪星,这些都需要有一种数据交换机制。

  当然实现这种交换机制有很多传统的方法,如使用文件共享数据DDE数据和交换机制。传统的方法虽然能够达到数据交换的目的,但其使用方法较为烦琐。和使用文件共享数据就需要在组态软件和外部程序内部进行文件读取操作,这样不但麻烦而且处理速度也相对较慢,在要求实时性较好的工程中就显得力不从心。为了让第三方程序方便地读写世纪星数据,世纪星提供了基于ActiveX技术的OCX控件,此控件可以在大多的开发环境中使用(如VC++6.0、VB6.0),它就是DBComm。

2 世纪星数据交换标准控件——DBComm

  世纪星提供标准控件 DBComm.ocx 与外部第三方程序进行数据交换,其交换内容包括:

2.1 实时数据交换

  外部程序可以读取世纪星的系统变量(包括系统离散、系统整数、系统实数和系统信息)、内存变量(包括内存离散、内存整数、内存实数和内存信息)和IO变量(包括IO离散、IO整数、IO实数和IO信息);还可以改写世纪星的内存变量和IO变量。

  相关函数如下:
  DiscValue=tagReadDisc(Tagname) 外部程序读取世纪星离散变量的当前值;
  IntValue=tagReadInt(Tagname) 外部程序读取世纪星整数变量的当前值;
  FloatValue=tagReadFloat(Tagname) 外部程序读取世纪星实数变量的当前值;
  MessValue=tagReadMess(Tagname) 外部程序读取世纪星信息变量的当前值;
  tagWriteDisc(Tagname, DiscValue) 外部程序改写世纪星离散变量的当前值;
  tagWriteInt(Tagname, IntValue) 外部程序改写世纪星整数变量的当前值;
  tagWriteFloat(Tagname, FloatValue) 外部程序改写世纪星实数变量的当前值;
  tagWriteMess(Tagname, String) 外部程序改写世纪星信息变量的当前值;
  InitComm() DBComm初始化函数;

2.2 历史数据读取

  也就是说,外部程序可以按时间和变量名称读取世纪星的历史数据,相关函数如下:
TimeUINT=ConvertTime(Year, Month, Day, Hour, Minute, Second);

  时间转换函数:
  DiscResult=GetHistoryData(Tagname,StartTime,EndTime,DataArray,SizeOfArray, Interval);

  根据的起止日期时间和世纪星的变量名称读取世纪星的历史数据。

3 DBComm在VB6.0中的应用

3.1 VB工程和世纪星工程数据交换示意图:

图 1

  下面是一个应用VB程序在外部计算PID输出功率的一个简单实验:

  需要硬件:三菱FX2N系列PLC、FX2N-4AD-TC、加热器、S分度热电偶、固态继电器。

  需要软件:世纪星组态软件7.22、VB6.0。

  电器原理图如下图所示:

图 2

  上图是一个加热控制系统。PLC主模块负责控制继电器的通断(PID输出);,TC模块负责温度采集(PID输入);上位机世纪星部分负责温度设定、采集下位机信号、曲线显示、数据记录、数据检索等功能;上位机VB部分负责从世纪星获取设定温度SV、测量温度PV以计算PID输出(固态继电器的通断时间)。

3.2 世纪星监控程序

  首先,正确配置控制电路,将上位机与PLC相连,然后开发世纪星监控程序,创建相应的驱动,便能得到如下监控画面:

图 3

3.3 VB外挂程序开发

  * 创建一个VB标准工程。
  * Projiec-Components-DBComm ActiveX Control- Moudle。
  * 初始化DBComm
   dbcomm_pid.InitComm
  * 从世纪星组态软件读取温度设定和实际值
   SV= dbcomm_pid.tagReadFloat ("sv")
   PV= dbcomm_pid.tagReadFloat ("pv")
  * y0输出时间计算函数(根据P=0.5,I=0.5,D=0)
   Private Function PIDCalc(pp As PID, ByVal NextPoint As Double) As Double
    Dim dError As Double
    Dim Error As Double
     Error = pp.SetPoint - NextPoint
     pp.SumError = pp.SumError + Error
     dError = pp.LastError - pp.PrevError
    pp.PrevError = pp.LastError
    pp.LastError = Error
     PIDCalc = pp.P * Error + pp.i * pp.SumError + pp.D * dError
   End Function

3.4 加热输出控制

  根据2中计算的加热时间(时间百分比,x%*1s),对PLC的Y0 进行输出控制。

  YO ON/OFF:tagWriteDisc ("y0",1)/ tagWriteDisc ("y0",0),Y0脉宽调制如下图所示:

图 4

3.5 实验结果

  本工程利用世纪星组态软件采集温度实际值(从PLC),通过在组态软件中设定温度的目标值,在VB6.0程序中计算输出功率的百分比,VB再将加热时间(Y0时间)传递给组态软件,组态软件zui后再传给PLC控制加热。由于采用了粗糙的PID,所以控温精度在正负1度以内(精度不在本文研究范围内),但是VB通过DBComm和世纪星组态软件实时交换数据功能良好。

4 总结

  综上所述,世纪星所提供的DBComm控件使用方便,为第三方程序提供了完备的数据交换接口。另外,DBComm控件还可以访问世纪星组态软件的历史数据库,下次有机会我们再详述。

 

全年征稿/资讯合作 联系邮箱:1271141964@qq.com

免责声明

  • 凡本网注明"来源:智能制造网"的所有作品,版权均属于智能制造网,转载请必须注明智能制造网,https://www.gkzhan.com。违反者本网将追究相关法律责任。
  • 企业发布的公司新闻、技术文章、资料下载等内容,如涉及侵权、违规遭投诉的,一律由发布企业自行承担责任,本网有权删除内容并追溯责任。
  • 本网转载并注明自其它来源的作品,目的在于传递更多信息,并不代表本网赞同其观点或证实其内容的真实性,不承担此类作品侵权行为的直接责任及连带责任。其他媒体、网站或个人从本网转载时,必须保留本网注明的作品来源,并自负版权等法律责任。
  • 如涉及作品内容、版权等问题,请在作品发表之日起一周内与本网联系,否则视为放弃相关权利。

<
更多 >

工控网机器人仪器仪表物联网3D打印工业软件金属加工机械包装机械印刷机械农业机械食品加工设备制药设备仓储物流环保设备造纸机械工程机械纺织机械化工设备电子加工设备水泥设备海洋水利装备矿冶设备新能源设备服装机械印染机械制鞋机械玻璃机械陶瓷设备橡塑设备船舶设备电子元器件电气设备


我要投稿
  • 投稿请发送邮件至:(邮件标题请备注“投稿”)1271141964.qq.com
  • 联系电话0571-89719789
工业4.0时代智能制造领域“互联网+”服务平台
智能制造网APP

功能丰富 实时交流

智能制造网小程序

订阅获取更多服务

微信公众号

关注我们

抖音

智能制造网

抖音号:gkzhan

打开抖音 搜索页扫一扫

视频号

智能制造网

公众号:智能制造网

打开微信扫码关注视频号

快手

智能制造网

快手ID:gkzhan2006

打开快手 扫一扫关注
意见反馈
关闭
企业未开通此功能
详询客服 : 0571-87858618