如何实现功率、电压测量?同一个dsl函数在两个reference中使用,被认为是重复定义?
问:1、StaPQmea、StaVmea测量功率和测量电压的model在哪里?如何实现测量?2、我的block definition中有几个Block Reference,其中有两个dsl都用了'picdro()‘这个函数,结果对整个block definition进行check时,就出现了下面的错误。我不明白在两个reference中用同一个函数也会有关联吗?
DIgSI/info - Check '\leijy.IntUser\building PV SYSTEM(1).IntPrj\Library.IntPrjfolder\User Defined Models.IntPrjfolder\Blkdef Control.BlkDef':
DIgSI/err- Expression already defined as 'picdro()' !
DIgSI/info - Properties of variable 'i_frt': 'intern','double','local'
DIgSI/err- Parser failure at line 'i_frt=picdro(abs(yi)>deadband,0,select(i_EEG,0,0.5))' !
DIgSI/err- Model 'Blkdef Control' contains fault !
DIgSI/err- last command leads to error(s), see output window ! 回复 1# wllszs
i_frt 没有定义。如果你是直接写的code,那么前面那页没有定义这个变量。 我是直接写的code,Manniqin说的前面那页指的是前面那个包含picdro函数的reference吗?
我block definition如下:
其中:
最下面的框Reactive Power Support的code是:
inc(i0)=iq
inc(iq0)=iq
inc(iq1)=iq
i_frt=picdro(abs(yi)>deadband,0,select(i_EEG,0,0.5))
iq0=lim(select(i_frt,abs(yi)/yi*abs(yi)*droop+i0,i0),iq_min,iq_max)
iq1=lim(select(i_frt,abs(yi)/yi*(abs(yi)-deadband)*droop+i0,i0),iq_min,iq_max)
iq=select(i_EEG,iq0,iq1)
最右侧框current limiter的code是:
inc(det)=maxAbsCur*maxAbsCur-iqin*iqin
det=abs(lim(maxAbsCur*maxAbsCur-iqin*iqin,0,maxAbsCur*maxAbsCur))
delta=sqrt(det)
i_frt=picdro(abs(duac)>deadband,0,select(i_EEG,0,0.5))
idout=select(i_frt,lim(idin,-maxAbsCur+abs(iqin),maxAbsCur-abs(iqin)),lim(idin,-maxAbsCur,maxAbsCur))
iqout=select(i_frt,lim(iqin,-maxAbsCur,maxAbsCur),lim(iqin,-min(delta,maxIq),min(delta,maxIq)))
两个部分单独check时,都是block is ok。但整个block definitioncheck时,就会出现picdro( )表达式已经定义的错误。
还想问一下,在论坛里看到有人说dsl code资料少,可以自己慢慢试,但是写好的code怎么才能显示计算结果呢?我只知道有check,但这个只能看语法是否符合要求,不能看结果。 本帖最后由 ManniQin 于 2012-6-19 22:38 编辑
每个blockdefinition 应该有自己的输入输出,中间变量,常数,状态量。看你的图,比如,reactive power support 输入,输出是duac和iq. 那么这些值应该在每个block definition 的第一页找到,需要在建立block definition 时,自己填上。我建议你检查这些定义。
初始值只有在完成模型搭建才能检查,要么你就得把某个dsl模型隔绝出来单独测试。 看看,学习一下。 如何把某个dsl模型隔绝出来单独测试? 谢谢
页:
[1]