WWW※PLCJS_COM-PL#C-技.术_网(可编※程控※制器技术门户)
1 引言WWW_PLCJS_COM-PLC-技.术_网
WWW_PLCJS@_COM%-PLC-技.术_网
尽管组态软件已经具备了很强的功能,但是在很多场合同样有直接使用第三方代码的要求。例如用户需要将组态软件采集的实时数据传送到自己开发的VB程序中做更复杂的数据分析或者是将世纪星采集的数据做特定的处理之后再传送给世纪星,这些都需要有一种数据交换机制。WWW_PLCJS※COM-PLC-技×术_网(可编程控※制器技术门户)
WWW_PLCJS_COM-PLC-技.术_网
当然实现这种交换机制有很多传统的方法,如使用文件共享数据DDE数据和交换机制。传统的方法虽然能够达到数据交换的目的,但其使用方法较为烦琐。和使用文件共享数据就需要在组态软件和外部程序内部进行文件读取操作,这样不但麻烦而且处理速度也相对较慢,在要求实时性较好的工程中就显得力不从心。为了让第三方程序方便地读写世纪星数据,世纪星提供了基于ActiveX技术的OCX控件,此控件可以在大多的开发环境中使用(如VC 6.0、VB6.0),它就是DBComm。WWW_PLCJS@_COM%-PLC-技.术_网
WWW※PLCJS_COM-PL#C-技.术_网(可编※程控※制器技术门户)
2 世纪星数据交换标准控件——DBCommP_L_C_技_术_网——可——编——程——控-制-器-技——术——门——户
WWW_PLCJ-S_COM-PLC-技.术_网(可-编程控-制器技术-门户)
世纪星提供标准控件 DBComm.ocx 与外部第三方程序进行数据交换,其交换内容包括:WWW_PLCJ-S_COM-PLC-技.术_网(可-编程控-制器技术-门户)
WWcW_PLCJS_COM-PLC-技.术_网
2.1 实时数据交换WWW.PLCJS.COM——可编程控制器技术门户
WWW_PLCJ-S_COM-PLC-技.术_网(可-编程控-制器技术-门户)
外部程序可以读取世纪星的系统变量(包括系统离散、系统整数、系统实数和系统信息)、内存变量(包括内存离散、内存整数、内存实数和内存信息)和IO变量(包括IO离散、IO整数、IO实数和IO信息);还可以改写世纪星的内存变量和IO变量。——可——编——程——控-制-器-技——术——门——户
WWW_PL※CJS_COM-PLC-技.术_网
相关函数如下:WWW_PLC※JS_COM-PLC-技.术_网(可编程控※制器技术门户)
DiscValue=tagReadDisc(Tagname) 外部程序读取世纪星离散变量的当前值;WW.W_PLC※JS_C,OM-PL,C-技.术_网
IntValue=tagReadInt(Tagname) 外部程序读取世纪星整数变量的当前值;WWW_PLC※JS_COM-PLC-技.术_网(可编程控※制器技术门户)
FloatValue=tagReadFloat(Tagname) 外部程序读取世纪星实数变量的当前值;WWW_PLC※JS_COM-PmLC-技.术_网
MessValue=tagReadMess(Tagname) 外部程序读取世纪星信息变量的当前值;WWcW_PLCJS_COM-PLC-技.术_网
tagWriteDisc(Tagname, DiscValue) 外部程序改写世纪星离散变量的当前值;WWW_PLCJS※COM-PLC-技×术_网(可编程控※制器技术门户)
tagWriteInt(Tagname, IntValue) 外部程序改写世纪星整数变量的当前值;WWW_PLCJ-S_COM-PLC-技.术_网(可-编程控-制器技术-门户)
tagWriteFloat(Tagname, FloatValue) 外部程序改写世纪星实数变量的当前值;WWW_PLC※JS_COM-PLC-技.术_网(可编程控※制器技术门户)
tagWriteMess(Tagname, String) 外部程序改写世纪星信息变量的当前值;WWW_PLCJS@_COM%-PLC-技.术_网
InitComm() DBComm初始化函数;WWW_PLCJS※COM-PLC-技.术_网(可※编程控※制器技术门户)
WWW※PLCJS_COM-PL#C-技.术_网(可编※程控※制器技术门户)
2.2 历史数据读取WW.W_PLC※JS_C,OM-PL,C-技.术_网
WWW_PLCJ-S_COM-PLC-技.术_网(可-编程控-制器技术-门户)
也就是说,外部程序可以按时间和变量名称读取世纪星的历史数据,相关函数如下:——可——编——程——控-制-器-技——术——门——户
TimeUINT=ConvertTime(Year, Month, Day, Hour, Minute, Second);WW.W_PLC※JS_C,OM-PL,C-技.术_网
WWW.PLCJS.COM——可编程控制器技术门户
时间转换函数:WWcW_PLCJS_COM-PLC-技.术_网
DiscResult=GetHistoryData(Tagname,StartTime,EndTime,DataArray,SizeOfArray, Interval);W1WW_P4LCJS_COM-PLC-技.术_网
WWW_P※LCJS_CO※M-PLC-技-.术_网
根据指定的起止日期时间和世纪星的变量名称读取世纪星的历史数据。WWW.PLCJS.COM——可编程控制器技术门户
WWW.PLCJS.COM——可编程控制器技术门户
3 DBComm在VB6.0中的应用WWW_PL※CJS_COM-PLC-技.术_网
WWW_P※LCJS_COM-PLC-)技.术_网
3.1 VB工程和世纪星工程数据交换示意图:W1WW_P4LCJS_COM-PLC-技.术_网
P_L_C_技_术_网——可——编——程——控-制-器-技——术——门——户
WWW_PLC※JS_COM-PmLC-技.术_网
WWW_PLCJ-S_COM-PLC-技.术_网(可-编程控-制器技术-门户)
图 1plcjs.技.术_网
W1WW_P4LCJS_COM-PLC-技.术_网
下面是一个应用VB程序在外部计算PID输出功率的一个简单实验:WWW_PLC※JS_COM-PmLC-技.术_网
——可——编——程——控-制-器-技——术——门——户
需要硬件:三菱FX2N系列PLC、FX2N-4AD-TC、加热器、S分度热电偶、固态继电器。WWW_P※LCJS_CO※M-PLC-技-.术_网
WWW_PLCJS※COM-PLC-技×术_网(可编程控※制器技术门户)
需要软件:世纪星组态软件7.22、VB6.0。WWW_PLCJS※COM-PLC-技×术_网(可编程控※制器技术门户)
WWW_PLCJS※COM-PLC-技×术_网(可编程控※制器技术门户)
电器原理图如下图所示:P.L.C.技.术.网——可编程控制器技术门户
WWW_PLCJS_COM-PLC-技.术_网
WWW_P※LCJS_COM-PLC-)技.术_网
WWW_PLCJS_COM-PLC-技.术_网
图 2WW.W_PLC※JS_C,OM-PL,C-技.术_网
WWW_PLCJS@_COM%-PLC-技.术_网
上图是一个加热控制系统。PLC主模块负责控制继电器的通断(PID输出);,TC模块负责温度采集(PID输入);上位机世纪星部分负责温度设定、采集下位机信号、曲线显示、数据记录、数据检索等功能;上位机VB部分负责从世纪星获取设定温度SV、测量温度PV以计算PID输出(固态继电器的通断时间)。WWW_PLCJS@_COM%-PLC-技.术_网
WWW※PLCJS_COM-PL#C-技.术_网(可编※程控※制器技术门户)
3.2 世纪星监控程序WWW_PLCJS※COM-PLC-技×术_网(可编程控※制器技术门户)
P.L.C.技.术.网——可编程控制器技术门户
首先,正确配置控制电路,将上位机与PLC相连,然后开发世纪星监控程序,创建相应的驱动,便能得到如下监控画面:WWW※PLCJS_COM-PL#C-技.术_网(可编※程控※制器技术门户)
WW.W_PLC※JS_C,OM-PL,C-技.术_网
WWW_P※LCJS_COM-PLC-)技.术_网
WWcW_PLCJS_COM-PLC-技.术_网
图 3——可——编——程——控-制-器-技——术——门——户
WWW_P※LCJS_CO※M-PLC-技-.术_网
3.3 VB外挂程序开发WWW※PLCJS_COM-PL#C-技.术_网(可编※程控※制器技术门户)
WW.W_PLCJS_COM-PLC-技.术_网
* 创建一个VB标准工程。WWW_P※LCJS_CO※M-PLC-技-.术_网
* Projiec-Components-DBComm ActiveX Control- Moudle。WWW_PLCJS※COM-PLC-技.术_网(可※编程控※制器技术门户)
* 初始化DBComm ——可——编——程——控-制-器-技——术——门——户
dbcomm_pid.InitCommWWW_PLC※JS_COM-PmLC-技.术_网
* 从世纪星组态软件读取温度设定和实际值WWW_PLCJS_COM-PLC-技.术_网
SV= dbcomm_pid.tagReadFloat ("sv")P.L.C.技.术.网——可编程控制器技术门户
PV= dbcomm_pid.tagReadFloat ("pv")WWW_PLCJS_COM-PLC-技.术_网
* y0输出时间计算函数(根据P=0.5,I=0.5,D=0)W1WW_P4LCJS_COM-PLC-技.术_网
Private Function PIDCalc(pp As PID, ByVal NextPoint As Double) As DoubleP_L_C_技_术_网——可——编——程——控-制-器-技——术——门——户
Dim dError As DoubleWWcW_PLCJS_COM-PLC-技.术_网
Dim Error As DoubleWWcW_PLCJS_COM-PLC-技.术_网
Error = pp.SetPoint - NextPointWWW_PLCJS※COM-PLC-技×术_网(可编程控※制器技术门户)
pp.SumError = pp.SumError ErrorWWW_P※LCJS_COM-PLC-)技.术_网
dError = pp.LastError - pp.PrevErrorWWW_PLCJS※COM-PLC-技×术_网(可编程控※制器技术门户)
pp.PrevError = pp.LastErrorWWW_PLCJ-S_COM-PLC-技.术_网(可-编程控-制器技术-门户)
pp.LastError = ErrorWWW_PLCJS_COM-PLC-技.术_网
PIDCalc = pp.P * Error pp.i * pp.SumError pp.D * dErrorWW.W_PLCJS_COM-PLC-技.术_网
End FunctionWWW_PLCJS_COM-PLC-技.术_网
P.L.C.技.术.网——可编程控制器技术门户
3.4 加热输出控制WWW※PLCJS_COM-PL#C-技.术_网(可编※程控※制器技术门户)
WWW.PLCJS.COM——可编程控制器技术门户
根据2中计算的加热时间(时间百分比,x%*1s),对PLC的Y0 进行输出控制。——可——编——程——控-制-器-技——术——门——户
WWW_P※LCJS_COM-PLC-)技.术_网
YO ON/OFF:tagWriteDisc ("y0",1)/ tagWriteDisc ("y0",0),Y0脉宽调制如下图所示:P.L.C.技.术.网——可编程控制器技术门户
W1WW_P4LCJS_COM-PLC-技.术_网
WWW_PLC※JS_COM-PmLC-技.术_网
WW.W_PLCJS_COM-PLC-技.术_网
图 4W1WW_P4LCJS_COM-PLC-技.术_网
WWW_P※LCJS_CO※M-PLC-技-.术_网
3.5 实验结果plcjs.技.术_网
W1WW_P4LCJS_COM-PLC-技.术_网
本工程利用世纪星组态软件采集温度实际值(从PLC),通过在组态软件中设定温度的目标值,在VB6.0程序中计算输出功率的百分比,VB再将加热时间(Y0时间)传递给组态软件,组态软件最后再传给PLC控制加热。由于采用了粗糙的PID,所以控温精度在正负1度以内(精度不在本文研究范围内),但是VB通过DBComm和世纪星组态软件实时交换数据功能良好。WW.W_PLCJS_COM-PLC-技.术_网
WWcW_PLCJS_COM-PLC-技.术_网
4 总结WWW_PLCJS※COM-PLC-技.术_网(可※编程控※制器技术门户)
WWW_P※LCJS_CO※M-PLC-技-.术_网
综上所述,世纪星所提供的DBComm控件使用方便,为第三方程序提供了完备的数据交换接口。另外,DBComm控件还可以访问世纪星组态软件的历史数据库,下次有机会我们再详述。WWW_PL※CJS_COM-PLC-技.术_网