打印

【求助】请各位版主,热心人等来看看!RS485掉线等故障!

[复制链接]
楼主: emailli
手机看帖
扫描二维码
随时随地手机跟帖
41
emailli|  楼主 | 2007-8-22 15:19 | 只看该作者 回帖奖励 |倒序浏览

?

你关接收处理,其它机器0X3A可能收不到。
其他922发出来的数据我没有接收到也没有关系啊。
至于Uart.RxdPoint溢出,我特意做了一个%70的处理,就是为了防止溢出。

另外,地址的解析,好像用switch不行的。

先要将数据从接收队列中拿出来,做了解码处理以后才可以解析命令的。

如果考虑到本机还没有来得及回复,其他的922就已经开始发送数据出来的话,必然会增加RAM的开销空间。而922的空间实在太紧张了。


PS:不过农民讲习所提出的建议很好。
我打算还是用队列的方式再将原来的程序改一下。同时将解析也拿出来到主程序中做。不过和你这个解析还有点出入。要先解码,因为传输的是ASCII码。不是HEX。

使用特权

评论回复
42
emailli|  楼主 | 2007-8-22 15:23 | 只看该作者

有看啊!

你的标准化教材我专门整理过。
弄成过PDF文件,
还打印出来装订成册了呢。

只是你的那个系统太复杂,有很多的时候用的话RAM要求比较高。

操作起来还没有用这种前后台架构 处理来的快。

所以一直没有用上。

使用特权

评论回复
43
lixun00| | 2007-8-22 15:53 | 只看该作者

我觉得溢出应该不会,

使用特权

评论回复
44
农民讲习所| | 2007-8-22 15:59 | 只看该作者

晕,俺的教材是最最标准的前后台

使用特权

评论回复
45
农民讲习所| | 2007-8-22 16:00 | 只看该作者

你开的数组和队列占用的RAM差不多

队列是数组的延伸

使用特权

评论回复
46
emailli|  楼主 | 2007-8-22 17:10 | 只看该作者

正在改编中

希望用上了农民讲习所的通用程序后有用。

不过即使解决了。本着研究的精神,也还是未找到 程序的问题或者是硬件的问题。

只是换了一条路而已。

当然,现在还不知道问题点在哪里!可能是硬件也还可能是软件,也可能是协议。

使用特权

评论回复
47
dai_weis| | 2007-8-22 21:20 | 只看该作者

会不会是有地电位差?

节点多,个个节点的GND连在一起,但是可能有的节点有GND与其他GND之间有电位差?或者静电问题导致引起的

使用特权

评论回复
48
菁菁木华| | 2007-8-22 21:55 | 只看该作者

估计是振荡器的精度问题?你用的晶振,还是陶振。

使用特权

评论回复
49
emailli|  楼主 | 2007-8-23 08:12 | 只看该作者

LPC922用的是内部晶振

LPC2131用的是11.0592的晶振

晶振问题应该不大吧。

有一个现象就是现在 不再进入串口中断了。

晶振偏移应该不回发生这样的情况。

使用特权

评论回复
50
救火车| | 2007-8-23 10:40 | 只看该作者

希望楼上解决问题以后公布问题所在。

报歉楼主,昨天我没时间看贴。我只是帮你顶了一下。希望楼上解决问题以后公布问题所在。
"测试表明,当模块掉线以后,串口接收指示灯不再闪烁。而此时程序运行灯闪烁正常。
因为当模块掉线以后,如果我用镊子将LPC922的复位引脚碰一下GND,让LPC922复位的话,LPC922是可以重新通信的。"
我认为是单片机进入一种异常状态。
可能的情况有:
1、串行口的配置改变。看你掉线的频率,这个可能性较小。
2、串行口的程序进入一个死锁状态。就像所长说的那样。
看现象,因为发光二极管不闪。
在函数void recive_isr(void) interrupt 4中,只有ESR = 0; 会阻止进中断,使灯不闪。
这个函数中,如果接收到完整包,会禁止接收中断。
            Flag.RxdEnd = 1;             // 收到完整的一帧数据
            Uart.RxdLen = Uart.RxdPoint;  // 
            ESR = 0;                   // 禁止接收中断
当然错误不在收函数里。我很怀疑因为某种错误,造成禁止中断后,执行不到开中断ESR = 1;的操作。
检查所有的开中断(ESR = 1;)条件,看在异常情况下,有没有死锁的可能。
ESR = 1; 在程序里共有4处,一个一个推敲吧。要考虑是在出现异常错误的情况。

使用特权

评论回复
51
农民讲习所| | 2007-8-23 11:42 | 只看该作者

千万不要用关中断的方式来控制工作流程

中断的应用是代表实时处理这个层次,主循环代表着非实时这个层次。靠开关中断来进行两个层次的交互,是非常糟糕的做法。

使用特权

评论回复
52
twz8858877| | 2007-8-23 12:02 | 只看该作者

不会是死循环

因为程序运行指示灯正常,只有两种情况会发生这种现象
1、没有开中断就退出中断
2、非正常退出中断,导致硬件未释放中断不能重入。
看看编译后的代码仔细找找吧

使用特权

评论回复
53
zuoyou| | 2007-8-23 14:35 | 只看该作者

re

用一个RS485HUB吧,会简单的多
联网产品www.ucore.com.cn

使用特权

评论回复
54
yiyu| | 2007-8-24 01:37 | 只看该作者

治标不治本

既然复位能解决问题, 就增加通讯超时处理, 可以重新初始化定时器,软复位,内部看门狗复位, 如果都不行, 就外接看门狗, 硬件复位, 一定解决问题。呵呵。不过我对phlips的机器还是很相信的,

使用特权

评论回复
55
stycx| | 2007-8-24 06:50 | 只看该作者

程序运行指示灯用定时器中断做的吧?它正常不一定程序就正

使用特权

评论回复
56
古道热肠| | 2007-8-24 10:43 | 只看该作者

串行通讯中断要做好

   软件冗余容错设计也是切实可行的办法,不提倡用硬件看门狗复位重来。最常见的方法就是重发机制和CRC校验检错机制来作容错处理。

使用特权

评论回复
57
救火车| | 2007-8-25 10:39 | 只看该作者

楼主哪儿去了?

调试得怎么样了?

使用特权

评论回复
58
lixun00| | 2007-8-25 12:48 | 只看该作者

关注!

使用特权

评论回复
59
emailli|  楼主 | 2007-8-27 14:37 | 只看该作者

正在改程序中

有了结果我会告诉大家的。

使用特权

评论回复
60
zhiwei| | 2007-8-28 13:44 | 只看该作者

估计是软件问题

接收到错误帧以后应该能复位,还要处理缓冲区溢出问题,总之错误的帧就不要响应,状态机要及时复位。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则