串口的数据位不是5/6/7/8吗?怎么接收一个18位的数据包呢?(200分)

  • 主题发起人 主题发起人 aRichMan
  • 开始时间 开始时间
A

aRichMan

Unregistered / Unconfirmed
GUEST, unregistred user!
现在我要解析一个18byte的数据包
连续输出格式
STX A B C X X X X X X X X X X X X CR CKS
1 2 3 4 5 6
其中:
1、〈STX〉ASCII起始符(02H)。
2、状态字A、B、C。
3、显示重量 可能是毛重也可能是净重。6位不带符号和小数点的数字。
4、皮重 6位不带符号和小数点的数字。
5、〈CR〉ASCII回车符(0DH)。
6、〈CKS〉可选的校验和。
A的格式为前3位为小数点的位置
0 0 0 XXXX00
1 0 0 XXXXX0
0 1 0 XXXXXX
1 1 0 XXXXX.X
0 0 1 XXXX.XX
1 0 1 XXX.XXX
0 1 1 XX.XXXX
1 1 1 X.XXXXX
我怎样获得数据包并获得像状态字A每一位的置来确定数据的小数点位置呢?

串口的数据位不是5/6/7/8吗?
象这个18位的数据怎么接收呀(最好用spcomm或turbopower async)? 本人愚笨,请大家指教。

有谁做过电子称的程序,能否发给我一个。hellowbh@163.net.谢谢。
 
数据位虽然是5/6/7/8的,只是通讯协议。但一个包结构可以任意大小,取决于你的需要。
 
串口的数据位5/6/7/8与接受到数据是两回事。
18位与18字节也不同。
接受的数据格式是二进制与ASCII处理方式也不同。
 
什么是串口的数据
 
看来大家都是富翁,莫非对我这200分看不上眼吗?
大家帮帮忙吧。
 
有谁做过电子称的程序,能否发给我一个。hellowbh@163.net.谢谢。
 
我作过一个,现在正在用
 
无非就是从串口接受数据,截取数据,显示,计算,存储。cpjin@163.com
 
5/6/7/8只是通讯模式的约定,只要通讯双方约定好通讯速率、起始位、停止位、数据位等,即可建立通讯联接。
楼主所说问题是通讯协议的问题,与联接采用的通讯模式无关。
与设备建立通讯联系,用控件,设置好通讯模式,按通讯协议与设备握手,响应COM控件接收到的数据,按你所说的“<STX> A B C.....”格式解释数据帧即可。
需要注意的是:
1.你收到的数据串并不能保证是从<STX>即02h开始的,所以要从收到的数据中找开第一个以02h开始的位置,再向后数18bytes,假设为一个数据帧,检查结束标志<CR>,计算校验和,若以上都正确,则认为收到一个正确的数据帧。若不正确,则从上次找到的02h后一个byte向后再进行,直到找到一个正确的数据帧为止。
2.找数据帧的工作最好收到数据后将数据放到一个专用队列里,方便你使用。
3.找到正确的数据帧后,最好用一个buf将它Copy出来,一方面不防碍你继续找数据帧,另一方面也方便你对数据帧进行解释。
4.对数据帧的解释严格按协议进行即可,如,p是指向buf的指针,则p[0]即可<STX>,p[1]为A,p[2]为B...,一切问题解决。
 
串口的数据位与数据包的长度无关。在SPCOM的ONRECIVE中读取数据后,有一个参数(好像是BUFFSIZE)是表示数据包长度的,也就是收了多少个BYTE的数据。你的应该是18个,然后你逐个分析,取A的低3位是 (A AND $07).
现在手头没有例子,要不可以给你简单写写的
 
aRichMan老兄:
我的问题还没回答我呢:
http://www.delphibbs.com/delphibbs/dispq.asp?lid=2141377
你这个问题我可以给你做一个接收程序
qq:46524223
 
我是用mscomm做的。
http://www.delphibbs.com/keylife/iblog_show.asp?xid=4529
 
只要设置好接收buffer 长度.
应该一次可以接收到全部的数据了.
好象 inputlen 是一次读取的长度.
 
大家看看我的问题
http://www.delphibbs.com/delphibbs/dispq.asp?lid=2485522
为什么接收不到数据,该怎么作呀,
 
急需大侠们解答???
 
你的理解有问题。。

串口处理位数和。。。。数据帧长度是不一样的。。

实际数据采集系统中。。数据帧,可以规定一个byte作为这一帧的结束标志。
比如:
90 eb 1f 2f 3f 4f ....crc1 crc2 7e
~~~~~~~ ~~~
前面的为90 eb作为这一帧的开始。。以7e作为结束标志。这样你的一帧可以是几个byte,也可以使几千byte。。..上位机以实时同步读取没一byte。。。。监测7e结束标志。

传送的帧长度。。。和串口的处理位的概念是不一样的。
 
后退
顶部