点击学习>>《龙哥手把手教你学LabVIEW视觉设计》视频教程
有人可能要问:为什么讲仪器控制的,扯到了字符串操作?跟本文主题不对?
上一篇我已经讲过了,用
labview 做串口程序很容易,就拖 4 个函数,加个循环,基本就完事了。so easy.
然而,你这个只能说,可以收发数据而已。好比你有了很多做菜的原料,你得自己按照自己厨艺来加工,才能变成有用的菜肴。好吧,有人听不懂了。
我开始打比方:
Example:在谍战片里,很多会降到窃听情报的,都是窃听过电报。一般截取电报的信号很容易,因为都是无线电传输,很容易截取。但是截取了密文,没什么用啊,你得翻译出来呀!要怎么翻译呢?你得有个密码本,对着翻译。翻译成人能听懂的话。所以,重点不在于如何获取敌人的无线信号,而在于破译密码。
这个例子,够形象吧。
你串口收到都是字符串,很多时候,都需要自己处理一下,转成数值。
注意:一定要区分,正常显示下的字符串,和 16 进制下的字符串。
一般如果你接收的字符串如果被你看到的是 乱码。。。。。
请不要着急,请切换到 16 进制显示模式。怎么切换见下图。
一般接收到的字符串分以下几种情况(我随便想的,我不是专家,无法面面俱到):以下假定都是正常模式下的,不是 16 进制显示的。
---------------------------------
①单个接受字符串就是数字形式。
比如,收到的数据,就是 1,你要转成 1,很容易。直接用下面的函数来转为数值形式。
②你接收到的是一串字符串:比如 01 02 03 04 05 。..。..。
一般来说,这种一串的,都是有含义的,至于什么含义,你得看仪器说明,如果自己是
单片机编程,编写单片机程序的那个人应该懂的.如果是一串字符串,你需要截取字符串。操作都是字符串这个函数面板里。自己看着办。
你用截取字符串截取每一个数据,然后再参照第①种方式,转化成数值。
====================================
第一种,单一的接受一个字符的,很容易。问题是,大多时候,我们串口都是发送的一串数据。我们要截取字符串,得找到入口。就是找到字符串的头。比如你单片机或仪器发送来的数据,是 010203010203010203.。.有时候,可能你接受的是 03010203010203.。..这个时候,你不能说,第一个数,就是你心中的第一个数吧,因为错位了哦。。。。怎么办?
接着往下看。。
一般而言,专业的写单片机的人,会加帧头 (校验码) 帧尾。
比如,帧头是特殊字符(永远不可能出现在数据中的,一般是 STX,特殊字符等。帧位,常见的仪器的就是终止符。OAOD 或者 ODOA 或者 OA 或者 OD,就那么几个。这样,每次都检查下头,找到头了,才开始截取 后面的 数据。 这样就一般不会出现错位啦。
=====================
上面只是随便讲了下。
接收命令,一般两种形式。
①一般仪器,都是你发送一个命令,仪器才回送一串字符串。
这样一发,一收的,一般都不会错位的,自己按照仪器说明书,自己转化下数值就可以了。
举例:
你发送一个 A。
仪器回复一个 A123。
没其他干扰,自己直接截取就行。可能 A 是读取 A 寄存器的值,返回的是 A123,,协议规定 A 后面的字符串就是 A 寄存器的值。那么 A 的值是 123。
②,你发一个命令,下位机就不停的回送数据。
举例:你发送一个 A。
仪器回送:FFABCDFFABCDFFABCDFFABCD.。..。..,搞不好,还有 CDFFABCDFFAB.。..。.,错位了的。错位了就自己查找头,然后拼接成正常数据,然后提取字符串。至于怎么拼接,这个,可以用移位寄存器,然后用连接字符串拼接。
比如,你定义的字符串的头,是 FF,你得到了 FF 后,开始等待后面的字符。然后 A B C D 陆续来了。你拼接到一起,然后集体提取,当然,你也可以来一个提取一个。无所谓了,有些人性子急,不过作为编程人员,一定要稳重。
编写者:浅浅的小草
28