
本文档介绍了如何在PSIM软件中使用C语言编程模块。
C 语言编程模块与DLL块不同,C Block允许用户直接输入C代码而无需编译代码。 C解释器引擎将在运行时解释和执行C代码。 这使用户编写自定义C代码变得非常容易,并且可以定义和修改模块的功能。

01
功能说明
C模块的功能如下:

完整的C代码由四部分组成:
全域变量或用户函数定义
SimulationStep 函数
用于在每个时间步骤由PSIM调用的代码。
SimulationBegin 函数
用于初始化代码,在模拟开始时仅调用一次。
SimulationEnd 函数
用于在模拟结束时调用的终止代码,仅调用一次。
所有输入和输出都是 double 数据类型。 输入值存储在“in”数组中,输出值存储在“out”数组中。 C模块的输入/输出节点序列是从顶部到底部。 例如,对于具有2个输入和3个输出的模块,节点分配为:

注:带点的输入引脚为第一个输入in[0],未使用的输入节点必须接地。
02
在Z域中的C模块电路
当在Z域电路中使用C模块时,PSIM将检查在C模块输入端是否与ZOH模块连接。 如果是,它将采用遇到第一个ZOH模块第一个输入开始的采样率,并将这一采样率用于整个模块。 例如,如果有2个输入,并且输入1连接到10kHz ZOH,并且输入2连接到20kHz ZOH,则采样10 kHz并忽略20 kHz。
目前,C模块不支持具有多采样率的输入。 也就是说,C模块中的代码只能以一种采样率运行。
如果在C块的输入处没有直接连接ZOH,则在每个时间步中调用C模块。
03
GetPsimValue 函数应用
通过此函数,C模块可以访问参数文件和其他电路参数。 要在一个参数文件中检索同一个电路图中的变量值,请使用以下代码片段:

如果变量alpha的值成功返回,那么'nStatus'被设置为零。错误处理是可选的。
为了提高仿真速度,应该在SimulationBegin中使用该函数,并且应该将该变量的值分配给全域变量并用于SimulationStep函数。需要注意的是,此函数此时与SimCoder不兼容。
04
说明
每个C模块都是一个独立单元。一个C模块中的全域变量对其他C模块来说是不可见。将C模块中的值传递给另一个C模块或其他任何电路的唯一方法是通过C模块的输入/输出端口。当C模块的输出直接连接到另一个C模块的输入时,PSIM仿真引擎首先运行第一个C模块,然后运行第二个C模块。
注意,与DLL块不同,C模块不可能做调试并逐句运行代码。调试C模块的常用方法是在代码中放置临时的'printf'语句以读取不同执行点处的变量值。下列语句将放置在 SimulationStep 中,以便在每个时间步长显示变量 omega 的值。
printf("Time =%f, omega = %f\n", t, omega);
或者,可以通过选择 "编辑 → 转换为 Visual Studio 2012 项目 (DLL 模块)" 将C模块代码转换为DLL块代码。
05
函数清单
下面列出了C模块支持的函数。有关这些函数的详细说明,请参阅文档:
http://www.powersimtech.com\download\chref.pdf
以下函数在 math.h 首引文件中声明。


以下函数在 complex.h 首引文件中声明。

以下函数在 ctype.h 首引文件中声明。

以下函数在 stdio.h 首引文件中声明。

以下函数在 stdlib.h 首引文件中声明。

以下函数在 string.h 首引文件中声明。

以下函数在 time.h 首引文件中声明。


夜雨聆风