| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1768 人关注过本帖
标题:还是串口通讯的问题?有遇到问题了?
只看楼主 加入收藏
wmcwww
Rank: 2
等 级:论坛游民
威 望:1
帖 子:60
专家分:21
注 册:2012-11-2
收藏
得分:0 
不懂
2014-09-12 11:13
ljlbxhlc
Rank: 2
等 级:论坛游民
帖 子:124
专家分:20
注 册:2013-9-24
收藏
得分:0 
唉!谢谢大家!可是问题还是没解决!通过串口和道闸主板通讯!我通过串口监控器!能看到写读的字符串!比如我发指令0d01102de1通过监控可以看到接受了一个字符串10  2d  20   99  0d一共是16 组数字!这里没有都写出来!其中第8组存的小时!第九组存的是分!第是租存的是秒!可是在程序里得到的是一个值存在变量里!不知道怎么处理了!
上边的方法都看了看没有弄明白!我笨呀!是不是我没阐述清楚呢?
怎么把读到的值变成如:10  28  99  这样的字符串呢?我用len()函数看了看数据是16位的!显示是乱码!
或者就不用转化就有办法处理呀!
或者如何把这个值变成十进制数呀
2014-09-12 17:32
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:451
帖 子:10607
专家分:43186
注 册:2014-5-20
收藏
得分:0 
len()返回的是字节数,不是位数。
接收到的数据串sz: 10 2d 20 99 0d 数据,可看成 sz = 0h102d20990d。
如果是可打印字符串,直接输出。
如果从第 i 字节起取  8 位数值,则:db = CTOBIN(SUBSTR(sz,i,1),"1RS")
如果从第 i 字节起取 16 位数值,则:dw = CTOBIN(SUBSTR(sz,i,2),"2RS")
如果从第 i 字节起取 32 位数值,则:dd = CTOBIN(SUBSTR(sz,i,4),"4RS")
2014-09-12 19:56
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:451
帖 子:10607
专家分:43186
注 册:2014-5-20
收藏
得分:0 
例如:
*sz = BINTOC(2014,"2RS") + BINTOC(9,"1RS") + BINTOC(12,"1RS")
sz = 0hDE07090C
? TRANSFORM(CTOBIN(SUBSTR(sz,1,2),"2RS"));
  + "/" + TRANSFORM(CTOBIN(SUBSTR(sz,3,1),"1RS"));
  + "/" + TRANSFORM(CTOBIN(SUBSTR(sz,4,1),"1RS"))
2014-09-12 20:11
ljlbxhlc
Rank: 2
等 级:论坛游民
帖 子:124
专家分:20
注 册:2013-9-24
收藏
得分:0 
谢谢吹水老, s1 = BINTOC(2014,"2RS") + BINTOC(9,"1RS") + BINTOC(12,"1RS")
s2 = 0hDE07090C
s1==s2
我想问几个问题,
1、在命令框里输入?s2,输出  0hDE07090C,而问?s1输出的却是乱码。为什么?
2、怎么把s1转化成s2的形式。
3、 BINTOC(2014,"2RS")为什么会是0hde07呢?BINTOC(9,"1RS")==0h09我能理解。前边的理解不了
4、 ?CTOBIN(0h7b,'1rs')显示123,能理解,为啥CTOBIN(0h8b,'1rs')却显示-117,不理解。
2014-09-13 10:21
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:451
帖 子:10607
专家分:43186
注 册:2014-5-20
收藏
得分:0 
1、s1是一串字符的表现形式,s2是数据在内存的表现形式(内码)。因一些不可打印字符是不方便阅读(显示乱码),故用内码形式(0h)表示方便阅读,有时还可增强程序代码的可读性。如全角空格字符,显示是空的,什么也看不到,内码是A1A1,用内码表示0hA1A1,懂字符内码的一看就知道这串东东是什么数据。

2、s1与s2只是同一问题的两个表现方面,如果用程序语言的逻辑相等去判断,结果是返回“真”的,不存在转化的问题。如果不想看乱码的东东,方便阅读数据,可用 STRCONV(s1,15) 输出显示字串的内码数据。

3、数值2014用两个字节存放(16位),用Windows附件的计算器(程序员模式),选择10进制输入2014,再选择16进制,会看到结果(7DE),注意的是在内存中,低位在前高位在后。

4、使用CTOBIN()和BINTOC()时要注意参数cExpression与cFlags、nExpression与eFlags的关系与范围。
   如:eFlags 为 1 时(一个字节),nExpression的范围在 -128 到 127。VFP帮助有详细说明。
2014-09-13 12:01
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:451
帖 子:10607
专家分:43186
注 册:2014-5-20
收藏
得分:0 
以下是引用ljlbxhlc在2014-9-13 10:21:54的发言:

谢谢吹水老, s1 = BINTOC(2014,"2RS") + BINTOC(9,"1RS") + BINTOC(12,"1RS")
s2 = 0hDE07090C
s1==s2
我想问几个问题,
1、在命令框里输入?s2,输出  0hDE07090C,而问?s1输出的却是乱码。为什么?
2、怎么把s1转化成s2的形式。
3、 BINTOC(2014,"2RS")为什么会是0hde07呢?BINTOC(9,"1RS")==0h09我能理解。前边的理解不了
4、 ?CTOBIN(0h7b,'1rs')显示123,能理解,为啥CTOBIN(0h8b,'1rs')却显示-117,不理解。


至于第2点:s1转化成s2的形式。
不能忽视的一个问题:
当引用一些外来的非VFP控件对象时,如ActiveX控件或OLE对象,传递数据时需要使用二进制字符型数据。
可用 CREATEBINARY() 函数将VFP字符型数据转换为二进制字符型数据。
s2 = CREATEBINARY(s1)
2014-09-19 14:16
快速回复:还是串口通讯的问题?有遇到问题了?
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.034958 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved