下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、如何用C语言实现Bladed中的外部控制器来源:本站原创作者:DLL下载家园更新时间:2010-9-9Bladed2010-09-0822:57:18阅读0评论0字号:大中小订阅1、Bladed软件及外部控制器在Bladed风机载荷模拟软件中,可以让用户用C语言编写自己的DLL程序作为载荷计算的风机控制器。DLL控制器通讯速度快,将风机控制系统的关键特性通过转换成C语言的控制器可以更真实的模拟风机的运行并获得用户风机的更逼真的载荷数据。下面是一个用VISUALSTUDIO2005的C+实现的用户控制器的实例。2、C+代码如何创建DLL可以参考VC+.NET实现DLL并在其中调用下面是语言源代码
2、:Head文件/caiLib.h#ifndefCAILIB_H#defineCAILIB_H/extern"C"int_declspec(dllexport)add(intx,inty);extern"C"/avoidmanglednamesvoid_declspec(dllexport)_cdeclDISCON(float*avrSwap,int*aviFail,char*accInfile,char*avcOutname,char*avcMsg);voidsetParams(float*sAvrSwap);intapp(intx,inty);#end
3、if头文件说明:在其中定义程序名称。程序代码/caiLib.cpp:定义DLL应用程序的入口点。/#include"stda仅.h”#include"caiLib.h"#include"stdio.h"#defineNINT(a)(a)>=0.0?(int)(a)+0.5):(int)(a)-0.5)/在此定义浮点数转换成整数#ifdef_MANAGED#pragmamanaged(push,off)#endiffloat*SwapArray,Kp,Ki;定义与Bladed交换数组的地址指针,定义PI控制器比例/及积分系数staticfl
4、oatsumError;定义积分累积误差变量floatGetSwapValue(intIndex)return(SwapArrayIndex-1);/定义t取Bladed传递变量值函数voidSetSwapValue(intIndex,floatVal)SwapArrayIndex-1=Val;/定义设置彳递到Bladed的变量void_declspec(dllexport)_cdeclDISCON(float*avrSwap,int*aviFail,char*accInfile,char*avcOutname,char*avcMsg)主函数DISCON实现charMessage257,InF
5、ile257,OutName1025;floatrTime,rMeasuredSpeed,rMeasuredPitch,rGeneratorSpeed;intiStatus,iFirstLog;staticintiStep,iDone,iControlState;staticfloatrPitchDemand,RPMSetpoint,TimeDiff,OldTime,Temp;FILE*fp;SwapArray=avrSwap;/Storethepointer/Makesurethere'saCstringterminatoraccInfileNINT(avrSwap49)+1=
6、9;0'avcOutnameNINT(avrSwap50)='0'avcMsg0='0'iStatus=NINT(avrSwap0);/Initialiseif(iStatus=0)/ReadtheDISCON.INdatafp=fopen("DISCON.IN","r");fscanf(fp,"%fn%fn",&Kp,&Ki);fclose(fp);printf("Kp=%0.5f,Ki=%0.5fn",Kp,Ki);/Initialisepitchdema
7、ndtocurrentpitchanglerMeasuredPitch=GetSwapValue(4);rPitchDemand=rMeasuredPitch;sumError=0.0F;iStep=0;/Startupstep=0TimeDiff=0.0F;OldTime=GetSwapValue(2);/Thisisalsowhereyoucouldreadinanyuser-defineddatafromaccInFile/Returndemandedvariables/Note:previousvaluescanbeusedbeforetheyupdated,tosimulateaon
8、e-sampledelayif(NINT(GetSwapValue(10)=0)SetSwapValue(42,rPitchDemand);SetSwapValue(43,rPitchDemand);SetSwapValue(44,rPitchDemand);SetSwapValue(45,rPitchDemand);elsestrcpy(avcMsg,"ThissimpleDLLneedspitchpositionactuator");*aviFail=-1;rMeasuredPitch=GetSwapValue(4);rGeneratorSpeed=GetSwapVal
9、ue(20)/(2.0F*3.14F)*60.0F;/变换rad/s为rpmTimeDiff=GetSwapValue(2)-OldTime;iControlState=NINT(GetSwapValue(117);/获彳导Bladed的控制状态/iControlState=0;production/=1:Parked/=2:idling/=3:Startup/=4:NormalStop/=5:EmergencyStop/Maincalculationif(*aviFail>=0)/Justa1-degreestepchangeinpitchpositiondemandat10secon
10、dsif(GetSwapValue(2)>=0.1&&iStep=0)iStep=1;if(iStep=1)rPitchDemand=40*0.017453F;if(rGeneratorSpeed>220.0)RPMSetpoint=rGeneratorSpeed;/setpoint=GeneratorSpeediStep=iStep+1;if(iStep=2)Temp=PIController(rGeneratorSpeed,RPMSetpoint);<>rPitchDemand=rPitchDemand+Temp;if(TimeDiff>=1)
11、if(RPMSetpoint>=1290.0)RPMSetpoint=1296.0F;iStep=iStep+1;iDone=1;elseRPMSetpoint=RPMSetpoint+8.0F;OldTime=GetSwapValue(2);按8rpm/s增加发电机转速给定if(iStep=3)Temp=PIController(rGeneratorSpeed,RPMSetpoint);rPitchDemand=rPitchDemand+Temp;if(rPitchDemand>3.1415926/2)rPitchDemand=3.1415926F/2.0F;if(rPitchDemand<0)rPitchDemand=0.0F;/Loggingoutputstrcpy(avcOutname,"GeneratorDemandSpeed:A/T;");SetSwapValue(65,1.0F);)return;)#ifdef_MANAGED#pragmamanaged(pop)#endif将程序编译后得到程序caiLib.DLL.将此程序在Bladed中的控制部
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
评论
0/150
提交评论