性无码一区二区三区在线观看,少妇被爽到高潮在线观看,午夜精品一区二区三区,无码中文字幕人妻在线一区二区三区,无码精品国产一区二区三区免费

  • 回復(fù)
  • 收藏
  • 點(diǎn)贊
  • 分享
  • 發(fā)新帖

PSIM仿真之外置DLL功能塊

作為PSIM初學(xué)者,計(jì)劃邊更貼邊學(xué)習(xí),記錄自己的學(xué)習(xí)例程,希望可以幫助到其他的初學(xué)者。

首先,做以下幾個(gè)準(zhǔn)備工作:

(1)下載PSIM9.0安裝包.

(2)閱讀《PSIM使用說(shuō)明》,上面的下載鏈接里面有這個(gè)文件。我想用PSIM的外置DLL功能塊。之前也用過(guò)PSIM仿真電路,直接看了使用說(shuō)明的第108頁(yè)到第110頁(yè)。

(3)看完這個(gè)之后,想著先看懂一個(gè)PSIM仿真例程,在PSIM免安裝包的examples文件下的custom dll文文件中,主要看例程中的pfc_vi_dll,這是由電感電流和負(fù)荷電壓反饋的功率因數(shù)校正電路。

全部回復(fù)(30)
正序查看
倒序查看
2016-10-29 12:47

(4)外置DLL功能塊,需要用C語(yǔ)言或者C++編程,然后用PSIM連接起來(lái)。所以要安裝Microsoft Visual C++2010。。找?guī)熃阋陌惭b包,按照《Visual Studio 2010安裝實(shí)戰(zhàn)教程》的步驟安裝的。安裝好之后,寫(xiě)了一個(gè)printf("HELLO\n");的程序,仿真出錯(cuò),提示錯(cuò)誤原因是:LINK--fatal-error-LNK1123-轉(zhuǎn)換到-COFF-期間失敗-文件無(wú)效或損壞-還有warning-C4996??砂俣冉鉀Q該問(wèn)題,替換一個(gè)文件即可。。。。(備注有說(shuō)方法。)

當(dāng)然我也是C語(yǔ)言初學(xué)者,哈哈,之后可能看程序需要一句一句查了。。。勿噴。么么噠。我是弱女子。哈哈

備注:

在電腦里面搜索發(fā)現(xiàn)

路徑1:C:\Program Files\Microsoft Visual Studio10.0\VC\bin   (說(shuō)明:我的安裝目錄是在D盤,所以我找的是D盤里面的D:\Microsoft Visual C++2010\VC\bin)

路徑2:C:\Windows\winsxs\x86_netfxcvtres_for_vc_and_vb_b03f5f7f11d50a3a_6.1.7600.16385_none_ba476986f05abc65

(說(shuō)明:我在我的電腦的C:\Windows\winsxs路徑下找到這三個(gè)文件,三個(gè)里面都有cvtres.exe文件,我找了一個(gè)最新的去替代上面路徑中的cvtres.exe文件

路徑3:C:\Windows\Microsoft.NET\Framework\v4.0.30319

這三個(gè)路徑里面都有cvtres.exe文件,嘗試使用第二個(gè)路徑里面的文件替換第一個(gè)路徑的文件,問(wèn)題解決。

(這個(gè)問(wèn)題是windows自動(dòng)更新造成編譯器cvtres.exe的版本過(guò)低,如果windows再次更新,則還可能出現(xiàn)這樣的問(wèn)題,屆時(shí)再重復(fù)一下上述步驟即可。)

0
回復(fù)
2016-10-29 14:05
@郭偉郭偉100
(4)外置DLL功能塊,需要用C語(yǔ)言或者C++編程,然后用PSIM連接起來(lái)。所以要安裝MicrosoftVisualC++2010。。找?guī)熃阋陌惭b包,按照《VisualStudio2010安裝實(shí)戰(zhàn)教程》的步驟安裝的。安裝好之后,寫(xiě)了一個(gè)printf("HELLO\n");的程序,仿真出錯(cuò),提示錯(cuò)誤原因是:LINK--fatal-error-LNK1123-轉(zhuǎn)換到-COFF-期間失敗-文件無(wú)效或損壞-還有warning-C4996。可百度解決該問(wèn)題,替換一個(gè)文件即可。。。。(備注有說(shuō)方法。)[圖片]當(dāng)然我也是C語(yǔ)言初學(xué)者,哈哈,之后可能看程序需要一句一句查了。。。勿噴。么么噠。我是弱女子。哈哈[圖片]備注:在電腦里面搜索發(fā)現(xiàn)路徑1:C:\ProgramFiles\MicrosoftVisualStudio10.0\VC\bin (說(shuō)明:我的安裝目錄是在D盤,所以我找的是D盤里面的D:\MicrosoftVisualC++2010\VC\bin)路徑2:C:\Windows\winsxs\x86_netfxcvtres_for_vc_and_vb_b03f5f7f11d50a3a_6.1.7600.16385_none_ba476986f05abc65(說(shuō)明:我在我的電腦的C:\Windows\winsxs路徑下找到這三個(gè)文件,三個(gè)里面都有cvtres.exe文件,我找了一個(gè)最新的去替代上面路徑中的cvtres.exe文件)[圖片]路徑3:C:\Windows\Microsoft.NET\Framework\v4.0.30319這三個(gè)路徑里面都有cvtres.exe文件,嘗試使用第二個(gè)路徑里面的文件替換第一個(gè)路徑的文件,問(wèn)題解決。(這個(gè)問(wèn)題是windows自動(dòng)更新造成編譯器cvtres.exe的版本過(guò)低,如果windows再次更新,則還可能出現(xiàn)這樣的問(wèn)題,屆時(shí)再重復(fù)一下上述步驟即可。)

(5)在PSIM免安裝包的examples文件下的custom dll文文件中,主要看例程中的pfc_vi_dl,有以下幾個(gè)文件

了解什么是dsw文件?(這個(gè)文件是workspa文件,需要用VC2010打開(kāi),所以才有了第三步安裝和下載Visual C++2010)

不知道為什么不能上傳附件,可能是因?yàn)閯倓偵暾?qǐng)的原因。。。。直接貼上百度的東西吧。。

引用鏈接:http://baike.baidu.com/view/1037844.htm

文件擴(kuò)展名

首先要介紹的是擴(kuò)展名為dsw的文件類型, 這種類型的文件在VC中是級(jí)別最高的, 稱為Workspace文件。在VC, 應(yīng)用程序是以Project的形式存在的,Project文件以.dsp擴(kuò)展名, Workspace文件中可以包含多個(gè)Project, Workspace文件對(duì)它們進(jìn)行統(tǒng)一的協(xié)調(diào)和管理。

dsw類型的Workspace文件相配合的一個(gè)重要的文件類型是以opt為擴(kuò)展名的文件, 這個(gè)文件中包含的是在Workspace文件中要用到的本地計(jì)算機(jī)的有關(guān)配置信息, 所以這個(gè)文件不能在不同的計(jì)算機(jī)上共享, 當(dāng)我們打開(kāi)一個(gè)Workspace文件時(shí), 如果系統(tǒng)找不到需要的opt類型文件, 就會(huì)自動(dòng)地創(chuàng)建一個(gè)與之配合的包含本地計(jì)算機(jī)信息的opt文件。

上面提到Project文件的擴(kuò)展名是dsp, 這個(gè)文件中存放的是一個(gè)特定的工程, 也就是特定的應(yīng)用程序的有關(guān)信息, 每個(gè)工程都對(duì)應(yīng)有一個(gè)dsp類型的文件。

