- 1、本文档共155页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
04_PSCAD用户自定义模型-重庆大学PSCAD免费公开课PPT
定义 实例数 调用次数 Main 1 1 A 2 2 B 2 4 4. 组件多实例化 的编码类比。 PSCAD对象 编码类比 项目 程序 组件定义 子程序 组件实例 子程序调用 非组件元件 内联代码 端口连接/输入参数 子程序参数 5. 组件多实例化的参数传递。 6. 不同组件实例使用不同的输入参数。为了使得不同组件实 例使用不同的参数,该参数必须定义为从外部输入,否则 所有的实例将使用相同的参数。 7. 关于输出通道和在线控制元件的放置。 由于EMTDC将为每个输出通道开辟内存进行数据存储, 尽量不要将输出通道放置于底层的组件中,否则多实例 化该组件后将引起输出通道大量增加,影响了内存使用 和仿真速度。应尽量在高层组件中根据需要放置输出通道 并监测数据。 8. 运行可配置概念及编程。运行可配置主要是为支持X4版本中的MMI机制。使得不同的组件实例可拥有不同的输入参数值。实现运行可配置主要涉及如下内容:1)修改EMTDC程序结构,提供了BEGIN子程序,可进一步划分为DSDYN_BEGIN和DSDOU_BEGIN段内。提供了 新的存储阵列和指针用于传递初始化参数。2)提供了新的输入参数数据类型;3)用户在自定义元件的代码部分内需使用#BEGIN 指令进行初始化参数的存储和调用。从用户角度而言,需要操作的内容为上述2)和3)。 1)组件输入参数的设计和调用。要使得组件能被多 实例化且不同实例能拥有不同的参数值,该组件内的需要 拥有不同参数值的元件必须是运行可配置的。相应的该参数 必须进行特殊定义和调用。 第 * 页 指令语法: #BEGIN ???... #ENDBEGIN 放置于该段顶部 专用存储阵列和指针 变量初始值存储 指针调整 存储值依次读取 指针调整 2)用户使用#BEGIN和相应存储阵列及指针。用户代码内必须在#BEGIN指令后,采用相应存储阵列及指针进行输入 参数的存储。并在动态代码部分采用相应存储阵列及指针进行数据读取。该指令仅能用于Fortran,DSDYN和DSOUT段。 3)对应关系。在DSDYN/DSOUT段内的#BEGIN至 #ENDBEGIN之间的全部内容,将在生成.f文件时全部插入至DSDYN_BEGIN/DSOUT_BEGIN子程序中,分别被 DSDYN和DSOUT子程序在零时刻进行调用。而在Fortran段内的#BEGIN至#ENDBEGIN之间的全部内容,PSCAD 将自动根据实际情况插入至相应BEGIN子程序内。 依赖性复制 依赖性复制使得组件定义将与其所有依赖性的定义一起复制。也即,如果某个组件包含了其它组件作为其定义的一部分,同时这些组件内部也可能具有其它组件等,所有组件定义将被包括在定义复制中。当定义粘贴时,无论是在同一项目中还是在项目之间,将包括所有依赖性定义的拷贝以及所有的层次链接信息。当这些粘贴的定义任意一个在画布内实例化时,所有子组件(即定义于其定义内的组件)将同时按照正确的程序被实例化。 组件黑箱化 用户可通过简单的操作将任何页面组件转换为等效的非组件元件,包括完整的源代码文件和编译的二进制文件。之所以被称为“黑箱”,是指该特性允许以图形化的方式设计和维护控制电路,然后根据需要将其快速编译和屏蔽,从而在向用户分发时有效保护知识产权。 黑箱化算法 产生Fortran源代码 ?目标/库文件自动创建?元件自动创建 黑箱化不支持的对象 将不支持的对象从组件内移到组件外 控制黑箱化的选项 4.8 元件自定义示例 正弦/余弦发送器 要实现如下功能:根据用户所作出的选择,该元件可选择性地产生正弦信号、余弦信号或同时产生。产生信号所需的幅值、频率和初相角可通过元件连接端口输入,也可通过元件参数输入对话框输入。 选择输出何种信号 选择信号三个参数的来源 configuration类别页面 参数域下拉列表设计 选择输出何种信号的下拉列表设计 选择信号三个参数的来源的下拉列表设计 定义图层 图形外观设计 ! #LOCAL REAL intervm,interfreq,interpha #IF paratype==1 intervm=$ivm interfreq=$ifreq interpha=$ipha #ELSE intervm=$vm interfreq=$freq interpha=$pha #ENDIF ! #IF dim==0 $waveout1=intervm*cos(TWO_PI*interfreq*TIME+interpha/360) #ELSEIF dim==1 $waveout2=intervm*sin(TWO_PI*interfreq*TI
文档评论(0)