一、基本功能:
1、算法块编辑和定义。
算法块的绘制可以通过UCanCode专业的绘图工具来进行绘制,如下图:

2、定义接口:
可以根据算法块的需要自定义需要的输入端口和输出端口数目,比如我们要计算两个数的和,那就定义两个输入端口,定义一个输出端口,如下:

设定后显示如下图:

3、定义控制逻辑(算法)
算法的定义是采用JavaScript来编写,我们提供了大量的函数,通过这些函数来获取通过输入端口传递进来的数值和字符串(UCanCode的端口不但可以传递数值,也可以传递字符串),也就是您可以通过传进进来的值或者字符串(一般用于矩阵运算)来进行计算,并且UCanCode解决方案也提供了临时或者整个仿真数据存取的变量和内存空间,下面是以上面计算求和运算的控制逻辑:

4、存储算法:
编辑好算法块后,可以直接复制粘贴到左边的工具盒中,如下图:

5、构建仿真:
在画布上创建仿真图跟MatLab的Simulink完全相似,但各有所长,有些我们更加灵活。
1)、在画布上创建图元,有如下方式。
a.直接从左边的工具盒中找到需要的元件拖拉进画布。
b、类似于Simulink本身,在画布上双击鼠标,即显示下拉查询列表,直接输入需要元件的部分名称,会自动搜索需要的元件,单击或者回车即可创建,如下图:

c、在画布上移动到需要的元件上,会在四周显示箭头,单击箭头即可创建复制品,如下图:

d、用鼠标拖拉画布上现成的元件,同时按住Ctrl键,在需要的位置放开鼠标即可复制。
e、使用右键的复制粘贴菜单来复制创建。
2)、接线:
要在端口与端口之间创建连接线,有如下几个方式:
a、点击开始端口按住鼠标,在移动到输出端口放开鼠标,则会自动创建连线。
b、选中多个图元,按住Ctrl键,在需要连接得图元上单击鼠标,即可自动连接,如下图:


c、移动图元,将要连接的端口和端口对齐到一条线上(系统会自动捕捉),则会自动接上。
d、从输出端口按住鼠标移动到需要的位置,放开鼠标,会自动弹出创建元件列表框,从中选中需要创建的元件即可自动创建,自动连接。如下图:

3)、开始仿真:
点击工具条上的运行按钮(
),即可开始仿真,仿真开始后,会实时显示每个端口的数据,如下图:

4、输出
UCanCode提供了多种输出元件或者图表,有2D的,也有3D的,有文本输出,也有曲线(时序图,xy图,3d图),如下:


值列表:

二、解决思路:
1、UCanCode的思路是给开发国产替代软件提供一个高效的基础架构,并开放所有这个架构的源代码。用户可以通过如下几种方式进行拓展:
1)、直接在UCanCode平台基础上进行算法块的积累,这些算法块包括积分块,微分块等等,这些算法块可以直接通过我们提供的JavaScript来进行扩展,也可以进一步定制UCanCode的源码来支持其他脚本语言或者直接调用其他c,或者C++编写的动态库的算法函数。开放的算法库可以积累,也可以分享。UCanCode不对软件的使用收取任何费用,我们只对需要购买这个软件本身源码收费。UCanCode已经提供了数百个算法块,如下:


同时UCanCode提供了仪表盘和游标这些控制元件,通过这些元件可以显示数值,也可以调节数值,如下图:


2)、UCanCode创造性的把组态HMI&SCADA集成到同一个平台,可以直接定义实时变量,全局变量。脚本可以直接操作变量的值,而实时变量可以直接通过OPC,Mobus以及内置通讯驱动从下位机采集数据,传上来的数值再进入仿真模块进行计算输出。

三、高级功能:
1、子图模块:
选中画布上的计算模块,单击鼠标右键,选择“创建子图模块”

(创建前)


(创建后)
2、模块注释掉和解注释:
跟Simulink一样,在调试的时候可以分模块注释,注释的模块会灰色显示,如下图:

3、标注模块
跟Simulink一样,可以将模块进行分组,分组的模块可以整体移动,如下图:

4、自定义属性值:
任何一个图元都可以根据需要定义任意多的变量,这些变量可以用来保存值,也可以用来计算:

当然也可以链接输入变量和输出变量。
5、子图关系浏览:

这点跟MatLab的Simulink类似。
6、着色:
选中画布上的一个元件,可以通过鼠标右键调整前景,字体等,则与其关联的接线则会自动着色和调整字体,如下图:

此外,作为一个非常专业的图形可视化基础架构,我们的源码解决方案远不止这些功能,还包括剪贴板,分组与打散,Undo/Redo,多边形编辑,自动对齐,分层,表格,拖拉,打印等等广泛的功能。为此我们积累超过20年。核心源码超过50万行。
四、案例:
1、输出正弦曲线:
a、绘制一个矩形,设置一个输入一个输出端口。控制脚本如下:

b、放一个输入元件,控制脚本如下:

c、运行输出如下:

2、矩阵运算
我们做坐标按角度旋转,通过矩阵来进行转换,转换矩阵如下:

a、构建的仿真图如下:

b、构建theta角度,控制脚本如下:

g1是全局变量,值通过下面的游标进行调整。
c、构建2 x 2转换矩阵,如上sin, cos, - sin,控制脚本如下:

c、构建2 x 2矩阵,控制脚本如下:

d、构建转换坐标输入矩阵:

e、红色方块矩阵运算模块控制脚本:

f、输出到标签文本。

3、XY曲线
示例如下:

4、3D输出:
选择3D输出元件,控制脚本如下:

输出图像如下:

五、目标:
提供这个架构平台的目的不是要开发一个完全代替MatLab Simulink的软件,这不是我们的目标。我们是希望为开发Simulink这一类建模仿真软件提供一个基础架构平台,并开放所有源代码。平台所有功能均可以根据自己的需要进行定制,无论是工业企业,科研院所,大学机构等只要需要类似的软件都可以基于这个架构去快速构建。实际上全球很多大公司包括:三星电子,LG,现代,西门子,阿尔斯通,高通,华为等都在这个基础上得到很好的应用。
很遗憾,我们并不是Simulink的专家(您才是),甚至Simulink解决方案也不是我们的全部,我们提供了很多工业软件的源码,这个只是其中之一。
希望听到您的宝贵建议,为中国工业软件加油。