clw為擴(kuò)展名的文件是用來(lái)存放應(yīng)用程序中用到的類和資源的信息的, 這些信息是VC中的ClassWizard工具管理和使用類的信息來(lái)源。它實(shí)際上是INI文件的格式,有時(shí)候ClassWizard出問(wèn)題,手工修改CLW文件可以解決.如果此文件不存在的話,每次用ClassWizard的時(shí)候繪提示你是否重建。

對(duì)應(yīng)每個(gè)應(yīng)用程序有一個(gè)readme.txt文件, 這個(gè)文件中列出了應(yīng)用程序中用到的所有的文件的信息, 打開(kāi)并查看其中的內(nèi)容就可以對(duì)應(yīng)用程序的文件結(jié)構(gòu)有一個(gè)基本的認(rèn)識(shí)。

在應(yīng)用程序中大量應(yīng)用的是以hcpp為擴(kuò)展名的文件, h為擴(kuò)展名的文件稱為頭文件。cpp為擴(kuò)展名的文件稱為實(shí)現(xiàn)文件, 一般說(shuō)來(lái)h為擴(kuò)展名的文件與cpp為擴(kuò)展名的文件是一一對(duì)應(yīng)配合使用的, h為擴(kuò)展名的文件中包含的主要是類的定義, 而在cpp為擴(kuò)展名的文件中包含的主要是類成員函數(shù)的實(shí)現(xiàn)代碼。

在應(yīng)用程序中經(jīng)常要使用一些位圖、菜單之類的資源, VCrc為擴(kuò)展名的文件稱為資源文件, 其中包含了應(yīng)用程序中用到的所有的windows資源, 要指出的一點(diǎn)是rc文件可以直接在VC集成環(huán)境中以可視化的方法進(jìn)行編輯和修改。

最后要介紹的是以rc2為擴(kuò)展名的文件, 它也是資源文件, 但這個(gè)文件中的資源不能在VC的集成環(huán)境下直接進(jìn)行編輯和修改, 而是由我們自己根據(jù)需要手工地編輯這個(gè)文件。

對(duì)于以ico,bmp等為擴(kuò)展名的文件是具體的資源, 產(chǎn)生這種資源的途徑很多。使用rc資源文件的目的就是為了對(duì)程序中用到的大量的資源進(jìn)行統(tǒng)一的管理。

0
回復(fù)
2016-10-29 14:07
@郭偉郭偉100
(5)在PSIM免安裝包的examples文件下的customdll文文件中,主要看例程中的pfc_vi_dl,有以下幾個(gè)文件[圖片]了解什么是dsw文件?(這個(gè)文件是workspa文件,需要用VC2010打開(kāi),所以才有了第三步安裝和下載VisualC++2010)不知道為什么不能上傳附件,可能是因?yàn)閯倓偵暾?qǐng)的原因。。。。直接貼上百度的東西吧。。引用鏈接:http://baike.baidu.com/view/1037844.htm文件擴(kuò)展名首先要介紹的是擴(kuò)展名為dsw的文件類型,這種類型的文件在VC中是級(jí)別最高的,稱為Workspace文件。在VC中,應(yīng)用程序是以Project的形式存在的,Project文件以.dsp擴(kuò)展名,在Workspace文件中可以包含多個(gè)Project,由Workspace文件對(duì)它們進(jìn)行統(tǒng)一的協(xié)調(diào)和管理。與dsw類型的Workspace文件相配合的一個(gè)重要的文件類型是以opt為擴(kuò)展名的文件,這個(gè)文件中包含的是在Workspace文件中要用到的本地計(jì)算機(jī)的有關(guān)配置信息,所以這個(gè)文件不能在不同的計(jì)算機(jī)上共享,當(dāng)我們打開(kāi)一個(gè)Workspace文件時(shí),如果系統(tǒng)找不到需要的opt類型文件,就會(huì)自動(dòng)地創(chuàng)建一個(gè)與之配合的包含本地計(jì)算機(jī)信息的opt文件。上面提到Project文件的擴(kuò)展名是dsp,這個(gè)文件中存放的是一個(gè)特定的工程,也就是特定的應(yīng)用程序的有關(guān)信息,每個(gè)工程都對(duì)應(yīng)有一個(gè)dsp類型的文件。以clw為擴(kuò)展名的文件是用來(lái)存放應(yīng)用程序中用到的類和資源的信息的,這些信息是VC中的ClassWizard工具管理和使用類的信息來(lái)源。它實(shí)際上是INI文件的格式,有時(shí)候ClassWizard出問(wèn)題,手工修改CLW文件可以解決.如果此文件不存在的話,每次用ClassWizard的時(shí)候繪提示你是否重建。對(duì)應(yīng)每個(gè)應(yīng)用程序有一個(gè)readme.txt文件,這個(gè)文件中列出了應(yīng)用程序中用到的所有的文件的信息,打開(kāi)并查看其中的內(nèi)容就可以對(duì)應(yīng)用程序的文件結(jié)構(gòu)有一個(gè)基本的認(rèn)識(shí)。在應(yīng)用程序中大量應(yīng)用的是以h和cpp為擴(kuò)展名的文件,以h為擴(kuò)展名的文件稱為頭文件。以cpp為擴(kuò)展名的文件稱為實(shí)現(xiàn)文件,一般說(shuō)來(lái)h為擴(kuò)展名的文件與cpp為擴(kuò)展名的文件是一一對(duì)應(yīng)配合使用的,在h為擴(kuò)展名的文件中包含的主要是類的定義,而在cpp為擴(kuò)展名的文件中包含的主要是類成員函數(shù)的實(shí)現(xiàn)代碼。在應(yīng)用程序中經(jīng)常要使用一些位圖、菜單之類的資源,VC中以rc為擴(kuò)展名的文件稱為資源文件,其中包含了應(yīng)用程序中用到的所有的windows資源,要指出的一點(diǎn)是rc文件可以直接在VC集成環(huán)境中以可視化的方法進(jìn)行編輯和修改。最后要介紹的是以rc2為擴(kuò)展名的文件,它也是資源文件,但這個(gè)文件中的資源不能在VC的集成環(huán)境下直接進(jìn)行編輯和修改,而是由我們自己根據(jù)需要手工地編輯這個(gè)文件。對(duì)于以ico,bmp等為擴(kuò)展名的文件是具體的資源,產(chǎn)生這種資源的途徑很多。使用rc資源文件的目的就是為了對(duì)程序中用到的大量的資源進(jìn)行統(tǒng)一的管理。
好啦,以上都是啰啰嗦嗦的準(zhǔn)備工作。大概需要花費(fèi)一天的時(shí)間吧。
0
回復(fù)
2016-10-29 14:10
@郭偉郭偉100
好啦,以上都是啰啰嗦嗦的準(zhǔn)備工作。大概需要花費(fèi)一天的時(shí)間吧。[圖片]

首先,發(fā)一個(gè)例程的完整程序吧。哈哈。完全的復(fù)制粘貼,待會(huì)邊看邊查邊學(xué)邊解釋。么么噠。

// This is a sample C program for Microsoft C/C++ 6.0.
// The generated DLL is to be linked to PSIM.

// To compile the program into DLL, you can open the workspace file "msvc_dll.dsw" 
// as provided.

// This sample program calculates the rms of a 60-Hz input in[0], and
// stores the output in out[0].

// Variables:
//      t: Time, passed from PSIM by value
//   delt: Time step, passed from PSIM by value
//     in: input array, passed from PSIM by reference
//    out: output array, sent back to PSIM (Note: the values of out[*] can
//         be modified in PSIM)

// The maximum length of the input and output array "in" and "out" is 30.

// Because we used static/global variables in this example, the DLL 
// can only be used once per schematic file.  

#include 

__declspec(dllexport) void simuser (double t, double delt, double *in, double *out)
{
// Place your code here............begin

//  Define following variables as "static" in order to retain their value.
	static double yv=0.0;
	static double yi=0.0;
	static double uv=0.0;
	static double ui=0.0;
	static double iref = 0.0;
	static int count=0;
	static int Ncount = 0;
	static int flagSample=1;
	static int npulse=0;
	static int npulse_next=0;
	static int gating=0;



	double Voref=10.5, Vcarr=10., Va, iL, Vo, Vm;
	double errv, erri, Ts=33.33e-6;

// Calculate the no. of counts in one period
	Ncount=Ts/delt;

// Check if the counter reaches the end of the period. If yes,
// set the sampling flag to 1. 
	if (count == Ncount)
	{
		flagSample=1;
//      Reset the counter to 0.
		count=0;
//      Update the on-time pulse width
		npulse=npulse_next;
	}

// If the sampling flag is 1, sample the inputs and calculate the
// on-time pulse width npulse.
	if (flagSample == 1)
	{
//		Reset the sampling flag
		flagSample=0;

//		Sample the inputs
		Va=fabs(in[0]);
		iL=in[1];
		Vo=in[2];

//		Calculate the outer loop PI controller using Trapezoidal Rule
		errv=Voref-Vo;
		yv=yv+(33.33*errv+uv)*Ts/2.;

		iref=(errv+yv)*Va;

//		Calculate the inner loop PI controller
		erri=iref-iL;
		yi=yi+(3400.*erri+ui)*Ts/2.;

		Vm=yi+0.3*erri;

//		Calculate the on-time pulse width.
//      Note that this value is not used within this sampling period, but 
//      is used at the beginning of the next sampling period.
		npulse_next=Ncount * (Vm/Vcarr);

//		Store old values
		uv=33.33*errv;
		ui=3400.*erri;

	}

// Generate the switch gating signal
	if (count <= npulse )
	{gating=1;}
	else
	{gating=0;}

// Output
	out[0]=gating;
	out[1]=iref;
	out[2]=npulse;

// Note: Among the 3 output variables, "gating" is calculated at
// every time step, but "iref" and "npulse" are calculated only
// once in one sampling period. Both "gating" and "iref" can be
// defined as either static or non-static. 
	
// But if "iref" is defined as non-static, its value will be zero at 
// the points other than the sampling point. In order to see the 
// value at the sampling point, the print step Iprint in the simulation
// control in SIMCAD must be set to 1. Otherwise the sampling point 
// may be skipped, resulting in a waveform of all zero.


// The variable "npulse" must be declared as static as its
// value is used at every time step and must be retained.


// Increment the counter by 1
	count++;

// Place your code here............end
}

0
回復(fù)
2016-10-29 14:33
@郭偉郭偉100
(5)在PSIM免安裝包的examples文件下的customdll文文件中,主要看例程中的pfc_vi_dl,有以下幾個(gè)文件[圖片]了解什么是dsw文件?(這個(gè)文件是workspa文件,需要用VC2010打開(kāi),所以才有了第三步安裝和下載VisualC++2010)不知道為什么不能上傳附件,可能是因?yàn)閯倓偵暾?qǐng)的原因。。。。直接貼上百度的東西吧。。引用鏈接:http://baike.baidu.com/view/1037844.htm文件擴(kuò)展名首先要介紹的是擴(kuò)展名為dsw的文件類型,這種類型的文件在VC中是級(jí)別最高的,稱為Workspace文件。在VC中,應(yīng)用程序是以Project的形式存在的,Project文件以.dsp擴(kuò)展名,在Workspace文件中可以包含多個(gè)Project,由Workspace文件對(duì)它們進(jìn)行統(tǒng)一的協(xié)調(diào)和管理。與dsw類型的Workspace文件相配合的一個(gè)重要的文件類型是以opt為擴(kuò)展名的文件,這個(gè)文件中包含的是在Workspace文件中要用到的本地計(jì)算機(jī)的有關(guān)配置信息,所以這個(gè)文件不能在不同的計(jì)算機(jī)上共享,當(dāng)我們打開(kāi)一個(gè)Workspace文件時(shí),如果系統(tǒng)找不到需要的opt類型文件,就會(huì)自動(dòng)地創(chuàng)建一個(gè)與之配合的包含本地計(jì)算機(jī)信息的opt文件。上面提到Project文件的擴(kuò)展名是dsp,這個(gè)文件中存放的是一個(gè)特定的工程,也就是特定的應(yīng)用程序的有關(guān)信息,每個(gè)工程都對(duì)應(yīng)有一個(gè)dsp類型的文件。以clw為擴(kuò)展名的文件是用來(lái)存放應(yīng)用程序中用到的類和資源的信息的,這些信息是VC中的ClassWizard工具管理和使用類的信息來(lái)源。它實(shí)際上是INI文件的格式,有時(shí)候ClassWizard出問(wèn)題,手工修改CLW文件可以解決.如果此文件不存在的話,每次用ClassWizard的時(shí)候繪提示你是否重建。對(duì)應(yīng)每個(gè)應(yīng)用程序有一個(gè)readme.txt文件,這個(gè)文件中列出了應(yīng)用程序中用到的所有的文件的信息,打開(kāi)并查看其中的內(nèi)容就可以對(duì)應(yīng)用程序的文件結(jié)構(gòu)有一個(gè)基本的認(rèn)識(shí)。在應(yīng)用程序中大量應(yīng)用的是以h和cpp為擴(kuò)展名的文件,以h為擴(kuò)展名的文件稱為頭文件。以cpp為擴(kuò)展名的文件稱為實(shí)現(xiàn)文件,一般說(shuō)來(lái)h為擴(kuò)展名的文件與cpp為擴(kuò)展名的文件是一一對(duì)應(yīng)配合使用的,在h為擴(kuò)展名的文件中包含的主要是類的定義,而在cpp為擴(kuò)展名的文件中包含的主要是類成員函數(shù)的實(shí)現(xiàn)代碼。在應(yīng)用程序中經(jīng)常要使用一些位圖、菜單之類的資源,VC中以rc為擴(kuò)展名的文件稱為資源文件,其中包含了應(yīng)用程序中用到的所有的windows資源,要指出的一點(diǎn)是rc文件可以直接在VC集成環(huán)境中以可視化的方法進(jìn)行編輯和修改。最后要介紹的是以rc2為擴(kuò)展名的文件,它也是資源文件,但這個(gè)文件中的資源不能在VC的集成環(huán)境下直接進(jìn)行編輯和修改,而是由我們自己根據(jù)需要手工地編輯這個(gè)文件。對(duì)于以ico,bmp等為擴(kuò)展名的文件是具體的資源,產(chǎn)生這種資源的途徑很多。使用rc資源文件的目的就是為了對(duì)程序中用到的大量的資源進(jìn)行統(tǒng)一的管理。
1
回復(fù)
2016-10-29 14:58
@郭偉郭偉100
LINK--fatal-error-LNK1123-轉(zhuǎn)換到-COFF-期間失敗-文件無(wú)效或損壞-還有warning-C4996.docVisualC++文件擴(kuò)展名.docxVisualStudio2010安裝實(shí)戰(zhàn)教程.docxVisualStudio2010入門級(jí)使用教程.pdf
程序解釋如下:
(1):寫(xiě)動(dòng)態(tài)鏈接庫(kù)DLL相關(guān)的程序的時(shí)候,要用的兩個(gè)語(yǔ)句:第一是_declspec(dllimport),是DLL的導(dǎo)入,第二個(gè)是__declspec(dllexport),是DLL中的導(dǎo)出。
(2)__declspec(dllexport) void simuser (t, delt, in, out)要加上參數(shù)類型。比如__declspec(dllexport) void simuser (double t, double delt, double *in, double *out)         
 t指的是時(shí)間;delt指的是仿真步長(zhǎng);這兩個(gè)都在你的仿真電路的時(shí)鐘控制里面設(shè)置,編程不用管?。?!
 in和out分別對(duì)應(yīng)輸入輸出,用的時(shí)候直接用用數(shù)組形式賦值,比如a=in[0],out[0]=b;
