单片机论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1077|回复: 1
打印 上一主题 下一主题
收起左侧

和嵌入式关联的谷歌blockly图形化编程的资料

[复制链接]
跳转到指定楼层
楼主
工作需要编写了一份谷歌的blockly图形化编程的资料,内附一份笔记,需要的可以参考一下,有疑问可以问我!


全部资料51hei下载地址(含清晰图片与资料):
谷歌blockly图形化编程资料内附一份文档.rar (1.06 MB, 下载次数: 14)


工作验收中提到的问题:
(1)如何编写blocky自定义块(对应自定义块在blocky里面js的位置以及用法)。
(2)blocky自定义快如何跟pythonAPI里面的函数联系起来。(3)如何编写pythonAPI。(4)blocky块生成的python文件是怎么样一种机制(Browser.java这个类有什么作用)。(5)点击执行按钮的时候,后台做了什么操作(6)项目中Java是如何去调用python的,需要注意什么?(7)项目中pythonDemo.py有什么作用?个人总结对以上问题的回答:
前言
:以下内容是我针对与上面验收问题的总结和回答,因某些地方文字描述可能不好表达出本意,所以会以截图加上文字说明进行概括,希望大家能将我所描述的以及图中标记的内容或者文字仔细查看,避免漏掉一些细节以免造成困扰!
另外,因为对代码部分,个人理解有所不同,如果有说的不对的地方,或者理解错误的地方,请指出并说明,万分感谢!

(1)如何编写blocky自定义块(对应自定义块在blocky里面js的位置以及用法)。

编写自定义块,通常编写一个自定义块,首先是看BrobotAPI里面的分类里面是否需要定制一个自定义块,根据给出的分类里面块的描述,找到对应的嵌入式端的接口,根据接口了解这个里面需要传入哪些参数,以及这个块的作用,这样就决定了这个块长什么样,需要传几个参数,以及是手动输入值还是可以选择值,或者两者并存!   当有了接口之后,我需要在E:\eclipse\workplace\BRobotAPP\pythonFile\blocklyAPI.py中将接口通过python语言进行封装, 例如下图是对门型运动的接口的封装

这个就是根据接口封装的pythonAPI.py文件,当中的每个语句我都有加以说明, 当然其他的方法也都跟这类似,只是有的方法因为考虑到安全因素,需要在方法前面加上一系列的判断,确保判断条件通过后才能执行方法

     有了pythonAPI.py封装了方法,那么就可以编写Blockly自定义块了,编写自定义块是个比教麻烦的步骤,因为Blockly是谷歌的一个插件,所以编辑Blockly块就要用到谷歌封装的工具了,这个工具是用谷歌浏览器打开E:\eclipse\workplace\BRobotAPP\blockly\googleDemo\blockly-master\demos\blockfactory\index.html这个页面,通过这个页面就可以编写Blockly块了!

上图就是编辑一个自定义块的页面了,而块就是这样定义出来的,至于你希望块长成什么样,就完全靠图中左侧的代码进行调整, BrobotAPI中的每一个块就是这样定义出来的!
    而Blockly所对应的js就是 E:\eclipse\workplace\BRobotAPP\blockly\googleDemo\blockly-master\tests\generators目录下面的myBlockly.js 和myBlocklyPython.js文件了,  myBlockly.js中的文件是不需要改动的,直接复制上图中的右边中间的那地方的代码就行了, 就是这个图片里的内容

而myblocklyPython.js中的代码就要改动了,如图

在所有的步骤完成后,还需要在index.html中添加上对应的<Blockly>标签

这样 一个完整的Blockly块就编写完成了!

(2)blocky自定义快如何跟pythonAPI里面的函数联系起来。

这个Blockly块跟pythonAPI里面函数的联系就是在定义块的时候

这个图右下角对应的就是myblocklyPython.js文件这个文件中的红框里面就是对应pythonAPI里面的方法了

对应的通过Blockly页面中的js方法会拼接成这样的一个语句,也就是调用PythonAPI里面方法的语句,并且里面有参数,你可以用这个语句和pythonAPI中的方法进行对比!

(3)如何编写pythonAPI。

编写PythonAPI,是需要对照着为知笔记中的Brobot函数接口.md来进行编写,举个例子就拿 向嵌入式端发送激光雕刻的图片的路径数据 这个接口来说吧 它的接口是

int SendEngravePathData(unsigned char laserlevel, unsigned char pathtype, float goalcoor[3])  

首先 int 是这个方法的返回值,

SendEngravePathData  这个是方法名

括号里面的是参数 laserlevel 是表示激光功率的等级,它是char型,所以在pythonAPI中需要将它转为char型

Pathtype  参数表示的是路径的类型,也是char型,所以也需要将它转为char型

goalcoor[3] 参数分别对应的就是传进去的坐标点X,Y,Z 因为它是一个数组,所以我们写pythonAPI时候需要将它转成python语言的数组格式
下面就是pythonAPI中封装的截图

(4)blocky块生成的python文件是怎么样一种机制(Browser.java这个类有什么作用)。

event.js就是相关事件,这里面有很多事件,这个也是动态产生python代码和xml代码的文件,其中alert()事件中时python代码,confirm中时xml代码confirm()事件,

Field_textinput.js中,键盘按下事件中,动态生成python代码和xml代码。

这个是谷歌里面封装的生成python文件的机制! 在工作页面中我们选择blockly块生成python代码,这里我们用到的是Browser.Java这个类里面定义的方法.

在这个类里面我们首先是需要通过绝对路径获得用户目录里面路径


有了路径之后我们需要拼接路径加载index.html地址


下面是通过拼接生成python的头文件


头文件拼接完成后动态获取python的代码,并创建python文件


这样python文件就生成了.

Browser.java这个类有什么作用

这个类的作用. 主要作用就是上面介绍的通过io的读取路径,定义方法创建出python文件,然后定义里面的一些js响应事件,生成项目的xml文件以及做一些关于用户操作界面的弹窗和响应

(5)点击执行按钮的时候,后台做了什么操作

点击执行按钮时候,后台先会判断你是否连接机械臂,如果没有连接,会提示请先连接机械臂,如果已经连接则会判断你当前是否选择了要运行的demo,有了demo就可以加载到demo对应的python脚本文件,并逐条运行脚本中的python语句,在语句的前面因为每条都添加了一个判断dll是否正确的判断,如果BrobotCheck()中的脚本有问题的话则也会终止机械臂的操作,如果语句没有错误,则机械臂会按照脚本上的坐标或者其他指令进行运动,直至完成最后一条指令,或者有人点击了终止按钮!

(6)项目中Java是如何去调用python的,需要注意什么?

Java中调用python,主要是通过在JavaCallPython.java类中调用cmd然后通过cmd执行python代码,所以如果想要执行python代码必须要安装python环境


这其中需要注意的是首先需要配置好python的环境,其次就是Process pr = Runtime.getRuntime().exec("python " + url3); 这个当中括号里面的python后面必须要加上一个空格, 其三就是url的路径是要保证正确的,如果路径错误,或者找不到python文件的话那么肯定运行会出现问题的

(7)项目中pythonDemo.py有什么作用?

我们项目中生成的文件为python.py文件,而pythonDemo.py文件是修改串口之后的pythonDemo文件,这个文件是我们Java调用cmd进行加载的python脚本文件.


评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 转播转播 分享分享 分享淘帖 顶 踩
回复

使用道具 举报

沙发
wy2394a 发表于 2019-1-10 20:31 | 只看该作者
很好的例子
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|小黑屋|单片机论坛 |51黑电子论坛单片机.

Powered by 单片机教程网

快速回复 返回顶部 返回列表