首页/文章/ 详情

即将直播:风机的"心脏"和风电研发职业成长的必经之路

精品
作者优秀平台推荐
详细信息
文章亮点
作者优秀
优秀教师/意见领袖/博士学历/特邀专家/独家讲师
平台推荐
内容稀缺
2年前浏览6311

导读:控制在机组以及仿真软件中的地位不言而喻,机组的运行离不开控制,控制就像人的大脑中枢,接收外部的信号汇总然后依据一定的策略算法运算,再讲指令输出给各个执行部件。10月22日20时(周六)受仿真秀平台邀请,在2022风力发电仿真设计学习月第六期讲座带来风电机组动力学软件仿真控制器编写》。诚邀各位专家、学者和工程师朋友莅临交流,如有不当欢迎批评指正,共同进步。

图片来自网路版权归原作者
一、写在文前
作为一名风电从业工作者,对控制的认识也是由浅入深,由表入里开始,起源于载荷仿真,机组的载荷以及动力学响应大部分是底层的物理知识,而我们能做的是如何认识与理解,因为他们是理论,我们大多数很难改变或者突破理论的界限,而在仿真中唯一的变量或者可以人为控制的就是控制算法,这也是载荷为什么做到极致就是控制了,这是成长的必经之路,不去理解控制那么在载荷仿真也就没有出路。
二、初识控制
最初对控制器的认识是DISCON.DLL(机组仿真控制的动态链接库),从研究生开始就在努力研究DISCON是什么东西,当看过NREL的DISCON代码才刚有所了解,而当你真正参与工作之后,发现工程仿真的程序都是几百到几千KB大小,而NREL的才几十Kb, 这才发现我好想对他了解知之甚少,当你真正学会了仿真dll之后就会发现这与我们工业产品的应用程序还是有很多的区别。随着工作的深度和宽度,对于工业产品和仿真程序的认识也会越来越多,随着认知的不断提高,我们才会从更高的维度来看待事务。那如何让仿真更接近于实际也是我们编写控制时要考虑的地方。
图片来自网路版权归原作者
三、控制器格式
无论Bladed与FAST作为一个动力学计算软件跟控制器之间都需要有一个接口,其实都可以自己随意编译,为了保证控制器接口统一,FAST也兼容了bladed式控制器调用方式,其中BladedDLLInterface文件就是一个兼容接口,其目的就是调用统一固化的控制器函数 DISCON ( avrSWAP, aviFAIL, accINFILE, avcOUTNAME, avcMSG );avrSWAP为数组,主要的数据通道,aviFAIL:调用成功的返回标志位,avcOUTNAME:为控制器参数LOG输出通道,avcMSG:返回信息
示例:

















































