英文解釋如下:
// Variables:
//      t: Time, passed from PSIM by value
//   delt: Time step, passed from PSIM by value
//     in: input array, passed from PSIM by reference
//    out: output array, sent back to PSIM (Note: the values of out[*] can
//         be modified in PSIM)
0
回復(fù)
2016-10-29 15:13
@郭偉郭偉100
程序解釋如下:(1):寫(xiě)動(dòng)態(tài)鏈接庫(kù)DLL相關(guān)的程序的時(shí)候,要用的兩個(gè)語(yǔ)句:第一是_declspec(dllimport),是DLL的導(dǎo)入,第二個(gè)是__declspec(dllexport),是DLL中的導(dǎo)出。(2)__declspec(dllexport)voidsimuser(t,delt,in,out)要加上參數(shù)類型。比如__declspec(dllexport)voidsimuser(doublet,doubledelt,double*in,double*out) t指的是時(shí)間;delt指的是仿真步長(zhǎng);這兩個(gè)都在你的仿真電路的時(shí)鐘控制里面設(shè)置,編程不用管?。。n和out分別對(duì)應(yīng)輸入輸出,用的時(shí)候直接用用數(shù)組形式賦值,比如a=in[0],out[0]=b;英文解釋如下://Variables://t:Time,passedfromPSIMbyvalue//delt:Timestep,passedfromPSIMbyvalue//in:inputarray,passedfromPSIMbyreference//out:outputarray,sentbacktoPSIM(Note:thevaluesofout[*]can//bemodifiedinPSIM)

DLL模塊有小圓圈的一頭從上往下依次是in[0],[1],[2]和out[0],[1],[2]……

1
回復(fù)
bone2
LV.1
9
2016-10-29 16:48
太強(qiáng)了,lz大神,一起學(xué)習(xí)...
0
回復(fù)
2016-10-29 18:37
@郭偉郭偉100
DLL模塊有小圓圈的一頭從上往下依次是in[0],[1],[2]和out[0],[1],[2]……[圖片][圖片]

看程序用到了梯形積分法,即Trapezoidal Rule,先學(xué)一下幾個(gè)基本的數(shù)學(xué)概念吧。

0
回復(fù)
2016-10-31 12:16
@郭偉郭偉100
看程序用到了梯形積分法,即TrapezoidalRule,先學(xué)一下幾個(gè)基本的數(shù)學(xué)概念吧。[圖片][圖片][圖片][圖片]

基于梯形積分PI控制的LED反激式開(kāi)關(guān)電源的研究_孫大洋.pdf

看一下這個(gè)文章,來(lái)更好的理解梯形積分吧。。。

//		Calculate the outer loop PI controller using Trapezoidal Rule
		errv=Voref-Vo;
		yv=yv+(33.33*errv+uv)*Ts/2.;

		iref=(errv+yv)*Va;

//		Calculate the inner loop PI controller
		erri=iref-iL;
		yi=yi+(3400.*erri+ui)*Ts/2.;

		Vm=yi+0.3*erri;
這段就是梯形積分的算法程序

errv=Voref-Vo;//是指誤差電壓=輸出參考電壓-采樣輸出電壓;errv是誤差電壓信號(hào);

yv=yv+(33.33*errv+uv)*Ts/2.;//是誤差電壓信號(hào)的積分累積量(這里就是梯形積分,比例系數(shù)為0,積分系數(shù)為33.33),誤差電壓信號(hào)是有正有負(fù)的,我們希望它的值最后趨于一個(gè)穩(wěn)定值,這個(gè)穩(wěn)定值是一個(gè)很小的數(shù),此時(shí)就說(shuō)明輸出電壓和參考電壓相差不大,是自己想要的電壓;

iref=(errv+yv)*Va;//這是一個(gè)輸出由監(jiān)視功能的電感電流量,ires和誤差電壓信號(hào)errv、誤差電壓信號(hào)的積分累計(jì)量yv、采樣的輸入電壓的絕對(duì)值Va都有關(guān)系。Va的絕對(duì)值是一個(gè)饅頭波,所以iref也是饅頭波。

以上是外部電壓環(huán)的PI控制器算法;


erri=iref-iL;//iL是采樣的輸入電流,功率因數(shù)校正就是希望iL的波形跟隨輸入電壓的變化而變化,也是一個(gè)饅頭波,iref就是一個(gè)饅頭波,所以希望誤差信號(hào)erri越小越好。

yi=yi+(3400.*erri+ui)*Ts/2.;//是誤差電流信號(hào)的積分累積量(這里就是梯形積分,比例系數(shù)為0,積分系數(shù)為3400),誤差電流信號(hào)是有正有負(fù)的,是一個(gè)不斷調(diào)節(jié)的過(guò)程,我們希望它的值最后趨于一個(gè)穩(wěn)定值,這個(gè)穩(wěn)定值是一個(gè)很小的數(shù),此時(shí)就說(shuō)明輸入電流和參考電流值相差不大,是自己想要的電流;

Vm=yi+0.3*erri;//這句話我猜0.3是比例系數(shù),這里就是加上了電流誤差信號(hào)的比例量,這個(gè)值是最后的控制信號(hào),相當(dāng)于下圖的u(t),用這個(gè)值計(jì)算占空比的大?。?

以上是內(nèi)部電流環(huán)的PI控制器算法;


npulse_next=Ncount * (Vm/Vcarr);//這句話就是用來(lái)計(jì)算占空比的,也就是脈沖寬度;npulse_next/Ncount=Vm/Vcarr,通過(guò)這個(gè)比例式理解這個(gè)占空比計(jì)算公式。

okay,算法基本都看懂了。

