网站首页 > 文章精选 正文
今天宇宙故障片警给大家带来的知识是如何应用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 | 00100000 | (空格) | 空格 |
33 | 21 | 00100001 | ! | 感叹号 |
34 | 22 | 00100010 | " | 双引号 |
35 | 23 | 00100011 | # | 井号 |
36 | 24 | 00100100 | $ | 美元符号 |
37 | 25 | 00100101 | % | 百分号 |
38 | 26 | 00100110 | & | 和号 |
39 | 27 | 00100111 | ' | 单引号 |
40 | 28 | 00101000 | ( | 左括号 |
41 | 29 | 00101001 | ) | 右括号 |
42 | 2A | 00101010 | * | 星号 |
43 | 2B | 00101011 | + | 加号 |
44 | 2C | 00101100 | , | 逗号 |
45 | 2D | 00101101 | - | 减号 |
46 | 2E | 00101110 | . | 句号 |
47 | 2F | 00101111 | / | 斜杠 |
48–57 | 30–39 | 00110000–00111001 | 0–9 | 数字字符 |
58 | 3A | 00111010 | : | 冒号 |
59 | 3B | 00111011 | ; | 分号 |
60 | 3C | 00111100 | < | 小于号 |
61 | 3D | 00111101 | = | 等号 |
62 | 3E | 00111110 | > | 大于号 |
63 | 3F | 00111111 | ? | 问号 |
64 | 40 | 01000000 | @ | at符号 |
65–90 | 41–5A | 01000001–01011010 | A–Z | 大写英文字母 |
91 | 5B | 01011011 | [ | 左中括号 |
92 | 5C | 01011100 | \ | 反斜杠 |
93 | 5D | 01011101 | ] | 右中括号 |
94 | 5E | 01011110 | ^ | 抑扬符 |
95 | 5F | 01011111 | _ | 下划线 |
96 | 60 | 01100000 | ` | 反引号 |
97–122 | 61–7A | 01100001–01111010 | a–z | 小写英文字母 |
123 | 7B | 01111011 | { | 左大括号 |
124 | 7C | 01111100 | | | 竖线 |
125 | 7D | 01111101 | } | 右大括号 |
126 | 7E | 01111110 | ~ | 波浪号 |
127 | 7F | 01111111 | 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内的,那么这个指令是符合我的要求的。找到后,就实际测试一喽。
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.
以上内容,都是个人的自我理解,欢迎各位朋友互相讨论学习并指出错误地方。
猜你喜欢
- 2025-07-07 大小写字母转换(电脑键盘哪个是大小写字母转换)
- 2025-07-07 编码器的A相、B相、Z相指什么?(编码器a相跟b相能反接吗)
- 2025-07-07 Python 公共操作,超级解析!这也太详细了!
- 2025-07-07 探秘C语言黑洞!避免这10个易错用法,让你的代码更安全!
- 2025-07-07 变压器绕组变比测量仪串口数据采集存入数据库对接MES系统方案
- 2025-07-07 IFIX基础知识---标签名后缀(ifram标签的作用)
- 2025-07-07 计算机储存数字和字符的方法你了解多少?
- 2025-07-07 Python运算符:数学助手,轻松拿咧
- 2025-07-07 学习永远不晚 C语言试题及答案(学习永远不晚 C语言试题及答案免费下载)
- 2025-07-07 Shell编程基础及变量(shell编程变量赋值)
- 最近发表
- 标签列表
-
- newcoder (56)
- 字符串的长度是指 (45)
- drawcontours()参数说明 (60)
- unsignedshortint (59)
- postman并发请求 (47)
- python列表删除 (50)
- 左程云什么水平 (56)
- 计算机网络的拓扑结构是指() (45)
- 编程题 (64)
- postgresql默认端口 (66)
- 数据库的概念模型独立于 (48)
- 产生系统死锁的原因可能是由于 (51)
- 数据库中只存放视图的 (62)
- 在vi中退出不保存的命令是 (53)
- 哪个命令可以将普通用户转换成超级用户 (49)
- noscript标签的作用 (48)
- 联合利华网申 (49)
- swagger和postman (46)
- 结构化程序设计主要强调 (53)
- 172.1 (57)
- apipostwebsocket (47)
- 唯品会后台 (61)
- 简历助手 (56)
- offshow (61)
- mysql数据库面试题 (57)