1.慧鱼编程软件包下载 2.慧鱼软件安装方法 3.慧鱼软件的两种打开方式 4.慧鱼软件的环境设置 5.TXT控制器的固件升级问题 6.查看示例程序、说明书 7.软件基础介绍 8.TXT控制器简介 9.流程图 10.开环程序 11.闭环程序 12.数字分支 13.边沿触发与电平触发 14.逻辑门 15.组合逻辑 16.模拟分支 17.变量 18.子程序 19.数据 20.构建控制面板 |
Robo Pro软件有两种打开方式,在【开始】->【所有程序】中的ROBORro文件夹下: 1. 点击“fischertechnik ROBOTICS Terminal”进入ROBORro动画窗口,之后点击窗口中 的“SOFTWARE ROBO PRO”按钮进入软件界面。 2. 直接点击“ROBOPRO”进入软件界面。 上述两种方法,如下图所示:
初次安装并打开软件后,首先要进行正确的环境设置,如果环境设置不正确,在后续的连接控制器和编程过程中可能会出现诸多问题。环境设置如下图所示:
新拆封的TXT控制初次与ROBOPRO软件连接时,软件窗口会弹出“Firmware update固件升级”的提示,这时我们要点击“确定”按钮。但是很多时候升级过程中会出现问题,界面会出现滚动条“停滞”的假死机状态。这个问题常常是因为软件环境设置不正确(会造成端口不匹配)造成的。
在进行正确的升级前请将软件环境设置成与控制器对应的选项,然后再进行硬件连接,这时固件升级的过程就不会出现错误了。如下图所示:
在软件的安装目录下,我们可以找到名为“sample programs”的文件夹,该文件夹下有大量示例程序。同时,在安装目录下的RoboProEN.chm为软件使用教程,TXT-Controller_en.pdf为TXT控制器的使用说明。如下图所示:
大多数应用软件使用图形用户界面(GUI),因此熟悉GUI将帮助你找到所需的工具,从而更轻松地学习软件。 RoBo Pro软件的人机界面设计花费了大量的时间和精力,目的是帮助你与软件环境进行交互,使软件易于使用,。
计算机软件RoBo Pro
确保你的计算机上安装了RoBo Pro软件。 打开软件并使屏幕最大化。 你的屏幕应该看起来如下图所示 ,其中包括四个区域:菜单栏,工具栏,程序模块窗口和编程窗口。
在开始编写程序之前,你需要设置好编程环境(environment)。由于使用的是TXT控制器,因此菜单栏中的环境选项必须勾选“TX/TXT Controllor”。(注,如果环境设置的与实际调试的控制器类型不同,那么程序运行可能会出现问题。)
从菜单栏中选择级别(level)下拉菜单。 将选项设置为1级:初学者。
之后点击菜单中的文件(file)下拉菜单并选择新建(new)或者选择工具栏中的新建。
这将打开程序窗口,现在可以准备好写你的第一个程序了。
在编程模块栏中,左键单击并并按住“开始(start)”模块并将其拖拽到程序窗口,然后释放左侧按钮。
在程序编辑窗口中你将看到“开始(start)”模块。
使用相同的方法将“停止(stop)”和“时间延迟(Time delay)”模块放置在编辑窗口中。
为了使你的程序能够运行需要将模块连接起来。 我们用称为程序流程线的蓝色线段来连接模块。 流程线最后有一个箭头来指示程序的流向。 注意“开始(start)”模块只有一个流程线出口,“停止(stop)”模块只有一个流程线入口。在开始模块或停止模块之外不允许有未接线的模块存在(这种情况下,运行程序时会报错)。 移动鼠标悬停在流程线出口与模块的相交位置,此时你会看到带有十字的手图标。
在此位置单击鼠标左键后释放(建立第一个锚点)。 之后移动鼠标,带有箭头的流程线将追随你的鼠标进行移动。
你可以在编程窗口中的任何位置点击鼠标左键,然后流程线箭头会在你指定的位置建立锚点,然后你继续拖动鼠标,流程线会继续跟着鼠标延伸。请进行几次练习以熟悉使用鼠标绘制流程线的操作。
点击键盘上的退出(ESC)按钮,退出鼠标牵引状态,此时,以绘制的程序流程线将保留在编辑窗口中。
现在将鼠标悬停在流程线上并单击鼠标左键。 被选中的流程线将显示为红色。 一旦它是红色的,你可以点击键盘的删除键(delete),流程线将消失。
左键单击并按住“时间延迟(time delay)”模块,你将能够将其拖动到编辑窗口中的任何位置,这里我们将其放置在“开始(start)”模块的下方。
在“开始(start)”模块到“时间延迟(time delay)”模块之间绘制一条流程线。 点击“开始(start)”模块的流程线出口,将鼠标移动到“时间延迟(time delay)”模块的流程线入口上,然后再次点击左键,两个模块就通过流程线建立了连接。
现在选择“停止(stop)”模块。 将其拖动到接近“时间延迟(time delay)”模块的流程线出口附近时。 你会看到一根流程线自动出现了。
放开模块,程序现在应该看起来如下图所示。
现在可以点击任何模块,并在编辑窗口中移动它们,直到你感觉模块和流程线的摆放位置看起来规整舒适为止。
接下来我们将编辑“时间延迟(time delay)”模块,更改它等待的时间。
右键单击“时间延迟(time delay)”模块。 你会看到弹出的属性设置面板。 在时间文字框中输入10。
完成后,请选择确定关闭窗口。 这时你会发现“时间延迟(time delay)”模块上的文字显示发生了改变,表示它将等待10秒钟。
进行程序注释是一个好习惯。 虽然这个程序很简单,但开始良好的习惯永远不嫌太早。 从程序模块窗口中选择文本工具(text)。
现在点击“开始(start)”模块的右侧。 你会看到一个小方块出现,现在开始打字。
继续在你的程序上对其他模块进行文字描述。
现在是测试第一个程序的时候了。 选择工具栏上的COM / USB图标。 这将打开“接口/端口”对话框。 选择仿真(simulation)单选按钮,之后点击ok键。
找到并点击工具栏上的程序运行按钮。
为了使用计算机来控制模型,你需要robo pro编程软件和一个TXT控制器。 TXT控制器可以处理来自传感器的信号,并转换软件命令,以便计算机可以控制电机等。
TXT控制器、9V直流电源、USB线、开关、灯
控制器的各个部分是:
9V-IN:连接9V电池,也可连接9V直流电源供电
USB端口:通过USB线缆连接电脑
输出(O1-O8或M1-M4):输出端口,O1-O8为任何连接到它们的组件提供9V的电力,01-08和接地端子一起使用,可以控制8个不同的输出。连接到这些输出的组件可以是: 电机,灯,电磁阀,蜂鸣器和电磁铁。 M1-M4是一种差分连接方式,两个相邻接线端子的极性相反,这种方式可以控制电机双向运转。
通用输入(I1-I8):输入端口,它们既可以识别数字量(1或0)输入,也可以读取电压和电流的模拟量输入。
脉冲计数输入(C1-C4):数字量输入。它们通常与编码电机上的编码信号线进行连接,也可以作为通用数字输入口使用。
EXT扩展口:将控制器并联在一起以增加更多的输入、输出端口。
使用导线将接触开关以“常开”接法的连接到控制器上的I1输入。 开关使用端子1和3进行连线成为常开接法。
将导线的另一端连接到控制器上标记为I1的两个端口。
将灯连接到上图中的M1输出端口。 线连接完成后如图所示。
通过USB线将计算机和控制器连接到一起,使用9V直流电源为TXT控制器进行供电,长按控制器ON/OFF键3秒以打开控制器。
下面开始测试软件与控制器的连接。
打开RoBo Pro软件,将编程环境(Environment)选项设置为ROBO TX/TXT Controller。
你可能会看到一个警告对话框,它提示你只是改变了环境而不是实际的接口连接,点击确定键。
之后点击工具栏上的COM / USB图标。
在对话框中点击选择USB /WLAN/Bluetooth和ROBO TXT Controller两项,之后点击OK按钮。
因为我们用的是USB线连接控制器,因此这里我们选择Default USB并点击OK。
点击工具栏上的测试接口板(Test interface)图标来测试控制器。 下图为弹出的测试接口板(Test interface)对话框。
按下连接到控制器I1端口的开关。 看看测试接口板(Test interface)对话框中会发生什么变化?如果I1端口旁边的复选框出现“√”并且旁边的文字框里显示1,所以你的开关连接没有问题。
现在点击M1旁边的cw或ccw按钮时,会观察到什么现象? 移动M1旁边的滑块, 观察灯发生的变化。当点击cw时看到灯亮,当滑动滑块时观察灯的明暗发生变化,说明你的灯连接的没有问题。
通过软件的接口板测试界面对TXT控制器上的各路输入输出进行测试。
流程图是算法的图形化表示,经常在程序的设计阶段用来描述程序的编程逻辑。流程图使用简单的几何符号和箭头来定义元素之间的关系。本章节将向你介绍流程图符号。由于Robo Pro软件是基于流程图的软件,因此这将帮助你了解Robo Pro程序的编程逻辑。
纸、铅笔
虽然专业的程序员会使用种类繁多的符号,但我们将专注于最常用的符号。 你需要熟悉基本的形状和它们所表达的意思。
上图所示,起止符号用于指示程序的开始或结束。
上图所示,进程符号表示发生的进程。这可能是打开电机或灯、获取变量的值、设置输入或输出引脚等。
上图所示,决定符号用于在比较变量后或判断开关的位置后使程序沿不同的分支线继续运行。
上图所示,数据符号用于分配变量并允许我们设置参数。这种符号形状也用于将输入对象和输出对象分配到变量,或者定义时间延迟。
上图所示,流程线是将各个编程模块连接在一起的带箭头的线体。
下图所示的流程图,观察并体会通过它的每一步流程所表达出来的程序逻辑。
通过流程图来理解程序的编程逻辑
循环模式允许程序中的代码重复执行。开环系统是一个控制系统在系统运行时没有收到任何反馈的系统。有一个输入,一个过程,然后是一个输出。 例如,当你将餐具放入洗碗机并启动时,洗碗机将开始运行。洗碗机并不知道最后的餐具是干净的还是不干净的。 人可以决定洗碗机运行多久,一台计时器可以决定在什么时候关闭洗碗机。 在这个章节中,你将学习如何控制机器而无需反馈。
TXT控制器、RoBo Pro软件、灯、电机、导线
启动开环程序控制一台没有其他输入的机器运行。最常见的开环程序是使用一个计时器来控制动作。
打开RoBo Pro软件。新建一个文件。将使用级别(level)设置为级别1:初学者。你将使用到以下编程模块:
鼠标右键单击“电机输出(motor output)”模块,弹出属性对话框,将图标(image)选为灯(lamp)图标,并将其设置为打开(On)或关闭(off)的状态。
右键单击“时间延迟(time delay)”模块,设置持续的时间。
如下图所示创建程序。
硬件连接:将灯连接到TXT控制器的输出端口M1。
运行程序。指示灯应该亮起一秒钟,然后熄灭,程序结束。为了使程序循环执行,需要删除最后的“结束(stop)”模块,并将程序流程线返回到起始处。 修改程序如下图所示。
当你运行程序时会发生什么? 运行该程序,看看你是否正确。 由于这个程序没有结束模块,因此你将不得不点击菜单栏中的“停止(stop)”按钮停止它。
基本系统由一个输入,一个过程和一个输出组成。这些简单的系统被称为开环系统,不能与外界进行交互,仅仅是执行完一个功能并结束。对我们大多数的需求来说,这种简单的开环系统是不够的。闭环系统使用传感器向系统输入反馈,以持续监测和调节系统的运行。 例如,路灯有一个传感器,当天变黑时路灯会自行启动,当变亮时,路灯会自动熄灭。在本节的编程中,我们通过监视传感器并控制程序的执行。
TXT控制器、RoBo Pro软件、导线
所需零件如下表:
零 件 | 数 量 | 零 件 | 数 量 |
齿条60 |
3 | 齿轮箱 |
1 |
双头15mm构建快 |
2 | 铝型材支架210mm |
1 |
微型开关 |
2 | S型电机 |
1 |
底盘 |
1 | 榫键15mm |
2 |
角块10x15x15 |
2 |
|
|
搭建实验模型,参照下图所示。 将电机从变速箱上提起,以便变速箱可以自由的前后滑动。
通过导线将电机连接到TXT控制器上的M1输出端上。
向下推动电机,使电机主轴与齿轮箱中的齿轮啮合上。正确啮合后,你会发现已经无法左右移动电机和齿轮箱了。
编写下面的程序,使电机在齿条上来回移动。在程序的每一步旁边添加文字注释。
添加文字注释需要你从程序模块窗口中选择“文本(text)”模块, 将其拖拽到编程窗口中的相应位置,在文字框可编辑的状态下输入注释文字。
运行程序,你会看到电机在机架上左右移动。
在上面的程序中,你是使用“时间延迟(time delay)”模块来控制电机移动的距离。事实上程序并不知道电机运行到了在哪里。
下面,我们重新装配你的结构,参照下面的图例。这次我们将电机和齿轮箱垂直安装在两个开关之间。
将电机连接到M1端口。通过“常开”接法,将两个开关分别连接到I1(上面的开关)和I2(下面的开关)输入端口上。
为了控制电机沿着机架上下移动,我们需要编写一个程序。 在编写这个程序之前,我们需要确定电机顺时针(cw)运转时的实际方向(向上或向下),从而能够确定哪个开关会在运行方向上被触发(限位开关的作用)。
RoBo Pro提供给了我们一个测试这些问题的工具。它被称为“接口板测试(test interface)”,该工具可以在工具栏中找到。现在打开这个对话框。
首先,按下连接到I1的开关。注意,旁边的复选框会出现“√”标记。对连接到I2的开关执行相同的操作。同时确保输入信号是从0变为1。如果其中一个开关没有信号,请检查线路连接。有时插头松动,或连接不紧,或开关的接法不正确都会导致信号的异常。
接下来,请先确保齿轮箱和电机已经完全啮合,然后点击M1旁边的CCW(反转),让电机稍微移动一下,然后点击stop。CCW代表点击逆时针方向, 此时电机的移动方向应该是下移。如果不是向下移动,请调换电机上红绿两个接线插头的位置(注:这将改变电机的运行方向)。再次测试电机,CW时上行,CCW时下行。一切运转正确后,关闭测试窗口。
本例中,我们要控制电机的运行,直到它触碰到一个(限位)开关,此时电机应该改变方向并向另一个方向移动,直到它与另一个开关接触。再次地,一旦触碰到开关,电机应该改变方向并且永远地来回移动。
这个程序使用了一个特殊类型的含有等待功能的模块,叫做“等待输入(wait for input)”模块, 它在编程模块窗口中可以找到。
将该模块拖拽到编程窗口中,右键单击该模块,弹出其属性设置面板。在这里你可以选择希望程序等待的信号输入端口与信号的类型。
下图是样例程序,每一步都标有注释。
在线运行该程序,观察模型的运转效果。
该程序为闭环程序,通过传感器(接触式开关)的输入信号来控制电机的运行的方向。
通过传感器的使用实现闭环控制
在计算机编程中,循环结构是指一系列指令在达到终止条件前循环执行。一旦达到条件,程序将执行下一条指令。
本节内容向你介绍两种类型的循环。第一种Do / While循环。它也可被称为Do循环或While循环,这取决于你正在使用哪种编程语言。在下面的例子中,当条件A为真时,重复操作B。当A为假时,程序沿false分支转到下一条顺序指令。这里的“真”与“假”是指数字信号1或0。
第二种循环类型称为For / Next循环。这种类型的循环重复一组指令,直到循环计数器达到预设的数值。这与前面的循环有些类似,终止循环的条件是计数器的设置值。一旦达到计数器值,程序就执行下一条顺序指令。如果你考虑使用“计数器值是否等于或大于”这类问题作为判断条件,那么应该使用逻辑“是(yes)”或逻辑“否(no)”来回答。这里的“是”与“否”指数字信号1或0。
TXT控制器、灯、微动开关、9V直流电源、导线
首先在RoBo Pro中创建一个新文件。将环境(Environment)设置为“ROBO TX/TXT Controller”,级别(level)设置为“level1:Beginner”。 点击工具栏中的“COM / USB”,将接口类型设置为USB接线、RoBo Pro TXT控制器。
将下面这些编程模块拖拽到程序编程窗口中。
点击并按住鼠标左键,在包含“电机输出(motor output)”模块和“时间延迟(time delay)”模块的区域画出一个矩形框。
松开鼠标后,这两个模块将一同被选中,显示为高亮。
将鼠标悬停在选中的模块上方,按住键盘上的CTRL键,点击鼠标左键。当你松开左键的时候,你会得到与所选模块相同的复制模块。
重复这个操作,建立四组相同的模块(电机输出模块和时间延迟模块)。在“电机输出(Motor output)”模块的属性面板中,将其设置为灯。其中两个设置为开(on),两个设置为关(off)。
使用流程线连接这些模块,将它们排列成下图。
将灯连接到TXT控制器上的M1输出端口,将开关连接到I1输入端口。
接通TXT控制器的电源并在线运行该程序,观察运行效果。
如果要创建一个带有计数功能的循环结构,我们需要使用“计数循环(counter loop)”模块。
将“计数循环(counter loop)”模块拖拽到编程窗口中,重新编辑你的程序,参考下图。
在线运行该程序,观察按下开关的效果。分析上面两个程序之间的差异。
触发是指程序在接收到预期的数字信号输入时激活程序的一个分支的过程。 这意味着一旦触发器被激活,程序将执行一个功能。 触发方式有两种。
首先是电平触发,当出现所需的输入电平时,程序就会发生分支跳转。电平触发可以是一个高电平或低电平。
当触发是从低电平变为高电平(上升沿)或从高电平变为低电平(下降沿)时,这种触发就是边沿触发(瞬间触发)。
上图描述了电平改变状态时的逻辑波形。逻辑电平分为低电平(0)和高电平(1)。电平之间的转换如波形图中的边沿。上升沿是指从低电平变为高电平,下降沿是指从高电平变为低电。为了演示边沿触发和电平触发之间的区别,下面将构建一个简单的电路模型来进行测试。
软件RoBo Pro、TXT控制器、直流电源、开关、灯
有两个模块决定你的程序如何处理外部输入的触发信号。下图左边的模块是“等待输入(Wait for input)”模块,如图所示,它被设置为等待上升沿(边沿触发)。下图右边的模块是“数字分支(digital branch)”模块,根据开关的状态电平(电平触发),它会选择相应的分支路径。
进行实际的硬件连接,将触发开关以常开触点(端子1和3)的接法连接到TXT控制器上的I1输入端。 将灯连接到控制器上的M1输出端。
本节中控制器上的硬件连接不会改变,但程序会略有不同。观察程序的运行情况将有助于你理解两种触发方式的不同,并有助于你在以后的程序调试中解决问题和排除程序故障。
我们从边沿触发的程序开始。开始一个新的程序,并参照下图画出程序。
运行上面的程序并按住开关15秒钟,观察灯泡的闪烁情况。
下面改编你的程序,将“等待输入(Wait for input)”模块更改为“数字分支(digital branch)”模块。
再次运行上面的程序并按住开关15秒钟,观察会发生什么。 描述灯泡的闪烁情况,并注意与使用“等待输入(Wait for input)”模块时的差异。
接下来我们将使用一个经典的计数显示功能来真实地显示两种触发方式的不同。
在软件中,设置使用级别为“Level 3:Variables(级别3:变量)”,开始一个新的程序。
从“编程模块(program elements)”->“变量,定时器(varibles,timers...)”子分类中,拖拽一个“全局变量(variables(global))”模块到右侧编程窗口中。
从“输入、输出(inputs、outputs)”子分类中,拖拽一个“面板显示(panel display)”模块到右侧编程窗口中。
从“操作模块(operating elements)”->“显示(displays)”子分类中,拖拽一个“文本显示(text display)”模块到右侧编程窗口中。
从“编程模块(program elements)”->“指令(commands)”子分类中,拖拽一个“加(plus)”模块到右侧编程窗口中。
参考下图编辑程序。鼠标右键单击“面板显示(panel display)”模块,将其分配给编程窗口中的文字框(text)模块。注意:这个操作的意思就是将两个模块进行关联。
在线运行该程序,然后尽可能快地按下并释放开关。你会看到文本框中显示的数字,如果你按下与释放开关之间的时间变长,你只会看到文本框中出现问号(因为数值变大会超出文本框中默认的数位显示宽度)。
将上面程序中的“数字分支(digital branch)”模块替换为“等待输入(Wait for input)”模块。再次运行程序并单击开关。
观察文本框中记录的数值与你触发开关的次数之间的逻辑关系,解释你所观察到的现象。体会“数字分支(digital branch)”模块与“等待输入(Wait for input)”模块的所代表的触发类型的不同。
为了解决数字电路中更复杂的问题,必须使用逻辑。这个过程包括应用真值表和公式来创建手头问题的解决方案。逻辑使用两种基本状态。人们对这两个状态使用不同的术语:“是(Yes)”和“不是(No)”、“高(High)”和“低(Low)”或者“1”和“0”。
在数字电路中,能实现基本逻辑运算的电子电路,叫逻辑“门”电路。通常有几种基本类型的“门”电路,每个“门”在输入和输出之间具有数学关系,可以写成布尔表达式或真值表。
通过本节的内容,你将学习与逻辑门有关的知识。一旦你掌握了逻辑门的基本知识,解决一个复杂的问题就容易多了。
打开RoBo Pro软件并开始一个新的文件。 将使用级别(level)设置为“Level 5:Objects(等级5:对象)”
点击工具栏中的“COM / USB”按钮,在设置面板中选择“仿真(Simulation)”模式,然后选择OK。
非门是仅有一个输入和一个输出的最简单的门。首先在编程窗口中放置一个按钮控件。你可以在“操作模块(operating elements)”->“控制模块(control elements)”子分类中找到“按钮(button)”模块。将其拖拽到编程窗口中。
右键单击“按钮”模块,在其属性面板中,将其命名为ButtonA。你还可以通过点击Button color旁边的“编辑(Edit)”键为按钮设置不同的颜色。注意:“Pushbutton switch(按钮开关)”这个选项的复选框要确认为“√”的状态。
现在需要一个虚拟的显示灯控件用来显示输出状态。你可以在“操作模块(operating elements)”->“显示(displays)”子分类中找到“显示灯(display lamp)”模块。将其拖拽到编程窗口中。
右键单击“显示灯(display lamp)”模块,将其重新命名为YLamp。你也可以通过设置改变灯的颜色。注意:“Initially on(初始状态)”这个选项的复选框要确认为“√”的状态。
现在我们有了构建“非门”逻辑所需的两种虚拟控件。
从“编程模块(program elements)”->“输入、输出(inputs,outputs)”子分类中找到“面板输入(panel input)”模块。将其拖拽到编程窗口中。
右键单击“面板输入(panel input)”模块,在对话框里“Panel(面板)”标签页中,将其配置给前面建立好的名为“ButtonA”的按钮控件。
从“编程模块(program elements)”->“输入、输出(inputs,outputs)”子分类中找到“面板显示(panel display)”模块。将其拖拽到编程窗口中。
右键单击“面板显示(panel display)”模块,将其分配给前面建立好的名为“YLamp”的显示灯控件,然后选择“OK”退出。
现在我们要将“非门”的逻辑添加到程序中。
从“编程模块(program elements)”->“运算符(Operators)”子分类中,将下面列出的第一个模块拖拽到编程窗口中。
右键单击这个模块,将运算符设置为“not(逻辑非)”,点击“OK”键后,你将看到该模块的形状和标识都发生了改变。
参照下图,用程序连接相应的模块。
在线运行上面的程序,在下面的表格中记录你观察到的结果。
“ButtonA”按钮被按下时的数字信号为1,抬起时是0。观察“YLamp”灯的亮灭,如果灯不亮则在列表相应位置中放置一个0,如果灯亮则放置一个1。
NOT | |
(Button)A | Y(Lamp) |
0 |
|
1 |
|
布尔表达式是详细说明输入和输出之间关系的数学表达式。在我们的例子中的输入被称为A。因为A有两个状态,当输入是High时,我们称它为A,当输入为Low时,称为非A。我们通过 来表示NOT A。
在我们的示例中,输出被称为Y。通过上面的真值表你可以确定“非门”布尔表达公式:
我们在编程窗口中放置两个“按钮(Button)”控件,分别命名为“Button A”和“Button B”。建立两个“面板输入(panel input)”模块,分别分配给这两个按钮。
再放置一个命名为“Y Lamp”的显示灯控件。建立一个“面板显示(panel display)”模块,分配给这个灯。
右键点击“运算符(operator)”模块,将其设置为“and(逻辑与)”。
参照下图,将各模块连接起来。
在线运行程序,在下面的表格中记录观察到的结果。点击按钮将使其从0切换到1。观察不同情况下灯的亮灭,如果灯不亮,则在Y列中放置一个0。如果灯亮了,则放置1。
AND | ||
A | B | Y |
0 | 0 |
|
1 | 0 |
|
0 | 1 |
|
1 | 1 |
|
停止程序,然后右键单击“运算符(Operator)”模块,将其更改为“or(逻辑或)”。
运行程序,填写下面的真值表,并试着写出OR门的布尔表达式。
OR | ||
A | B | Y |
0 | 0 |
|
1 | 0 |
|
0 | 1 |
|
1 | 1 |
|
参考下图修改程序。
这个逻辑简称为“或非”门。运行程序进行测试,记录真值表。
NOR | ||
A | B | Y |
0 | 0 | |
1 | 0 | |
0 | 1 | |
1 | 1 |
将上面程序中的“或”门改为“与”门。测试程序,记录真值表。
NAND | ||
A | B | Y |
0 | 0 | |
1 | 0 | |
0 | 1 | |
1 | 1 |
“与非”门布尔表达式:
当被要求设计一个控制系统时,你可能首先需要明确需求,这可能是一个问题的描述或对一个输入预期的输出结果。为了开始设计控制系统,你必须把问题转化为数字逻辑电路。第一步是确定各种输入和输出,大多数人会把将设计规范转换为真值表作为设计工作的开始。这个真值表将显示控制系统的每个输入经过控制系统后会输出什么结果,组合逻辑描述了你的系统将如何处理这些输入。一旦真值表被设计出来,它们就可以被转换成布尔方程,这使得逻辑电路的创建过程更容易。
这节您将学习将规范转换为真值表,将布尔表达式转换为图形化的逻辑表达。在上一节中,您已经学习了真值表和简单的布尔表达式。
RoBo Pro软件、TXT控制器、灯、导线
学习将设计规范转换为逻辑要求你掌握几个中间步骤。首先我们来看一下布尔表达式是如何转换成逻辑电路的。
下面这个问题的设计规范定义了三个独立的输入和一个输出。 当任何一个输入为高时,要求产生输出。该表达式被表示为A + B + C = Y。这将被读作A或B或C 输出 Y。 在上节中,我们已经了解了包含2个输入和1个输出的“或”门。下图是两种不同的图形化表示。
你会注意到上图中有一个是三输入的“或”门。它只需要把“Or(或)”模块的输入端定义为“3”即可。现在如果给出一个布尔表达式如A̅B + AB̅+ B̅C = Y,我们需要修改这个程序,依然使用一个三输入的“或”门模块来实现这个组合逻辑。
我们先创建其中的一个输入,从“Not A and B”开始,参照下面图的图例。你可以看到为创建“Not A”,我们采用了为输入A连接一个“nor(非)”门模块。当输入A为低电平时,“nor(非)”门将输入信号取反变为高;当输入B为高电平且输入A为低电平时,通过后面的“and(与)”门得到的输出为高。
参照“Not A and B”电路 ,我们另外的两个输入“A and not B”、“Not B and C”分别创建电路。
组合逻辑允许你使用AND(与)、OR(或)和NOT(非)这些基础的逻辑门,依据布尔表达式创建逻辑电路。现在我们建立三个按钮控件为上面的逻辑组合提供实际的信号输入。
从“操控模块(Operating elements)”->“控制模块(Control elements)”子分类中,将“按钮(Button)”模块拖拽到编程窗口中。通过复制一共得到三个按钮控件。为每个按钮控件设置唯一的名称,同时勾选“Pushbutton switch(按钮开关)”这个选项。
再从“编程模块(Program elements)”->“输入输出(Inputs,outputs)”子分类中,将“面板输入(Panel input)”模块拖拽到编程窗口中,建立3个,并分别将它们分配给3个按钮控件。参照下图所示:
我们通过USB线将TXT控制器与电脑相连,在TXT控制器上的M1输出端连接一个灯来显示逻辑结果。之后点击工具栏中的“COM / USB”图标,如下图所示配置连接方式。
在下面的程序中,你可以看到组合逻辑的输出通过一根黄色的数据线连接到“等待(wait for)”模块。我们将“等待(wait for)”模块的信号设置为等待高电平:1(>0),当这个输入条件出现时,该模块才会允许程序流程进入下一步,而只要输入的信号逻辑为低时,它就会等待。根据后面的程序模块,我们知道当“等待(wait for)”模块的输入信号为高电平时,程序向下执行,控制M1灯点亮。
完整的程序如下图所示,在线运行这个程序,点击按钮控件,观察灯的亮灭。
当自动化设备(传感器)感知周围世界时,大部分信息都是模拟量的。传感器识别到的温度、光线、声音和距离都是模拟量信号,模拟信号不能直接在程序中使用。工程门早已设计出将模拟信号转换为数字信号的方法,在本节中你将学习到在robo pro软件中如何接受模拟量信号并依据它们作出数据判断。
光敏电阻、灯、TXT控制器、9V直流电源、纸张、一小块电工胶带
将光敏电阻连接到TXT控制器的I1输入端口。将灯连接到M1输出端口。在开始编程并进行测试前,请准备好一张普通的白纸,并在其表面粘上一小块电工胶带。
将TXT控制器通过USB线缆连接到电脑上,打开robo pro软件,配置好连接方式,点击工具栏中的“Interface Test(测试接口板)”按钮,弹出对话框。点击I1旁边的下拉选项卡,设置为“Analog 5kOhm(NTC,...)”,之后你会从I1旁边的文字框中看到实时的数值显示。
当你移动或遮蔽光敏电阻时,你应该能看到文本框里的数值在变化。将光敏电阻向下以2.5CM的高度指向纸张的白色区域时,记录测量到的数值。接下来将传感器平移到黑色电工胶带上并记录下数值。
现在开始一个新的程序。将级别设置为“级别3:变量(level 3:Variables)”。
将下面这些模块拖拽到编程窗口中。
接下来,从“inputs,outputs(输入输出)”子分类中,将“通用输入(Universal input)”模块拖拽至编程窗口中。
右键点击“通用输入(Universal input)”模块,将“传感器类型(Sensor type)”选择为“光敏电阻(photoresistor)”。点击“OK”退出,你会看到模块表面上的图示发生改变。
从“操作模块(Operating elements)”->“显示(Displays)”子分类中,将一个“文本显示(Text display)”控件拖拽到编程窗口中。右键单击这个控件,对属性进行更改,类似于下面的显示属性。
从“编程模块(Program elements)”->“输入输出(inputs,outputs)”子分类中,将一个“面板显示(panel display)”模块拖拽到编程窗口中。右键单击,打开属性对话框。在这里将其配置给命名为“Photoresistor”的文本显示控件。
从“编程模块(Program elements)”->“分支,等待(Branch,wait..)”子分类中,将一个“带有数值输入的分支(branch with data input)”模块拖拽到编程窗口中。
如下图所示,对分支模块进行参数设置。将其数值设置为略低于黑色胶带的测量数值。同时交换该分支模块的Y和N的输出位置
在编程窗口中,拖拽出3个“电机输出(motor output)”模块。 将这些模块的图标都设置为“灯(lamp)”。将其中一个设置为“关(off)”;另外两个设为“开(on)”,一个设置亮度为8,一个设置亮度为4。
放置第二个分支模块,将其参数设置为略高于白色纸张的测量数值,同时交换该分支模块的Y和N的输出位置。参照下图完成整体程序的设计。
在线运行程序,将光敏电阻传感器从白色区域缓慢平移到电工胶带上方。观察发生了什么。调整分支模块的属性值以更好地适应变化的光照条件。
创建一个完成指定任务的程序有很多种方法。没有优化的程序的体积会变得很大。编程学习中的一个重要任务是学习使用循环结构和变量来控制程序的大小。循环结构允许程序重复执行一段程序功能。 变量允许我们对它写入数值或读取数值。这两者的使用使得我们可以对一个系统进行复杂的逻辑控制。
RoBo Pro软件
RoBo Pro软件提供的非常强大的功能之一就是变量的使用。变量实际是内存中的一个可用于存储信息的区域。在程序执行过程中,我们可以查询变量中的信息并使程序根据这个信息进行不同的操作。 这个被存储的信息可以是:特定的开关是否被按下、是否已经达到预设的数值,或者是特定事件发生的频率。
一个变量模块有两个部分,一个是我们可以用来访问该变量的固定名称(name),另一个是初始值(Initial value),这可以是一个表达式或一个数值,而且是可变的。
变量的表达式可以有几种类型。变量可以是一个模拟输入,或是一个数字,也可以等于其他变量。我们可以操作这些变量模块来得到我们想要的输出。
现在,我们打开robo pro软件,新建一个程序,将级别(level)设置为“级别3:变量(level 3:Variables)”或者更高的级别,点击“COM/USB”,在弹出面板中,设置为“Simulation(仿真)”模式。
从“编程模块(Program elements)”->“变量、定时器(Variables,timers..)”子分类中,将一个“全局变量(Variable global)”模块拖拽到编程窗口中,参见下图:
右键单击该模块,打开如图所示面的对话框。
在这个对话框中,将变量模块的“名字(name)”设置为“Boxes”。注意对于不同的变量,它们的名字必须也是不同的。如果两个变量模块的名字是相同的,那么它们代表一个内存存储区域,说明它们是一个变量模块。
在程序中有时可能需要对变量进行+1或-1的操作。当其用于计数功能时尤其如此。从“编程模块(Program elements)”->“指令(Commands)”子分类中,将一个“加法(Plus)”模块拖拽到编程窗口中。
这个指令模块会在程序每次执行到这一步时将“Boxes”变量的值增加1。
你也可以单击该指令模块,在其属性设置面板中修改指令和数值。
通常在使用了变量的程序中,我们会将变量中的数值作为一个分支模块的判断条件。根据判断的结果,程序执行不同的操作。从“编程模块(Program elements)”->“分支、等待(Branch,wait..)”子分类中,将一个“带有数值输入的分支(Branch with data input)”模块拖拽到编程窗口中。
分支模块是用于根据变量的值进行程序的分支处理。根据比较结果,程序决定是继续往下(Y分支)输出,还是往右侧(N分支)输出。
右键单击“带有数值输入的分支(Branch with data input)”模块,弹出属性设置面板,在“Condition(条件)”区域可以设置判断条件和数值,在“Swap Y/N branches”区域可以选择交换Y分支和N分支的位置。
参照下图编辑你的程序并在线运行,注意程序在运行的时候,变量模块中的数值会发生变量。
以上程序还可以被写成下面这个样子,上面和下面这两个程序本质上是一样的。
复杂的程序会显得笨拙。想象一下,如果Windows操作系统是一个单一的程序,那么它的体积将会大到电脑难以启动它。事实上Windows操作系统是分解为一系列较小的部分,然后连接在一起的, Windows操作系统调用这些动态链接库,这些文件用.dll扩展名来标识。
在RoBo Pro中,我们可以编写一段能实现某种功能的代码为子程序,并使用一个唯一的名称。主程序可以在任意位置调用这些子程序。用户可以在主程序中看到清晰的逻辑关系,也可以打开相应的子程序以编辑它们。本节将向你介绍如何创建子程序。
TXT控制器、9V直流电源、导线
参照下图组装你的实验模型:
将它们连接到TXT控制器,微动开关以“常开触点”的接法分别连接输入端口I1和I2,电机连接到输出端口M1。
打开TXT控制器,通过USB将其连接到电脑。打开ROBO PRO软件,开始一个新的程序。将“level(级别)”设置为“Level 3:Variables(级别3:变量)”。通过工具栏中的“COM/USB”设置相应的连接方式。
接下来,在程序窗口中选择“Panel”标签页。
从“操作模块(Operating elements)”->“显示(Displays)”子分类中,将一个“文本显示框(Text display)”模块拖拽到编程窗口中。
右键单击“文本显示框(Text display)”模块,参照下图设置其属性。
从“控制模块(Control elements)”子分类中,拖拽两个“按钮(Button)”控件到编程窗口中。
给两个按钮分别命名为“Level1”和“Level2”,接着从“绘图(Drawing)”->“形状(Shapes)”子分类中,将一个矩形控件拖拽到编程窗口中。
如下图所示,拖拽这个控件绘制出一个较大的矩形。
若上图所示,你绘制的面积较大的矩形框会将前面的按钮和文本框控件覆盖住。现在,鼠标选中矩形框,它会显示为高亮。然后点击菜单栏中“Draw(绘图)”下的“Put object in background(将对象放入背景)”。如下所示。
之后,文本框控件和按钮控件就可以看到了。
你可以编辑你的文本框控件和按钮控件以满足你的面板设计要求,还可以任意更改它们的颜色。
切换到主程序的“Function(功能)标签页”。
点击工具栏中的“Create a new subprogram(创建新的子程序)”图标。
为你的子程序指定一个唯一的名称(name),这个例子中使用名字“Location”。你还可以在“Description”文字框中对子程序进行描述。
一旦你点击“OK”,你会看到在“Main program(组程序)”选项卡旁边出现一个新的程序选项卡。 这就是你刚建立的子程序,点击该选项卡进入子程序的编程窗口中。
编辑子程序的第一步是建立“Entry(入口)”模块。这个模块与主程序中的“Start(开始)”模块类似。 你可以在“编程模块(Program elements)”->“子程序输入/输出口(Subprogram I/O)”子分类中,找到相关的模块。
将一个“入口(Entry)”模块和一个“出口(Exit)”模块拖拽到编程窗口中。
“Location”子程序的目的是显示汽车的位置。我们希望通过文本显示框显示出汽车的位置(取决于哪个微动开关被按下)。 为了显示信息,我们需要从“编程模块(Program elements)”->“输入、输出(Inputs、Outputs)”子分类中,拖拽一个“面板显示(Panel display)”模块到编程窗口中。
右键单击“面板显示(Panel Display)”模块,并将其分配给命名为“indicator”的文本显示框。
另外,为了判断哪个开关被按下,我们需要放置两个“数字分支(Digital branch)”模块。当不同的开关(起限位开关的作用)被触发时,需要文本显示框中显示不同的数值来表示,这就需要两个“赋值(Assignment)”模块。参照下图编辑你的子程序。
我们再次创建一个新的用于控制汽车运动的子程序,将这个子程序命名为“Move”。我们需要建立两个“通用输入(Universal input)”模块,并将它们分别分配给两个按钮控件。这个“Move”子程序的意思是按下某个按钮,控制电机(代表汽车)的运转,直到触发了该运行方向上的限位开关为止。
如下图所示编辑子程序Move。
“Move”子程序编辑完成后返回到主程序选项卡。放置一个“开始(Start)”模块。然后调用相应的子程序。
点击“载入的程序(Loaded programs)”分类,这里会显示出所有本地已经打开的Robo pro程序,如果这个程序你还没有命名,它会显示为未命名(unnamed)。在这里选择你的程序名称,你将在下面的模块窗口中看到主程序和所有建立的子程序模块,此时拖拽这些子程序模块就如同拖拽编程模块一样简单。
参照下图,编辑你的主程序。
切换到主程序下的“Panel(面板)”,在线运行该程序。
你可以按下level1或level2按钮,观察电机的动作。如果电机的运转方向不是你想要的,请调换电机上的接线。
收集和处理数据的能力对高级编程至关重要。你可以建立一个自动化的温室,在一天的时间里根据温度的变化控制风扇和加热器的打开与关闭,但是如果没有数据记录,你不会知道在你不在的时候究竟发生了什么。因为在一段时间内收集数据,这对应用程序是有意义的。本节旨在向你介绍数据的收集和报告。
TXT控制器、9V直流电源、热敏电阻、EXCEL
本例中,我们将演示如何收集室内的温度数据。
打开ROBO pro软件,开始一个新的文件。本例中使用到两个跟数据有关的模块。首先是“列表(List)”模块。它“编程模块(Program elements)”->“变量、定时器(Variables,timers..)”子分类中,拖拽出一个到编程窗口中。
右键单击“列表(List)”模块,这将弹出属性设置面板。将“名称(name)”改为“time”,这将成为该模块的唯一标识符。在对话框的下半部分,你将看到“保存到.CVS文件(Save to .CVS file)”部分,单击右侧的“浏览(Browse...)”按钮,这将允许你选择一个位置来保存数据文件。在文件路径文本框旁边有一个带数字的下拉菜单,这表示要创建的列的编号,数字1表示将数据存储在电子表格中的第1列中,数据是从列中的第2行开始记录的,第1行默认是留给列标题的。数字右侧的文本框是定义列标题的位置,本例中,列标题为“Time”。如下图所示。
选择“OK”退出。然后将第二个“列表(List)”模块拖拽到编程窗口中。如下图所示,设置这个“列表(List)”模块的各属性值。
注意,上面两个“列表(List)”模块中的数据保存位置都指向了一个名为“test.csv”的文件,这意味着不同的“列表(List)”模块可以向同一个文件内存储数据。“temperature”列表模块将数据存储到test.csv中的第2列,且第2列的列名为“Temperature”
我们要学习的另一个新模块,称为“添加数值(Append value)”模块。你在“指令(Commands)”子分类中可以找到它。
拖拽两个“添加数值(Append value)”模块到编程窗口中。右键单击,勾选属性设置面板中的“为指令提供数据输入(Data input for command value)”复选框。点击“OK”退出后,在“添加数值(Append value)”模块的左侧会出现一根黄色数据线。
参照下图创建完整的程序。其中使用命名为“time”的变量存储并传递时间数据给“Time”列表模块。注意,“通用输入(Universal input)”模块的传感器类型要设置为“热敏电阻(NTC resister)”。
现在我们将热敏电阻连接到TXT控制器上的I1输入。通过USB线将控制器连接到电脑。在软件中设置好连接方式。
接通电源打开控制器,在线运行你的程序。用手指捏住热敏电阻的灰色端部至少15秒,之后放开热敏电阻,等待20秒钟,重复此过程几次,然后停止程序。
到数据存储路径中打开test.csv文件。你应该能在不同的列中看到保存的数据。
你可以在Excel中利用这些数据创建图表,由于是NTC热敏电阻(负温度系数),因此温度越高,热敏电阻的阻值越小。示意图如下:
本节中你将学习从计算机上建立一个人机交互控制面板来远程控制车辆。你的慧鱼小车将通过蓝牙与计算机连接到一起,最佳的远程控制距离约在十米以内。在开始本节的学习内容前,你有必要先搭建出一辆可以进行控制小车。
慧鱼小车、计算机软件ROBO Pro
参考下图构建一辆可以用于远程控制的小车模型。完成本实验只需要小车安装有2个编码电机和一个摄像头即可。
打开ROBO Pro软件,创建一个新的文件。 将级别(level)设置为“Level 5:Objects(级别5:对象)”。点击Main program(主程序下的panel(面板)选项卡。
当切换到panel(面板)选项卡后,你会发现左侧模块窗口中提供给你能使用的模块分类发生了很大的变化,它提供给你一些用于制作人机交互界面时所需要的常用控件。参看下图:
参照下图,在panel(面板)界面中拖拽出以下这些模块并摆放好它们的位置。这里主要用到四种模块:Button(按钮)控件5个,Slider(滑块)控件1个,Text Display(文本显示)控件1个,和Camera viewer(摄像头监视窗口)控件1个。
右键单击Text Display(文本显示)控件,弹出属性设置面板,将“Digits/columns(数位/列)”属性设置为12,这意味着文字框中的字符显示宽度为12。如下图所示:
右键单击Slider(滑块)控件,弹出属性设置面板,将“Maximum value(最大值)”属性设置为8,这意味着滑块可调控的数值范围是0-8。如下图所示:
分别右键单击四个控制小车运行方向的Button(按钮)控件,弹出属性设置面板,分别将四个按钮控件的名字设置为为forward(向前)、back(向后)、left(向左)和right(向右),调整你想要的按钮颜色。如下图所示:
滑块控件下方有一个按钮,右键单击这个Button(按钮)控件,弹出属性设置面板,将这个按钮控件的名字设置为为stop(停止),调整你想要的按钮颜色。如下图所示,选中复选框“Pushbutton Switch(按钮开关)”。这个按钮控件是否被按下,决定着对电机的控制是否生效。
你可以通过菜单栏中的“Draw(绘图)”中的“Edit(编辑)”功能来调整各控件或摄像头监视窗口的大小。点击你想调整尺寸的控件后,该控件四周会出现可操控的锚点,使用鼠标拖拽这些锚点,即可改变控件对象的大小。
对“panel(面板)”中的所有控件进行调整之后,你的人机交互界面看起来将如下图所示:
回到主程序的编程界面,参照下图建立主程序。
现在将你的小车通过支架架高在桌面上(便于调试小车)。然后通过USB连接TXT控制器,配置好相关设置后,在线运行该程序,如果通过按钮运行小车时,轮子的转动方向与理想中的不同,调换电机的接线位置。
要成为一个真正的远程控制小车,你需要将软件与小车进行无线连接。这要求:1. PC必须有Wi-Fi模块,或者PC端装有USB Wi-Fi适配器。2. ROBOTICS TXT控制器必须打开了Wi-Fi。启动TXT控制器中的无线网络的设置方法如下:
从控制器的主菜单中点击“Setting(设置)”选项。
进入后,点击“Network(网络)”选项。
在网络设置窗口中,你将看到WLAN网络设置滑块和安全密钥。现在滑动WLAN旁边的滑动以启动无线网络。
点击你的电脑右下角的网络设置按钮,你将看到列出的TXT控制器。点击你要连接的TXT控制器。
选择“connect(连接)”后,你将看到一个窗口,它显示正在尝试连接。
在弹出的安全密钥对话框中,输入你的TXT控制器上显示的密钥号码(注意字母的大小写)。
一旦输入了正确的密钥并选择OK,电脑将与TXT控制器建立WLAN连接。
最后一步是在ROBO Pro软件中设置WIFI连接。从工具栏中选择“COM & SUB”选项。
在弹出面板中,选择“USB / WLAN /Bluetooth”和“ROBO TXT Controller”。
点击“OK”按钮,这将弹出“Select TCP / IP Adress”对话框。 这里要选择“Default WLAN(默认WLAN)”这个选项,点击“OK”按钮。
现在,将你的小车从桌面支架上拿起,放置到平滑的地面上,在线运行你的程序,切换到“panel(面板)”界面,你应该能看到摄像头回传的实时画面,同时还可以用这些按钮控件来操控小车的行进方向。
|