1
回復(fù)
2016-10-31 12:20
@郭偉郭偉100
基于梯形積分PI控制的LED反激式開(kāi)關(guān)電源的研究_孫大洋.pdf看一下這個(gè)文章,來(lái)更好的理解梯形積分吧。。。[圖片]//CalculatetheouterloopPIcontrollerusingTrapezoidalRuleerrv=Voref-Vo;yv=yv+(33.33*errv+uv)*Ts/2.;iref=(errv+yv)*Va;//CalculatetheinnerloopPIcontrollererri=iref-iL;yi=yi+(3400.*erri+ui)*Ts/2.;Vm=yi+0.3*erri;這段就是梯形積分的算法程序errv=Voref-Vo;//是指誤差電壓=輸出參考電壓-采樣輸出電壓;errv是誤差電壓信號(hào);yv=yv+(33.33*errv+uv)*Ts/2.;//是誤差電壓信號(hào)的積分累積量(這里就是梯形積分,比例系數(shù)為0,積分系數(shù)為33.33),誤差電壓信號(hào)是有正有負(fù)的,我們希望它的值最后趨于一個(gè)穩(wěn)定值,這個(gè)穩(wěn)定值是一個(gè)很小的數(shù),此時(shí)就說(shuō)明輸出電壓和參考電壓相差不大,是自己想要的電壓;iref=(errv+yv)*Va;//這是一個(gè)輸出由監(jiān)視功能的電感電流量,ires和誤差電壓信號(hào)errv、誤差電壓信號(hào)的積分累計(jì)量yv、采樣的輸入電壓的絕對(duì)值Va都有關(guān)系。Va的絕對(duì)值是一個(gè)饅頭波,所以iref也是饅頭波。以上是外部電壓環(huán)的PI控制器算法;erri=iref-iL;//iL是采樣的輸入電流,功率因數(shù)校正就是希望iL的波形跟隨輸入電壓的變化而變化,也是一個(gè)饅頭波,iref就是一個(gè)饅頭波,所以希望誤差信號(hào)erri越小越好。yi=yi+(3400.*erri+ui)*Ts/2.;//是誤差電流信號(hào)的積分累積量(這里就是梯形積分,比例系數(shù)為0,積分系數(shù)為3400),誤差電流信號(hào)是有正有負(fù)的,是一個(gè)不斷調(diào)節(jié)的過(guò)程,我們希望它的值最后趨于一個(gè)穩(wěn)定值,這個(gè)穩(wěn)定值是一個(gè)很小的數(shù),此時(shí)就說(shuō)明輸入電流和參考電流值相差不大,是自己想要的電流;Vm=yi+0.3*erri;//這句話我猜0.3是比例系數(shù),這里就是加上了電流誤差信號(hào)的比例量,這個(gè)值是最后的控制信號(hào),相當(dāng)于下圖的u(t),用這個(gè)值計(jì)算占空比的大?。籟圖片]以上是內(nèi)部電流環(huán)的PI控制器算法;npulse_next=Ncount*(Vm/Vcarr);//這句話就是用來(lái)計(jì)算占空比的,也就是脈沖寬度;npulse_next/Ncount=Vm/Vcarr,通過(guò)這個(gè)比例式理解這個(gè)占空比計(jì)算公式。okay,算法基本都看懂了。
這個(gè)電路應(yīng)該大家都懂,就是一個(gè)BOOST變換器的功率因數(shù)校正電路。以上有不對(duì)的,歡迎指導(dǎo)我這個(gè)小菜鳥(niǎo),接下來(lái),看懂了電路和程序,心理踏實(shí)了,從第一步開(kāi)始,看看怎么在PSIM仿真軟件中建立DLL模塊吧。嘿嘿。。。。小菜鳥(niǎo)就是一步一步來(lái)
0
回復(fù)
2016-10-31 12:26
@郭偉郭偉100
這個(gè)電路應(yīng)該大家都懂,就是一個(gè)BOOST變換器的功率因數(shù)校正電路。以上有不對(duì)的,歡迎指導(dǎo)我這個(gè)小菜鳥(niǎo),接下來(lái),看懂了電路和程序,心理踏實(shí)了,從第一步開(kāi)始,看看怎么在PSIM仿真軟件中建立DLL模塊吧。嘿嘿。。。。小菜鳥(niǎo)就是一步一步來(lái)

先分享一個(gè)好的帖子,同學(xué)朋友推薦給我的,說(shuō)我可以參考一下。。。學(xué)起來(lái)

http://blog.csdn.net/zhanghy_80/article/details/6431427

0
回復(fù)
2016-10-31 12:29
@郭偉郭偉100
先分享一個(gè)好的帖子,同學(xué)朋友推薦給我的,說(shuō)我可以參考一下。。。學(xué)起來(lái)[圖片]http://blog.csdn.net/zhanghy_80/article/details/6431427
0
回復(fù)
2016-10-31 12:47
@郭偉郭偉100
VC++動(dòng)態(tài)鏈接庫(kù)創(chuàng)建和調(diào)用全過(guò)程詳解.pdf
打開(kāi)dsw文件,看看長(zhǎng)什么樣子:

就是下圖的樣子:嘿嘿

0
回復(fù)
2016-11-01 10:56
帖子已被設(shè)置為頭條,恭喜樓主可添加電源網(wǎng)私人官網(wǎng)微信(dianyuan_com)為好友,領(lǐng)取現(xiàn)金紅包(備注信息:頭條紅包)

      注:現(xiàn)金紅包僅限當(dāng)日領(lǐng)取

      活動(dòng)介紹:http://www.e-ticket.cn/bbs/1531738.html

     

0
回復(fù)
2016-11-01 14:52
@郭偉郭偉100
打開(kāi)dsw文件,看看長(zhǎng)什么樣子:[圖片]就是下圖的樣子:嘿嘿[圖片][圖片]

我的C語(yǔ)言基礎(chǔ)實(shí)在是太差了,所以看這個(gè)例程的外部依賴項(xiàng)的頭文件的時(shí)候,腦子暈暈的,就是除了.cpp文件之外的一些.h文件?好想哭

昨天總結(jié)了一些基礎(chǔ)的(如下word文檔):

C語(yǔ)言符號(hào).docx

2
回復(fù)
2016-11-01 14:53
@電源網(wǎng)-fqd
帖子已被設(shè)置為頭條,恭喜樓主可添加電源網(wǎng)私人官網(wǎng)微信(dianyuan_com)為好友,領(lǐng)取現(xiàn)金紅包(備注信息:頭條紅包)     注:現(xiàn)金紅包僅限當(dāng)日領(lǐng)取     活動(dòng)介紹:http://www.e-ticket.cn/bbs/1531738.html     [圖片]
太開(kāi)心了,謝謝,已加微信,快同意。哈哈
0
回復(fù)
2016-11-02 11:43
@郭偉郭偉100
我的C語(yǔ)言基礎(chǔ)實(shí)在是太差了,所以看這個(gè)例程的外部依賴項(xiàng)的頭文件的時(shí)候,腦子暈暈的,就是除了.cpp文件之外的一些.h文件?[圖片]好想哭昨天總結(jié)了一些基礎(chǔ)的(如下word文檔):C語(yǔ)言符號(hào).docx
最一般的DLL,即非MFC DLL。
1
回復(fù)
2016-11-02 11:46
@郭偉郭偉100
最一般的DLL,即非MFCDLL。
**此帖已被管理員刪除**
1
回復(fù)
2016-11-02 11:47
@郭偉郭偉100
**此帖已被管理員刪除**
經(jīng)過(guò)加殼的.Net程序在使用IL反匯編工具進(jìn)行查看時(shí),將會(huì)提示“沒(méi)有有效CLR頭,無(wú)法反匯編”。
1
回復(fù)
2016-11-02 11:51
@郭偉郭偉100
經(jīng)過(guò)加殼的.Net程序在使用IL反匯編工具進(jìn)行查看時(shí),將會(huì)提示“沒(méi)有有效CLR頭,無(wú)法反匯編”。
動(dòng)態(tài)鏈接庫(kù)中的導(dǎo)出接口可以使用Visual C++的Depends工具進(jìn)行查看
1
回復(fù)
2016-11-02 11:55
@郭偉郭偉100
動(dòng)態(tài)鏈接庫(kù)中的導(dǎo)出接口可以使用VisualC++的Depends工具進(jìn)行查看

打開(kāi)例程中的DLL文件,如圖所示:

0
回復(fù)
2016-11-03 12:29
@郭偉郭偉100
打開(kāi)例程中的DLL文件,如圖所示:[圖片]

VC2010靜態(tài)鏈接庫(kù)的生成:

