大家好,欢迎来到IT知识分享网。
今天宇宙故障片警给大家带来的知识是如何应用ASCII数据。前段时间A朋友问我,这个汇川AutoShop怎样将这个ASCII的数据转换成浮点数和字符串,因为我之前也没有实际用过这个ASCII数据,我当时告诉A朋友说:“这个我ASCII数据我之前也没有用过,我先研究一下看看怎样能实现。。。。。。”
回到家后,我打开笔记本电脑,首先查了查这个ASCII数据到底是怎么回事,如下表所示
✅ASCII码对照表(完整:0–127)
Dec |
Hex |
Bin |
Char |
描述(说明) |
0 |
00 |
00000000 |
NUL |
空字符(null) |
1 |
01 |
00000001 |
SOH |
标题开始 |
2 |
02 |
00000010 |
STX |
正文开始 |
3 |
03 |
00000011 |
ETX |
正文结束 |
4 |
04 |
00000100 |
EOT |
传输结束 |
5 |
05 |
00000101 |
ENQ |
请求 |
6 |
06 |
00000110 |
ACK |
接收确认 |
7 |
07 |
00000111 |
BEL |
响铃 |
8 |
08 |
00001000 |
BS |
退格 |
9 |
09 |
00001001 |
TAB |
水平制表符 |
10 |
0A |
00001010 |
LF |
换行 |
11 |
0B |
00001011 |
VT |
垂直制表符 |
12 |
0C |
00001100 |
FF |
换页 |
13 |
0D |
00001101 |
CR |
回车 |
14 |
0E |
00001110 |
SO |
不用切换 |
15 |
0F |
00001111 |
SI |
启用切换 |
16 |
10 |
00010000 |
DLE |
数据链路转义 |
17 |
11 |
00010001 |
DC1 |
设备控制1 |
18 |
12 |
00010010 |
DC2 |
设备控制2 |
19 |
13 |
00010011 |
DC3 |
设备控制3 |
20 |
14 |
00010100 |
DC4 |
设备控制4 |
21 |
15 |
00010101 |
NAK |
拒绝接收 |
22 |
16 |
00010110 |
SYN |
同步 |
23 |
17 |
00010111 |
ETB |
传输块结束 |
24 |
18 |
00011000 |
CAN |
取消 |
25 |
19 |
00011001 |
EM |
介质结束 |
26 |
1A |
00011010 |
SUB |
替代 |
27 |
1B |
00011011 |
ESC |
转义 |
28 |
1C |
00011100 |
FS |
文件分隔符 |
29 |
1D |
00011101 |
GS |
组分隔符 |
30 |
1E |
00011110 |
RS |
记录分隔符 |
31 |
1F |
00011111 |
US |
单元分隔符 |
32 |
20 |
00 |
(空格) |
空格 |
33 |
21 |
00 |
! |
感叹号 |
34 |
22 |
00 |
“ |
双引号 |
35 |
23 |
00 |
# |
井号 |
36 |
24 |
00 |
$ |
美元符号 |
37 |
25 |
00 |
% |
百分号 |
38 |
26 |
00 |
& |
和号 |
39 |
27 |
00 |
‘ |
单引号 |
40 |
28 |
00 |
( |
左括号 |
41 |
29 |
00 |
) |
右括号 |
42 |
2A |
00 |
* |
星号 |
43 |
2B |
00 |
+ |
加号 |
44 |
2C |
00 |
, |
逗号 |
45 |
2D |
00 |
– |
减号 |
46 |
2E |
00 |
. |
句号 |
47 |
2F |
00 |
/ |
斜杠 |
48–57 |
30–39 |
00–00 |
0–9 |
数字字符 |
58 |
3A |
00 |
: |
冒号 |
59 |
3B |
00 |
; |
分号 |
60 |
3C |
00 |
< |
小于号 |
61 |
3D |
00 |
= |
等号 |
62 |
3E |
00 |
> |
大于号 |
63 |
3F |
00 |
? |
问号 |
64 |
40 |
0 |
@ |
at符号 |
65–90 |
41–5A |
0–0 |
A–Z |
大写英文字母 |
91 |
5B |
0 |
[ |
左中括号 |
92 |
5C |
0 |
\ |
反斜杠 |
93 |
5D |
0 |
] |
右中括号 |
94 |
5E |
0 |
^ |
抑扬符 |
95 |
5F |
0 |
_ |
下划线 |
96 |
60 |
0 |
` |
反引号 |
97–122 |
61–7A |
0–0 |
a–z |
小写英文字母 |
123 |
7B |
0 |
{ |
左大括号 |
124 |
7C |
0 |
| |
竖线 |
125 |
7D |
0 |
} |
右大括号 |
126 |
7E |
0 |
~ |
波浪号 |
127 |
7F |
0 |
DEL |
删除 |
这个表格在网上搜索能看到很多,内容一样,排版有些区别而已。这个表在以前我也看到过,不过受限于当时的能力有限,根本不理解这些数据怎样看,怎样应用的。
通过这个A朋友的提问,这次是个搞定ASCII数据的好时机。于是我一不做二不休,开始研究。可是看这个ASCII数据表格我还是不理解怎么看。进行了下面几个步骤的探索:
1.-不理解的时候,那我就换一个思路,我问A朋友要了一下通讯手册,他是用Easy320跟一个真空表通讯读取真空数值。该真空表的手册如下:

拿到手册后,我仔细研读手册内容,手册中有一个数据案例。通过手册可以看出通讯协议是用的Modbus_Rtu的,然而他的数据格式却是ASCII格式,这个数据格式,一开始我还没明白后,后来才真正明白怎么回事,也就懂了ASCII码数据对照表的内容。我们先看下,这个通讯的4个数据,35H,30H,2DH,31H ;看这几个数据想了一会儿,突然恍然大明白了,这个4个数据是16进制的数据,那个对照表上有16进制的数据,有10进制数据,有2进制数据,还有字符数据,之前一直不理解怎么这么多数据格式。在当时的那一刻,我真的悟了那么一点点。
原来那个ASCII码对照表是4种数据类型对应的不同的数据值,他们都是ASCII数据下不同格式的数值。(这句话是我自己的感悟)
2.-接下来我就开动脑筋,去对比一下ASCII码对照表,我发现35H,30H,2DH,31H,对应的字符值分别是 5,0,-,1 四个字符。 这样就和通讯协议给的案例对应上了,接下来就是找到可以把35H,30H,2DH,31H这四个数据转换成字符串。
于是我打开AutoShop编程软件找到编程软件指令手册,看看有没有哪个指令可以实现把数据转换成字符串的指令。在一番苦苦搜寻后,功夫不负有心人,我找到了一个可以转成字符串的指令。如下图:

手册中说是BYTE数据转换成字符串,那么我们的4个数据属不属于BYTE呢,ASCII数据大小正好是一个BYTE,那么真空表手册中的数据是属于一个BYTE内的,那么这个指令是符合我的要求的。找到后,就实际测试一喽。

ST指令输入

4个数据写入
3.-如上图的ST指令输入里面,最后的str0的值是50-1,和真空表通讯协议里面的真好是对的上的。到这里我们实现了第一步转成字符串,我们发现和真空表中的手册实际的数据显示还差一些,实际显示5.0e-1; 目前我们的指令输出的字符串只有50-1,还缺少一个点,和e字符。这两个是固定不变的字符,所以我猜测厂家是没有给他传数据了, 如果要显示自己加一下字符串即可。
4.-接下来我们看下如何输出5.0e-1这个字符,缺少一个点,那么我们就找一下这个”点”的字符对应的16进制数据是多少,然后添加上就行了。如下两张图”点”对应的16进制数据是2E, 字符E对应的16进制数据是45


如下图,我在ary0的数据里面添加了6个数据,分别是35H,2E,30H,45H,2DH,31H, 代表的是5.0E-1, 这6个字符。

如下图str0正确输出5.0E-1, 这6个字符。

5.-最后我们在实现将字符串转换成浮点数,这个也是有指令的可以直接转换,这样两个指令组合 应用很简单的实现了,将BYTE转换成字符串,转换成浮点数。如下图使用STRING_TO_REAL这个强制转换命令即可实现字符串转成浮点数数据了。至此我们成功完成了A朋友的需求。

然后我们在看一个5.6E-1转换成浮点数的例子。如下图,变量值和输出值5.6E-1的16进制数据分别是35H,2E,36H,45H,2DH,31H,其中只是把第三个数据的30H换成了36H,根据ASCII对照表,36H代表字符6,转换后是5.6E-1.

变量值

变量输出值
以上内容,都是个人的自我理解,欢迎各位朋友互相讨论学习并指出错误地方。

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://haidsoft.com/187014.html