定义串行通信的数据包的方法 点击:1478 | 回复:4



yoyo1212

    
  • 精华:0帖
  • 求助:0帖
  • 帖子:5帖 | 1回
  • 年度积分:0
  • 历史总积分:16
  • 注册:2002年7月26日
发表于:2003-09-24 14:15:00
楼主
我在串行通信中遇到问题,我无法传送FLOAT类型的数据。有网友ZHE告诉我可以先定义数据包的格式,全部已INT发;收到后再进行INT--FLOAT的转换。 可在我手上的编程资料上没有找到关于数据打包和解包的内容,请知道这个问题的网友能告知一声,不甚感谢。



microtomato

  • 精华:1帖
  • 求助:0帖
  • 帖子:84帖 | 1476回
  • 年度积分:0
  • 历史总积分:2078
  • 注册:2001年11月02日
发表于:2002-08-21 21:11:00
1楼
可以先定义一个协议:然后将指数和尾数分为几个字节发就可以了。机器收到后再进行转换即可。

derbder

  • 精华:0帖
  • 求助:0帖
  • 帖子:1帖 | 6回
  • 年度积分:0
  • 历史总积分:9
  • 注册:2002年6月25日
发表于:2002-08-26 16:41:00
2楼
最近在水表的设计中,涉及到485通讯,就看了很多这方面的资料,发现都不能用到项目中来,大部分都是在为了通讯而写,就是ti,ri,然后从4000h,写80个字节到xxx,到处是while(ri == 0);这些不限时的等待,我不禁怀疑这些书的介绍的出发点,也就是设计485协议从哪里出发呢?从哪里考虑呢?我觉得应该从应用来设计这个协议,不是为了通讯而设计,但实际中,一个系统中,考虑到是谁要通讯,为了什么通讯,是偏重于速度呢,还是偏重于质量? 速度可能就要开设短帧,固定长度的帧,等等,质量就要加入各种错误校验作为保证,所以应用的目的不同,编写出的协议也不同; 而且受到你系统的影响也很大,由于时间不充分的系统,比如我这里的,就需要串口中断必须短,对于帧的判断不能做在中断里,接收一个byte,或者发送一个byte都要退出中断,所以一般书上的例 子就用不上了,要摆设多长的帧数组,给几个指针能够高效而又非常节省内存的设计整个485协议,我觉得如果soc是神经系统,485等通讯协议就是神经末梢,如果不畅通,也是要半身不遂的,但我的水平有限,更多的就谈不深,谈不透了,(比如一个485协议涵盖几个层为好,我是不赞成仅仅将她打入链路层以下,作为485本身,就不能说他特指ti,ri等,很多时候我想命令帧的名称如何设置呢?这一帧携带的数据,如何能让想用这些数据的子函数利用呢,而且是很顺利的不增加额外负担的利用呢?) 希望各位先生,各位高手多加指点,不胜感激。 谢谢。 在485协议的数据传输中,经常面对数据中出现帧头标志的问题,有字节重复(如果数据中有帧头标志,就自动重复一次,接收时如果发现帧头字节有两次重复,就认为是数据),等等方案,我的想法是靠标志来区分帧头帧尾,就是一旦接收帧头完毕,就设响应标志,表示之后的都是数据;这样的设计有没有很大的弊端,其他有没有更好的方法?? netmars 16 帖子数 帖子 - 08/20/2002 : 11:11:16 -------------------------------------------------------------------------------- 你好啊! 我也正在设计485的网络,使用在煤气表中。我现在也在为485的可靠通信犯难,交流一下吧。我的email: netmars@citiz.net zbby 38 帖子数 帖子 - 08/22/2002 : 13:44:26 -------------------------------------------------------------------------------- 通了 zbby 发表于 2002-8-21 11:33 侃单片机 ←返回版面 将发送缓冲区,和接收缓冲区作为应用层和下面传输层(或叫数据链路层,什么的)的服务点,两层共享这里,则一些恼人的参数传递问题就不必考虑了, 传输缓冲区尾指针指0,则485打包程序将串口可发送绿灯(应该是黄灯)亮起(直到该进程从接收缓冲区取走数据,才亮绿灯),其他进程可以要求485发送自己的命令或数据,否则只能等待; 进程开始使用485通讯(使用485发送缓冲区,就是在服务点上要求下层的服务),他使串口可发送红灯亮起,阻止其他进程使用该缓冲区;同时通知485打包程序自己的id号,然后该进程退出任务队列,485打包程序在任务队列上循环运行,监视485通讯的接收和成帧情况,这样当485打包程序接收到完整的一帧之后,他根据id号呼叫该进程,(将该进程重新加入任务队列),由于该进程并不管485打包程序运行与否,只要他运行他就到服务点上取数,服务点没有数他就要求服务,所以这次他被485打包程序唤醒的时候,服务点处已经有数了,所以他取走就是,没有其他罗嗦, 这就是我的485的通盘设计, netmars 16 帖子数 帖子 - 08/23/2002 : 20:54:57 -------------------------------------------------------------------------------- 请问你有没有考虑过冲突的解决,就是 当一个设备在发送时如何避免其他设备发送 zbby 38 帖子数 帖子 - 08/23/2002 : 21:38:31 -------------------------------------------------------------------------------- 考虑了,如果该进程发现485不是绿灯,则在时钟队列上订一个10ms时钟,由这个时钟10ms之后在将该进程挂上任务队列。而10ms占用485的进程应该差不多处理完乐,如没完这个进程在等10ms

gongkongedit

  • 精华:1099帖
  • 求助:0帖
  • 帖子:14392帖 | 54470回
  • 年度积分:0
  • 历史总积分:622
  • 注册:2008年9月08日
发表于:2003-05-18 22:43:00
3楼
我现在做一个小项目,不过没有时间编串行通信部分的程序了,有哪位帮忙提供一个232的C51的程序,谢谢,我的e-mail:dreamllz@etang.com

gongkongedit

  • 精华:1099帖
  • 求助:0帖
  • 帖子:14392帖 | 54470回
  • 年度积分:0
  • 历史总积分:622
  • 注册:2008年9月08日
发表于:2003-05-18 22:44:00
4楼
我现在做一个小项目,不过没有时间编串行通信部分的程序了,有哪位帮忙提供一个232的C51的程序,谢谢,我的e-mail:dreamllz@sohu.com

热门招聘
相关主题

官方公众号

智造工程师