(標(biāo)準(zhǔn)Turbo C2.0中的C庫(kù)函數(shù)(我們用來(lái)的scanf、printf、memcpy、strcpy等)就來(lái)自這種靜態(tài)庫(kù)。


第一步:打開(kāi)Microsoft Visual Studio 2010,雙擊下圖圖標(biāo)


第二步:新建一個(gè)項(xiàng)目:文件→新建→項(xiàng)目→win32項(xiàng)目(自己輸入項(xiàng)目名稱為static)→點(diǎn)擊“下一步”→選擇“靜態(tài)庫(kù)”,不選附加選項(xiàng)中的預(yù)編譯頭→點(diǎn)擊“完成”。


第三步:在這個(gè)空項(xiàng)目中,添加一個(gè).h文件和一個(gè).cpp文件。名字我們起為static.h和static.cpp

static.h文件:

#ifndef LIB_H
#define LIB_H

	extern "C" int sum(int a,int b);
	extern "C" int substract(int a,int b); 
#endif

static.cpp文件:
#include "static.h"

int sum(int a,int b)
{
	return a+b;
}
int substract(int a,int b)
{
	return a-b;
}
 
生成→編譯→生成test,之后會(huì)在你保存項(xiàng)目的文件下發(fā)現(xiàn)一個(gè)debug文件夾,里面就是你生成static.lib文件,這個(gè)就是我們需要的靜態(tài)鏈接庫(kù)。


第四步:以上三步已經(jīng)生成了靜態(tài)鏈接庫(kù),下面就是講一下如何調(diào)用這個(gè)靜態(tài)鏈接庫(kù):

文件→新建→項(xiàng)目→選擇“空項(xiàng)目”,命名為static1→點(diǎn)擊“確定”

然后將之前static項(xiàng)目下的static.h和static.lib這個(gè)2個(gè)文件復(fù)制到static1項(xiàng)目的目錄下,并在工程中加入static.h文件。

新建一個(gè)static1.cpp文件如下:
#include "static.h"
#include 
#include 

#pragma comment(lib,"static.lib")

int main()
{
	printf("%d\n",sum(1,2));
	printf("%d\n",substract(4,3));
	system("pause");
	return 0;
}


 第五步:編譯,運(yùn)行可得到結(jié)果。

0
回復(fù)
2016-11-03 12:32
@郭偉郭偉100
VC2010靜態(tài)鏈接庫(kù)的生成:(標(biāo)準(zhǔn)TurboC2.0中的C庫(kù)函數(shù)(我們用來(lái)的scanf、printf、memcpy、strcpy等)就來(lái)自這種靜態(tài)庫(kù)。)第一步:打開(kāi)MicrosoftVisualStudio2010,雙擊下圖圖標(biāo)[圖片]第二步:新建一個(gè)項(xiàng)目:文件→新建→項(xiàng)目→win32項(xiàng)目(自己輸入項(xiàng)目名稱為static)→點(diǎn)擊“下一步”→選擇“靜態(tài)庫(kù)”,不選附加選項(xiàng)中的預(yù)編譯頭→點(diǎn)擊“完成”。[圖片]第三步:在這個(gè)空項(xiàng)目中,添加一個(gè).h文件和一個(gè).cpp文件。名字我們起為static.h和static.cppstatic.h文件:#ifndefLIB_H#defineLIB_Hextern"C"intsum(inta,intb);extern"C"intsubstract(inta,intb);#endifstatic.cpp文件:#include"static.h"intsum(inta,intb){returna+b;}intsubstract(inta,intb){returna-b;}生成→編譯→生成test,之后會(huì)在你保存項(xiàng)目的文件下發(fā)現(xiàn)一個(gè)debug文件夾,里面就是你生成static.lib文件,這個(gè)就是我們需要的靜態(tài)鏈接庫(kù)。[圖片]第四步:以上三步已經(jīng)生成了靜態(tài)鏈接庫(kù),下面就是講一下如何調(diào)用這個(gè)靜態(tài)鏈接庫(kù):文件→新建→項(xiàng)目→選擇“空項(xiàng)目”,命名為static1→點(diǎn)擊“確定”然后將之前static項(xiàng)目下的static.h和static.lib這個(gè)2個(gè)文件復(fù)制到static1項(xiàng)目的目錄下,并在工程中加入static.h文件。[圖片]新建一個(gè)static1.cpp文件如下:#include"static.h"#include#include#pragmacomment(lib,"static.lib")intmain(){printf("%d\n",sum(1,2));printf("%d\n",substract(4,3));system("pause");return0;}[圖片]第五步:編譯,運(yùn)行可得到結(jié)果。[圖片]
調(diào)用庫(kù)的時(shí)候,千萬(wàn)注意,新建的項(xiàng)目不能還按照第一步建立靜態(tài)庫(kù)的步驟來(lái),不然會(huì)出現(xiàn)這樣的錯(cuò)誤,昨天一直沒(méi)悟過(guò)來(lái),浪費(fèi)時(shí)間!?。?!

0
回復(fù)
2016-11-03 14:35
@郭偉郭偉100
VC2010靜態(tài)鏈接庫(kù)的生成:(標(biāo)準(zhǔn)TurboC2.0中的C庫(kù)函數(shù)(我們用來(lái)的scanf、printf、memcpy、strcpy等)就來(lái)自這種靜態(tài)庫(kù)。)第一步:打開(kāi)MicrosoftVisualStudio2010,雙擊下圖圖標(biāo)[圖片]第二步:新建一個(gè)項(xiàng)目:文件→新建→項(xiàng)目→win32項(xiàng)目(自己輸入項(xiàng)目名稱為static)→點(diǎn)擊“下一步”→選擇“靜態(tài)庫(kù)”,不選附加選項(xiàng)中的預(yù)編譯頭→點(diǎn)擊“完成”。[圖片]第三步:在這個(gè)空項(xiàng)目中,添加一個(gè).h文件和一個(gè).cpp文件。名字我們起為static.h和static.cppstatic.h文件:#ifndefLIB_H#defineLIB_Hextern"C"intsum(inta,intb);extern"C"intsubstract(inta,intb);#endifstatic.cpp文件:#include"static.h"intsum(inta,intb){returna+b;}intsubstract(inta,intb){returna-b;}生成→編譯→生成test,之后會(huì)在你保存項(xiàng)目的文件下發(fā)現(xiàn)一個(gè)debug文件夾,里面就是你生成static.lib文件,這個(gè)就是我們需要的靜態(tài)鏈接庫(kù)。[圖片]第四步:以上三步已經(jīng)生成了靜態(tài)鏈接庫(kù),下面就是講一下如何調(diào)用這個(gè)靜態(tài)鏈接庫(kù):文件→新建→項(xiàng)目→選擇“空項(xiàng)目”,命名為static1→點(diǎn)擊“確定”然后將之前static項(xiàng)目下的static.h和static.lib這個(gè)2個(gè)文件復(fù)制到static1項(xiàng)目的目錄下,并在工程中加入static.h文件。[圖片]新建一個(gè)static1.cpp文件如下:#include"static.h"#include#include#pragmacomment(lib,"static.lib")intmain(){printf("%d\n",sum(1,2));printf("%d\n",substract(4,3));system("pause");return0;}[圖片]第五步:編譯,運(yùn)行可得到結(jié)果。[圖片]

#pragma comment(lib,"static.lib"),這一句是顯式的導(dǎo)入靜態(tài)鏈接庫(kù)。


解析#pragma指令 

在所有的預(yù)處理指令中,#Pragma 指令可能是最復(fù)雜的了,它的作用是設(shè)定編譯器的狀態(tài)或者是指示編譯器完成一些特定的動(dòng)作。

#pragma指令對(duì)每個(gè)編譯器給出了一個(gè)方法,在保持與C和C++語(yǔ)言完全兼容的情況下,給出主機(jī)或操作系統(tǒng)專有的特征。依據(jù)定義,編譯指示是機(jī)器或操作系統(tǒng)專有的,且對(duì)于每個(gè)編譯器都是不同的。

其格式一般為: #Pragma Para其中Para 為參數(shù),下面來(lái)看一些常用的參數(shù)。


(1)message 參數(shù)。 Message 參數(shù)是我最喜歡的一個(gè)參數(shù),它能夠在編譯信息輸出窗口中輸出相應(yīng)的信息,這對(duì)于源代碼信息的控制是非常重要的。

其使用方法為:#Pragma message(“消息文本”)

當(dāng)編譯器遇到這條指令時(shí)就在編譯輸出窗口中將消息文本打印出來(lái)。當(dāng)我們?cè)诔绦蛑卸x了許多宏來(lái)控制源代碼版本的時(shí)候,我們自己有可能都會(huì)忘記有沒(méi)有正確的設(shè)置這些宏,此時(shí)我們可以用這條指令在編譯的時(shí)候就進(jìn)行檢查。假設(shè)我們希望判斷自己有沒(méi)有在源代碼的什么地方定義了_X86這個(gè)宏可以用下面的方法

