核心概念
核心概念
程序结构
在 Ticos Studio 里开发一个程序的过程和组装一块电路板非常类似。一块电路板大体上分为电子元器件以及元器件之间的连线。同样在 Ticos Studio 中,我们可以放置各种不同用途的节点(Nodes),然后用线把他们连接起来。
下图是一张真正可用的逻辑图:
节点
节点(Node)实现预先定义的功能,比如:控制马达,检测距离,显示图像等等。 Ticos Studio 已经内置了很多节点,你也可以通过节点市场使用来自第三方合作伙伴的节点。当然,你自己也可以很容易地创建自定义节点。
节点主要分为七种:
- 工程节点:每一个工程节点对应具体的工程逻辑,由一个或多个工作流组成;
- 驱动节点:每一个驱动节点对应到一个或者一组物理元器件,提供对应元器件的驱动,包括温度传感节点、开关节点等;
- 控制节点:每一个逻辑节点对应逻辑判断,包括 if-else 节点、 switch-case 节点等;
- 运算节点:每一个运算节点对应数据运算、关系运算、逻辑运算等,包括 add 节点、 greater 节点、 min 节点等;
- 基础节点:每一个基础节点对应 Ticos 提供的根节点,包括 input 节点、 output 节点、 from-bus 节点、 to-bus 节点、 jumpyer 节点等;
- 调试节点:每一个调试节点对应 debug 调试状态中使用的节点,包括 watch 节点、 tweak-number 节点等
- 其他节点:具有其他意义的节点。
工程节点
工程节点就是具体实现产品功能的节点。由一个或多个工作流组成。每个工作流都是一个独立功能。
如下就是一个工程节点,实现的功能是:每一秒自动加一。
工程编写完成后,需要将工程节点打包成固件,烧录到对应设备中,来完成硬件开发。
驱动节点
每一个驱动节点对应到一个现实世界中存在的电子元器件。因此不同的模组节点会有不同的操作方式和功能,比如按钮、步进电机、LED 灯、喇叭、存储器等。一些功能较为复杂的元器件,比如液晶屏也可以包装为一个对应的驱动节点。
如果你要使用的元器件没有在 Ticos Studio 中发现对应的驱动节点,你也可以非常容易的创建一个对应的节点。
模组节点通常可以单独运行,比如一个配置好的 LED 模组节点,已经设置了对应的输入为点亮对应的 LED 灯,则我们可以直接运行这个程序(虽然只有一个节点)并看到效果:
运行结果:
因为现实世界中的电子元器件在源源不断的增加,因此原则上 Ticos Studio 支持的模组节点会越来越多。我们提供了相应的节点库供模组合作伙伴源源不断的上传自己的新节点,同时也便于开发者以分类浏览或者搜索的方式顺利的找到自己需要的模组节点。
控制节点
控制节点用于控制程序的执行逻辑。以下为一些逻辑节点的示例:
- if-else - 条件分支,如果条件成立,则输出值1,否则输出值2
- clock - 用类似时钟的方式周期性的触发流程的执行,我们可以设置触发周期的长短
- delay - 延迟一定时间后执行后续流程,我们可以设置延迟时间的长短
运算节点
运算节点可以对数字、字符串、数组等多种数据类型进行数据运算、关系运算和逻辑运算等运算操作。以下为一些运算节点的示例:
- add - 数据运算,输入多个number类型的参数,输出他们的和
- equal - 关系运算,输入两个参数,比较他们是否相等,如果相等输出 true ,否则输入 false
- and - 逻辑运算,输入多个判定条件,都为真,则输出 ture, 否则输出 false
基础节点
根节点,所有其他节点都是由根节点组合而成。包括 input 输入节点、output 输出节点、jumper 连线节点、 to-bus 和 from-bus 桥接节点、not-implemented-in-ticos c++代码节点等
调试节点:
在 debug 模式下具有功能意义的节点,用于开发中进行调试,以下为一些调试节点的示例:
- watch - 调试进程中实时显示输入的值。
- tweak-boolean - 一个固定的布尔值,在调试进程中可动态修改输出的值
- and - 逻辑运算,输入多个判定条件,都为真,则输出 ture, 否则输出 false
其他节点:
其他类型的节点。
节点的输入输出
从外形看,每一个节点都是一个带有一些不同颜色和形状触角的长方形,有一些触角在矩形左边,有一些在矩形右边。在左边的触角我们称为这个节点的输入端,下方触角我们称为节点的输出。
当我们从节点的输入端传入一些数据后,这个节点会根据自己的类型来进行不同的操作,比如作为逻辑节点通常会对输入的数据进行一定的处理然后从下面的输出端输出,而模组节点则通常会根据输入的参数而对绑定的现实物理世界中的电子元器件进行相应的操作,比如改变马达转速、调整 LED 灯的颜色和亮度等。
连接线和信号传递
两个节点之间的数据传递依赖于他们之间的连接线。每一条连接线都是一头连接于某个节点的输出端,另一头连接于某个节点的输入端。哪些触点可以用连接线连接有一定的限制,Ticos Studio 会在运行过程中给出相对清晰的提示。
现实世界中的连接线用于传递电流和信号,而在 Ticos Studio 中,连接线不仅仅可用于传递电信号,也可以用于传递数据,比如一个整数或者一个字符串等。
单线程的计算机程序给人的印象通常是这样的,一步步循序渐进的执行,同一时刻只有一句指令在运行。但是在现实世界中的一块正在运行的电路板上,每一个元器件每时每刻都有电流在进进出出,所有元器件都在工作,而非我们想象中的同一时刻只有一个元器件在运行的这种状态。
在 Ticos Studio 中的执行特征比较接近于上面提到的电路板。这些执行通常由微处理器的时钟信号来驱动。
工作流
一个工作流(Flow)由一组连接起来的节点所构成。虽然理论上一个工作流就可以完整执行一些逻辑和控制流程,但一个现实中的复杂项目通常会由多个工作流来组成并分工协作。
在 Ticos Studio 中,我们可以构建一个工作流,并将这个工作流当做一个自建的新节点拖放到另一个工作流窗口中,而且也像一个节点一样发挥作用。
这种使用方法很自然的构建起了代码工程的模块封装和层级结构,让我们无需因为项目的需求增长而不得不面对越来越长的代码。
项目
以上的节点和工作流更像是在构建组件库,对应到一个具体产品开发的单位是项目(Project)。
有时候我们会需要处理一个复杂的项目情况,比如智慧工厂之类的复杂项目,通常需要对应到多种产品的开发和管理。此时我们就需要进行比较谨慎的项目规划,哪些子产品应该被封装为一个新的模组节点,哪些比较复杂因此应该封装为一个工作流,从而保证在项目层面的工作流不要过于复杂。