EtherNet Krl 续--XML文件扩展

Posted 机器人小农

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了EtherNet Krl 续--XML文件扩展相关的知识,希望对你有一定的参考价值。



This browser does not support music or audio playback. Please play it in Weixin or another browser.




接上回说的XML文件,并且说说我们怎么使用这个文件工作



EtherNet Krl 续--XML文件扩展


如果你看到了上一期的最后,你肯定记得我们最后试着写的那一段,细心的你一定会发现和这个图上的稍有不同,


“@”是干啥的呢?

“/”是干啥的呢?

为啥这里面只有“Tag”,类型都不写吗?






那么我们继续上一期来聊聊


我们来看看这个图:

左边是用于和机器人通讯的工控机;

右边是机器人;

中间则是我们虚拟出来的存储区;

EtherNet Krl 续--XML文件扩展


在EtherNetKrl通讯中我们需要想象一个这样的存储区,这个区域是用来我们讲数据打包或者临时存储的区域,这个区域就是我们在XML文件中定义的文字(数据类型及格式)


比如这个文件:

EtherNet Krl 续--XML文件扩展

首先这里定义了<SEND>表示用于发送,

<XML>表示一下定义通过数据为xml数据。

<ELEMENT Tag="Robot/Data/ActPos/@X"/>表示声明了一个存储区这个区域是类似于金字塔形状的 

EtherNet Krl 续--XML文件扩展


意思是这样的,robot下面的data下面的actpos下面的x元素。




接下来我们看看如何控制这个存储区

此时需要我们在机器人程序中建立一个专门用于控制的程序,这里叫做运行程序;


在写运行程序前我们要认识几个相关的指令,或者说函数

这里面的xxx需要填写上面编写的XML文件名称

RET = EKI_Init("xxx")初始化一个通道;

RET = EKI_Open("xxx")打开一个通道;

RET = EKI_Close("xxx")关闭一个通道;

RET = EKI_Clear("xxx")清空一个通道;

RET=EKI_SetString("xxx","Buffer",Bytes[])将Bytes[]中的字符型数据存储到xxx文件中的Buffer

RET=EKI_Set...("xxx","aaa", bbb)指令同上,数据类型不同,...处填写数据类型比如Bool,Frame,Int,Real


RET = EKI_GetBool("xxx","aaa",bbb)读取xxx文件的aaa数据,并且存储到变量bbb

RET = EKI_Get...("xxx","aaa",bbb)同样这个函数支持Bool,Frame,Int,Real还支持数组的读取

RET = EKI_Get...Array(CHAR[], CHAR[], INT[])还支持数组的读取



还有一个非常重要的函数

RET = EKI_Send("xxx", "",   )发送





好了有了这些函数的支持 我们就可以开始写我们的运行程序了。

运行程序必须根据xml文件来编写。

我们根据软件包中的例子程序来研究一下吧


RET=EKI_GetString("XmlCallBack","Sensor/Message",vChar[])读取Sensor/Message中的字符串并存储在vChar[]中 RET=EKI_GetReal("XmlCallBack","Sensor/Positions/Current/@X",vReal)读取Sensor/Positions/Current中的x元素值并存储在vReal中 RET=EKI_GetInt("XmlCallBack","Sensor/Nmb",vInt)读取Sensor/Nmb中的值并存储在vInt中 RET=EKI_GetBool("XmlCallBack","Sensor/Status/IsActive" ,vBOOL)读取Sensor/Status/IsActive中的值并存储在vBOOL中 RET=EKI_GetBool("XmlCallBack","Sensor/Show/@error" ,vBOOL)读取Sensor/Show/@error中的值并存储在vBOOL中 RET=EKI_GetFrame("XmlCallBack","Sensor/Read/xyzabc",vFrame)读取Sensor/Read/xyzabc中的值并存储在vFrame中



 RET=EKI_SetFrame("XmlCallBack","Robot/Data/LastPos", TOOL_DATA[1])将工具1的值存储到obot/Data/LastPos中 RET=EKI_SetReal("XmlCallBack","Robot/Data/ActPos/@X", 1000.12)1000.12存储到Robot/Data/ActPos/的X中 RET=EKI_SetInt("XmlCallBack","Robot/Status", 12345678)12345678存储到Robot/Status中 RET=EKI_SetString("XmlCallBack","Robot/Mode","ConnectSensor")将字符ConnectSensor存储到Robot/Mode中 RET=EKI_SetBool("XmlCallBack","Robot/RobotLamp/GrenLamp/LightOn",true)true存储到Robot/RobotLamp/GrenLamp/LightOn中
RET = EKI_Send("XmlCallBack","Robot")发送Robot下存储的所有数据


当然首先要初始化和打开通道,结尾要关闭通道

RET=EKI_Init("XmlCallBack")RET=EKI_Open("XmlCallBack")发送部分

接收部分RET=EKI_Close("XmlCallBack")RET=EKI_Clear("XmlCallBack")







长按二维码关注


以上是关于EtherNet Krl 续--XML文件扩展的主要内容,如果未能解决你的问题,请参考以下文章

flume高并发优化——多文件source扩展断点续传

spring3.0使用annotation完全代替XML(续)

Webpack(续)

Python实现支持并发断点续传的FTP

类别的扩展

Android微件(续)