#ifdef _X86
#Pragma message(“_X86 macro activated!”)
#endif

當(dāng)我們定義了_X86這個(gè)宏以后,應(yīng)用程序在編譯時(shí)就會(huì)在編譯輸出窗口里顯示“_X86 macro activated!”。我們就不會(huì)因?yàn)椴挥浀米约憾x的一些特定的宏而抓耳撓腮了。


(2)另一個(gè)使用得比較多的pragma參數(shù)是code_seg。

格式如:#pragma code_seg( ["section-name"[,"section-class"] ] )

它能夠設(shè)置程序中函數(shù)代碼存放的代碼段,當(dāng)我們開(kāi)發(fā)驅(qū)動(dòng)程序的時(shí)候就會(huì)使用到它。


(3)#pragma once (比較常用)只要在頭文件的最開(kāi)始加入這條指令就能夠保證頭文件被編譯一次,這條指令實(shí)際上在VC6中就已經(jīng)有了,但是考慮到兼容性并沒(méi)有太多的使用它。


(4)#pragma hdrstop表示預(yù)編譯頭文件到此為止,后面的頭文件不進(jìn)行預(yù)編譯。BCB可以預(yù)編譯頭文件以加快鏈接的速度,但如果所有頭文件都進(jìn)行預(yù)編譯又可能占太多磁盤空間,所以使用這個(gè)選項(xiàng)排除一些頭文件。 

有時(shí)單元之間有依賴關(guān)系,比如單元A依賴單元B,所以單元B要先于單元A編譯。你可以用#pragma startup指定編譯優(yōu)先級(jí),如果使用了#pragma package(smart_init) ,BCB就會(huì)根據(jù)優(yōu)先級(jí)的大小先后編譯。 


(5)#pragma resource "*.dfm"表示把*.dfm文件中的資源加入工程。*.dfm中包括窗體外觀的定義。 


(6)#pragma warning( disable : 4507 34; once : 4385; error : 164 )

等價(jià)于:

#pragma warning(disable:4507 34) // 不顯示4507和34號(hào)警告信息
#pragma warning(once:4385) // 4385號(hào)警告信息僅報(bào)告一次
#pragma warning(error:164) // 把164號(hào)警告信息作為一個(gè)錯(cuò)誤。
同時(shí)這個(gè)pragma warning 也支持如下格式: 

#pragma warning( push [ ,n ] )
#pragma warning( pop ) 

 這里n代表一個(gè)警告等級(jí)(1---4)。。

#pragma warning( push, n)保存所有警告信息的現(xiàn)有的警告狀態(tài),并且把全局警告等級(jí)設(shè)定為n。 

#pragma warning( pop )向棧中彈出最后一個(gè)警告信息,在入棧和出棧之間所作的一切改動(dòng)取消。例如:

#pragma warning( push )
#pragma warning( disable : 4705 )
#pragma warning( disable : 4706 )
#pragma warning( disable : 4707 )
//.......
#pragma warning( pop )
 在這段代碼的最后,重新保存所有的警告信息(包括4705,4706和4707)。

(7)pragma comment(...)該指令將一個(gè)注釋記錄放入一個(gè)對(duì)象文件或可執(zhí)行文件中。常用的lib關(guān)鍵字,可以幫我們連入一個(gè)庫(kù)文件。

0
回復(fù)
2016-11-03 14:51
@郭偉郭偉100
VC2010靜態(tài)鏈接庫(kù)的生成:(標(biāo)準(zhǔn)TurboC2.0中的C庫(kù)函數(shù)(我們用來(lái)的scanf、printf、memcpy、strcpy等)就來(lái)自這種靜態(tài)庫(kù)。)第一步:打開(kāi)MicrosoftVisualStudio2010,雙擊下圖圖標(biāo)[圖片]第二步:新建一個(gè)項(xiàng)目:文件→新建→項(xiàng)目→win32項(xiàng)目(自己輸入項(xiàng)目名稱為static)→點(diǎn)擊“下一步”→選擇“靜態(tài)庫(kù)”,不選附加選項(xiàng)中的預(yù)編譯頭→點(diǎn)擊“完成”。[圖片]第三步:在這個(gè)空項(xiàng)目中,添加一個(gè).h文件和一個(gè).cpp文件。名字我們起為static.h和static.cppstatic.h文件:#ifndefLIB_H#defineLIB_Hextern"C"intsum(inta,intb);extern"C"intsubstract(inta,intb);#endifstatic.cpp文件:#include"static.h"intsum(inta,intb){returna+b;}intsubstract(inta,intb){returna-b;}生成→編譯→生成test,之后會(huì)在你保存項(xiàng)目的文件下發(fā)現(xiàn)一個(gè)debug文件夾,里面就是你生成static.lib文件,這個(gè)就是我們需要的靜態(tài)鏈接庫(kù)。[圖片]第四步:以上三步已經(jīng)生成了靜態(tài)鏈接庫(kù),下面就是講一下如何調(diào)用這個(gè)靜態(tài)鏈接庫(kù):文件→新建→項(xiàng)目→選擇“空項(xiàng)目”,命名為static1→點(diǎn)擊“確定”然后將之前static項(xiàng)目下的static.h和static.lib這個(gè)2個(gè)文件復(fù)制到static1項(xiàng)目的目錄下,并在工程中加入static.h文件。[圖片]新建一個(gè)static1.cpp文件如下:#include"static.h"#include#include#pragmacomment(lib,"static.lib")intmain(){printf("%d\n",sum(1,2));printf("%d\n",substract(4,3));system("pause");return0;}[圖片]第五步:編譯,運(yùn)行可得到結(jié)果。[圖片]

extern "C"的主要作用就是為了能夠正確實(shí)現(xiàn)C++代碼調(diào)用其他C語(yǔ)言代碼。加上extern "C"后,會(huì)指示編譯器這部分代碼按C語(yǔ)言的進(jìn)行編譯,而不是C++的。由于C++支持函數(shù)重載,因此編譯器編譯函數(shù)的過(guò)程中會(huì)將函數(shù)的參數(shù)類型也加到編譯后的代碼中,而不僅僅是函數(shù)名;而C語(yǔ)言并不支持函數(shù)重載,因此編譯C語(yǔ)言代碼的函數(shù)時(shí)不會(huì)帶上函數(shù)的參數(shù)類型,一般只包括函數(shù)名。