!=======================================================================SUBROUTINE DISCON ( avrSWAP, aviFAIL, accINFILE, avcOUTNAME, avcMSG )!DEC$ ATTRIBUTES DLLEXPORT, ALIAS:'DISCON' :: DISCON! This is a control routine for holding the place of a user-specified! Bladed-style DLL controller. Modify this code to create your own! DLL controller.! This congtrol file was writen by Ruiliang.Wang On 2/4/2018,the script! Can be used in commercial style!The Moudle LibraryUSE                                MainSubroutineUSE                                SuperControlUSE                                LOGUSE                                BrakeProgram IMPLICIT NONE!The Passed VariablesREAL(4),    INTENT(INOUT)    :: avrSWAP   (*)                                   ! The swap array, used to pass data to, and receive data from, the DLL controller.INTEGER(4), INTENT(  OUT)    :: aviFAIL                                         ! A flag used to indicate the success of this DLL call set as follows: 0 if the DLL call was successful, >0 if the DLL call was successful but cMessage should be issued as a warning messsage, <0 if the DLL call was unsuccessful or for any other reason the simulation is to be stopped at this point with cMessage as the error message.INTEGER(1), INTENT(IN   )    :: accINFILE (*)                                   ! The address of the first record of an array of 1-byte CHARACTERs giving the name of the parameter input file, 'DISCON.IN'.INTEGER(1), INTENT(  OUT)    :: avcMSG    (*)                                   ! The address of the first record of an array of 1-byte CHARACTERS giving the message contained in cMessage, which will be displayed by the calling program if aviFAIL <> 0.INTEGER(1), INTENT(INOUT)    :: avcOUTNAME(*)                                   ! The address of the first record of an array of 1-byte CHARACTERS giving the simulation run name without extension.!LocalREAL(4), SAVE                ::rPitchDemand REAL(4), SAVE                ::rTorqueDemand                                   ! Desired collective pitch angles returned by this DLL (rad).REAL(4), SAVE                ::rNacDemandRate!REAL(4), SAVE ::rTime                                           ! Current simulation time (sec).INTEGER(4)                    ::I                                               ! Generic index.INTEGER(4)                    ::iStatus                                         ! A status flag set by the simulation as follows: 0 if this is the first call, 1 for all subsequent time steps, -1 if this is the final call at the end of the simulation. INTEGER(1)                   :: iInFile   ( 256)                                ! CHARACTER string cInFile  stored as a 1-byte array.INTEGER(1)                   :: iMessage  ( 256)                                ! CHARACTER string cMessage stored as a 1-byte array.INTEGER(1),SAVE               :: iOutName  (1024)                                ! CHARACTER string cOutName stored as a 1-byte array.CHARACTER( 256)              :: cInFile                                         ! CHARACTER string giving the name of the parameter input file, 'DISCON.IN'CHARACTER( 256)               :: cMessage                                        ! CHARACTER string giving a message that will be displayed by the calling program if aviFAIL <> 0.CHARACTER(1024),SAVE         :: cOutName                                        ! CHARACTER string giving the simulation run name without extensioINTEGER                       ::UnIn=40! Set EQUIVALENCE relationships between INTEGER(1) byte arrays and CHARACTER strings:EQUIVALENCE (iInFile , cInFile )EQUIVALENCE (iMessage, cMessage)EQUIVALENCE (iOutName, cOutName)! StatusiStatus = NINT( avrSWAP( 1) )aviFAIL = 0! InitializationIF ( iStatus == 0 )  THEN  ! Convert byte arrays to CHARACTER strings, for convenience:DO I = 1,MIN(  256, NINT( avrSWAP(50) ) )iInFile (I) = accINFILE (I)   ! Sets cInfile  by EQUIVALENCEENDDODO I = 1,MIN( 1024, NINT( avrSWAP(51) ) )iOutName(I) = avcOUTNAME(I)   ! Sets cOutName by EQUIVALENCEENDDO! READ IN DATA CONTAINED IN FILE cInFile HEREaviFAIL  = 0   ! SET aviFAIL AND cMessage IF ERROR RESULTScMessage = ''  !
!InitializationCALL INIT_CONTROLLER(avrSWAP,UnIn,cInFile,cOutName,rPitchDemand,rTorqueDemand)
ENDIF!PreprocessorCALL Preprocessor_Controller(avrSWAP)!MonitorCALL Monitor(rPitchDemand,rNacDemandRate)IF( ( iStatus >= 0 ) .AND. ( aviFAIL >= 0 ) )  THEN  aviFAIL  = 0   ! SET aviFAIL AND cMessage IF ERROR RESULTScMessage = ''  !
!Main ControllerCALL MainController(iStatus,rPitchDemand,rTorqueDemand)
ENDIFCALL BrakeProgram_Controller!OutPut to the wind turbine actuatorCALL Output(avrSWAP,rNacDemandRate)!LoggingCALL LogOutput(avrSWAP,cOutName)!!Return VariableDO I = 1,MIN(  256, NINT( avrSWAP(49) ) )avcMSG(I) = iMessage(I) ! Same as cMessage by EQUIVALENCEENDDORETURNEND SUBROUTINE DISCON

四、我的公开课

2022年10月22日20时(周六),为了帮助大家更好理解风电机组动力学软件仿真控制器编写笔者的本次讲座,一起讨论风电机组动力学软件仿真控制器编写基本知识与框架结构,学习仿真软件与仿真控制器的交互过程,并且通过实际案例向风力发电研发工程师展示仿真控制器的编写方法等专业技能。

以下是我的公开课安排

2022风电仿真设计学习月(六):风电机组动力学软件仿真控制器编写-仿真秀直播

1666340398882015482.jpg


五、风力发电仿真学习月

自2022年以来,我们分别组织了《力学与有限元学习月》、《汽车仿真设计学习月》和《航空航天仿真设计学习月》,邀请各行业、高校和科研机构资深讲师,分享专业技术、行业经验和案例应用。旨在帮助仿真秀平台用户探索研发工程师的学习路线和知识体系(例如风电行业,结构强度,流场温度,疲劳,多体动力学simpack,螺栓强度和疲劳,混凝土塔筒计算,载荷计算bladed,matlab控制,风资源微观选址,塔筒设计和校核,叶片设计计算等等)。

1、直播安排

2022年8月27日-10月22日,我们迎来了《风力发电仿真设计学习月》,我们再次邀请6位平台优秀资深讲师,面向风力发电仿真设计场景分享行业解决方案。以下是具体安排

2、风力发电仿真技术进阶

3、永久免费的风电仿真学习包

(完)
作者FAST王老师  仿真秀优秀讲师
声明:部分图片和内容转自网络,如有不当请联系我们,欢迎分享,禁止私自转载,转载请联系我们。

来源:仿真秀App
ACT疲劳航空航天汽车Bladed多体动力学理论电机控制FAST螺栓
著作权归作者所有,欢迎分享,未经许可,不得转载
首次发布时间:2022-10-24
最近编辑:2年前
仿真圈
技术圈粉 知识付费 学习强国
获赞 10111粉丝 21610文章 3547课程 219
点赞
收藏
作者推荐
未登录
还没有评论
课程
培训
服务
行家
VIP会员 学习 福利任务 兑换礼品
下载APP
联系我们
帮助与反馈