C语言自定义模块类型

Scilab允许用户使用C语言自定义所需的功能模块,xcos根据项目复杂程度,由浅入深的提供了三种C语言自定义模块。分别是CBLOCK,CBLOCK2,以及CBLOCK4

三种自定义C语言模块

CBLOCK与CBLOCK2与CBLOCK4的参数对比

参数对比

CBLOCK模块

CBLOCK示例一(1个输入,1个输出):

示例下载
实现一个正弦波输出信号的模型,模型内置一个固定的放大增益参数2。
由于xcos的模型限制,不能实现无输入的模型。必须将外部时钟信号输入至该自定义模型输入端,才能周期性触发CBLOCK模型代码。

所需元件:
Sources -> CLOCK_c
Sources -> TIME_f
User-Defined Functions -> c_block
Sinks -> CSCOPE
CBLOCK示例一

各模块参数

Simulation->Setup参数

CBLOCK代码

/* modify below this line */
{
  double current_time = *t;
  y1[0] = rpar[0] * sin(2*M_PI*50*current_time);
}

*t代表当前仿真时间,CBLOCK必须使用外置信号连接,才能在每个步长下触发代码
rpar[0]代表CBLOCK模块参数System parameters vector,本例作为正弦波信号放大幅值
u1[0]代表CBLOCK输入信号,本例实际接入的是时钟信号,代码中并未参与计算
y1[0]代表CBLOCK输出信号
其中,在CBLOCK参数System parameters vector中,输入了[2],这也就意味着代码中的数组rpar[]对应的数值是2。rpar[0]因此等于2,其参与了正弦波的乘法计算,因此我们可以看到输出的正弦波信号的幅值为2。

如果有多组输入信号,例如两个输入信号,那么请将CBLOCK模块的Input ports sizes参数设置为1,1。
上述1,1中,第一个1表示第一个输入信号的数据类型为1(real),第二个1表示第二个输入信号的数据类型为1(real);如果输入的两个信号均为16位无符号整形数据,那么填入的参数应该为7,7;以此类推。
在CBLOCK代码中,则会出现对应的变量u1[0],u2[0]

如果输入的信号是一个来自Signal Routing的MUX二合一总线信号(假设均为double浮点型),那么请将CBLOCK模块的Input ports sizes参数设置为1。然后在CBLOCK代码中,使用u1[0],u1[1]来进行计算。

对于输出信号y1[]的处理,与上述输入信号u1[]的描述相同,不再赘述。

CBLOCK示例二(2个输入,1个输出):

示例下载
实现一个正弦波输出信号的模型,无内置增益参数
外部正弦信号触发CBLOCK模块代码,外置固定增益值3

所需元件:
Sources -> CLOCK_c
Sources -> GENSIN_f
Sources -> CONST
User-Defined Functions -> c_block
Sinks -> CMSCOPE

CBLOCK示例二

各模块参数

Simulation->Setup参数 & CLOCK_c设置

CBLOCK代码

/* modify below this line */
{
  y1[0] = u1[0] * u2[0];
}

上述示例基于版本Scilab 2026.0.1

最后修改:2026 年 04 月 30 日
如果觉得我的文章对你有用,请随意赞赏