例如,假設(shè)某個(gè)函數(shù)的原型為:

void foo( int x, int y );

該函數(shù)被C編譯器編譯后在符號(hào)庫(kù)中的名字為_(kāi)foo,而C++編譯器則會(huì)產(chǎn)生像_foo_int_int之類的名字(不同的編譯器可能生成的名字不同,但是都采用了相同的機(jī)制,生成的新名字稱為“mangled name”)。

_foo_int_int這樣的名字包含了函數(shù)名、函數(shù)參數(shù)數(shù)量及類型信息,C++就是靠這種機(jī)制來(lái)實(shí)現(xiàn)函數(shù)重載的。 例如,在C++中,函數(shù)void foo( int x, int y )與void foo( int x, float y )編譯生成的符號(hào)是不相同的,后者為_(kāi)foo_int_float。

0
回復(fù)
2016-11-08 18:21
@郭偉郭偉100
DLL模塊有小圓圈的一頭從上往下依次是in[0],[1],[2]和out[0],[1],[2]……[圖片][圖片]

在PSIM電路中,不用的輸入口一定要接地,不用的輸出口懸空即可。

比如你用PSIM中的DLL模塊,實(shí)驗(yàn)中需要設(shè)置4個(gè)輸入端,9個(gè)輸出端,那么你可以用12input的DLL模塊,不用的輸入口一接地,不用的輸出口懸空即可。

或者你可以用Eelements→other→General DLL Block,自行設(shè)置輸入、輸出量個(gè)數(shù)。

0
回復(fù)
@郭偉郭偉100
太開(kāi)心了,謝謝,已加微信,快同意。哈哈[圖片]
我也是PSIM初學(xué)者,很開(kāi)心看到這么詳細(xì)的帖子,姐姐好厲害
0
回復(fù)
2019-07-06 13:56
@郭偉郭偉100
(4)外置DLL功能塊,需要用C語(yǔ)言或者C++編程,然后用PSIM連接起來(lái)。所以要安裝MicrosoftVisualC++2010。。找?guī)熃阋陌惭b包,按照《VisualStudio2010安裝實(shí)戰(zhàn)教程》的步驟安裝的。安裝好之后,寫(xiě)了一個(gè)printf("HELLO\n");的程序,仿真出錯(cuò),提示錯(cuò)誤原因是:LINK--fatal-error-LNK1123-轉(zhuǎn)換到-COFF-期間失敗-文件無(wú)效或損壞-還有warning-C4996??砂俣冉鉀Q該問(wèn)題,替換一個(gè)文件即可。。。。(備注有說(shuō)方法。)[圖片]當(dāng)然我也是C語(yǔ)言初學(xué)者,哈哈,之后可能看程序需要一句一句查了。。。勿噴。么么噠。我是弱女子。哈哈[圖片]備注:在電腦里面搜索發(fā)現(xiàn)路徑1:C:\ProgramFiles\MicrosoftVisualStudio10.0\VC\bin (說(shuō)明:我的安裝目錄是在D盤,所以我找的是D盤里面的D:\MicrosoftVisualC++2010\VC\bin)路徑2:C:\Windows\winsxs\x86_netfxcvtres_for_vc_and_vb_b03f5f7f11d50a3a_6.1.7600.16385_none_ba476986f05abc65(說(shuō)明:我在我的電腦的C:\Windows\winsxs路徑下找到這三個(gè)文件,三個(gè)里面都有cvtres.exe文件,我找了一個(gè)最新的去替代上面路徑中的cvtres.exe文件)[圖片]路徑3:C:\Windows\Microsoft.NET\Framework\v4.0.30319這三個(gè)路徑里面都有cvtres.exe文件,嘗試使用第二個(gè)路徑里面的文件替換第一個(gè)路徑的文件,問(wèn)題解決。(這個(gè)問(wèn)題是windows自動(dòng)更新造成編譯器cvtres.exe的版本過(guò)低,如果windows再次更新,則還可能出現(xiàn)這樣的問(wèn)題,屆時(shí)再重復(fù)一下上述步驟即可。)
樓主很棒啊,說(shuō)的很詳細(xì)。正好我也要學(xué),仔細(xì)看看~
0
回復(fù)
vugi
LV.1
31
2020-03-10 17:30
@郭偉郭偉100
基于梯形積分PI控制的LED反激式開(kāi)關(guān)電源的研究_孫大洋.pdf看一下這個(gè)文章,來(lái)更好的理解梯形積分吧。。。[圖片]//CalculatetheouterloopPIcontrollerusingTrapezoidalRuleerrv=Voref-Vo;yv=yv+(33.33*errv+uv)*Ts/2.;iref=(errv+yv)*Va;//CalculatetheinnerloopPIcontrollererri=iref-iL;yi=yi+(3400.*erri+ui)*Ts/2.;Vm=yi+0.3*erri;這段就是梯形積分的算法程序errv=Voref-Vo;//是指誤差電壓=輸出參考電壓-采樣輸出電壓;errv是誤差電壓信號(hào);yv=yv+(33.33*errv+uv)*Ts/2.;//是誤差電壓信號(hào)的積分累積量(這里就是梯形積分,比例系數(shù)為0,積分系數(shù)為33.33),誤差電壓信號(hào)是有正有負(fù)的,我們希望它的值最后趨于一個(gè)穩(wěn)定值,這個(gè)穩(wěn)定值是一個(gè)很小的數(shù),此時(shí)就說(shuō)明輸出電壓和參考電壓相差不大,是自己想要的電壓;iref=(errv+yv)*Va;//這是一個(gè)輸出由監(jiān)視功能的電感電流量,ires和誤差電壓信號(hào)errv、誤差電壓信號(hào)的積分累計(jì)量yv、采樣的輸入電壓的絕對(duì)值Va都有關(guān)系。Va的絕對(duì)值是一個(gè)饅頭波,所以iref也是饅頭波。以上是外部電壓環(huán)的PI控制器算法;erri=iref-iL;//iL是采樣的輸入電流,功率因數(shù)校正就是希望iL的波形跟隨輸入電壓的變化而變化,也是一個(gè)饅頭波,iref就是一個(gè)饅頭波,所以希望誤差信號(hào)erri越小越好。yi=yi+(3400.*erri+ui)*Ts/2.;//是誤差電流信號(hào)的積分累積量(這里就是梯形積分,比例系數(shù)為0,積分系數(shù)為3400),誤差電流信號(hào)是有正有負(fù)的,是一個(gè)不斷調(diào)節(jié)的過(guò)程,我們希望它的值最后趨于一個(gè)穩(wěn)定值,這個(gè)穩(wěn)定值是一個(gè)很小的數(shù),此時(shí)就說(shuō)明輸入電流和參考電流值相差不大,是自己想要的電流;Vm=yi+0.3*erri;//這句話我猜0.3是比例系數(shù),這里就是加上了電流誤差信號(hào)的比例量,這個(gè)值是最后的控制信號(hào),相當(dāng)于下圖的u(t),用這個(gè)值計(jì)算占空比的大??;[圖片]以上是內(nèi)部電流環(huán)的PI控制器算法;npulse_next=Ncount*(Vm/Vcarr);//這句話就是用來(lái)計(jì)算占空比的,也就是脈沖寬度;npulse_next/Ncount=Vm/Vcarr,通過(guò)這個(gè)比例式理解這個(gè)占空比計(jì)算公式。okay,算法基本都看懂了。
樓主有些不懂,還在嗎
0
回復(fù)
發(fā)