一乐电子

一乐电子百科

 找回密码
 请使用微信账号登录和注册会员

QQ登录

只需一步,快速开始

快捷登录

手机号码,快捷登录

搜索
查看: 2458|回复: 13
收起左侧

[51单片机] 单片机串口阻塞的问题有没有坛友碰到过

[复制链接]
发表于 2015-9-6 13:19 | 显示全部楼层 |阅读模式
接手别人做的一个程序,ATMEL 89S52 + 89C2051 单片机开发的一个串口程序(严格来说是两个程序),89S52串口采集一个刷卡器的数据,处理好后通过P0口发送给2051,2051串口发送给电脑(如果我做这个程序就会选用12C5A60S2双串口单片机,绝不会用两个单片机来组合)。
99%情况下是非常正常的运行的。只是在不确定的时刻单片机会“阻塞” 一条数据——该数据未发送给电脑,当单片机收到下一条数据时(时间间隔不确定,短则几分钟,长则几个小时)才会把上次阻塞的数据一起给“挤”出来,这样数据虽然没有丢失,但是严重滞后造成实时性的问题。这种现象平均4天出现一次,很是头疼!


2051的串口是通过max232转换后发送给MOXA Nport 5210 串口服务器再进入网络的。
因为MOXA Nport 5210 串口服务器用了十来年,用过几十台了,从未出现过类似问题,而且也是国际大牌,手头临时也没有备件可更换,暂不考虑是串口服务器的阻塞问题。


有碰到过类似问题的请指点迷津!
发表于 2015-9-6 13:56 | 显示全部楼层
程序问题吧?
发表于 2015-9-6 14:56 | 显示全部楼层
本帖最后由 snoopy8008 于 2015-9-6 15:05 编辑

    碰到过类似的问题,但我没解决得了。

    4个8路温度巡检仪(内部是单片机),通过RS485接口,以MODBUS协议与西门子S7-300 PLC的CP340通讯。
    PLC依次发送32个通道的读取指令,对应的巡检仪回复指定通道的温度数据。
    有时数据错位:读取2通道时收到1通道的数据,错位也会跨仪表,错位1次之后所有的数据都错位。
    因为不影响使用,就没深究下去,其实也没那个能力深究。
    我认为是CP340羁押了数据,或者是我设置的不够完善。

    MOXA串口服务器,在我这出过别的问题:4个串口接4个扫码器,电脑通过MOXA的服务器给扫码器扫码指令,扫码器扫码后回复数据。
    有一次一个扫码器断电,再给这个扫码器发扫码指令之后,4个扫码器全部瘫痪。
    电脑程序BUG的可能性比较大,但厂家的编程人员未表态(假如程序有BUG的话,我认为加个超时就行了,厂家编程人员没必要不解决这么小的问题),因此无法排除MOXA的嫌疑。

    你现在的这种情况,我觉得应该考虑增加个串口监控的东东,先分清到底是谁羁押了数据,我觉得问题出在MOXA一侧的可能性更大。你一年用几台MOXA,我觉得给MOXA打个电话问问还是会有人理的。我到MOXA网站上下个资料,明确告诉他们什么都不买的,他们还要打电话来了解情况。
 楼主| 发表于 2015-9-6 16:07 | 显示全部楼层
snoopy8008 发表于 2015-9-6 14:56
碰到过类似的问题,但我没解决得了。

    4个8路温度巡检仪(内部是单片机),通过RS485接口,以MODBU ...

因为以前从未出现过类似问题,说人家产品有问题还有些心虚。
刚在你的鼓励下打了moxa技术服务电话,没想到人家几乎肯定是串口服务器的设置问题,说缓冲区太大了,而我们的数据字节太短(一条30字节内)
明天去客户现场设置后再观察观察!
发表于 2015-9-6 19:31 | 显示全部楼层
本帖最后由 aa7812 于 2015-9-6 19:34 编辑

串口接收的数据, 估计有结束符之类,  如何某种原因,丢失了结束符, 则前面的数据就要等了,
建议设计一个(软件)时间计数器, 接收到数据时, 清零,    当计数值超过一定时间后,  将缓冲器内容发送出去,
如果功能简单,不如直接改用二个串口的单片机更好

发表于 2015-9-7 11:36 | 显示全部楼层
监测2051的串口  就明确的知道数据阻在那个环节了啊,这个还要靠猜?
 楼主| 发表于 2015-9-7 14:24 | 显示全部楼层
guicai 发表于 2015-9-7 11:36
监测2051的串口  就明确的知道数据阻在那个环节了啊,这个还要靠猜?

已经集成在仪表里面了,如果方便早做了。本来在输出串口服务器的数据线上并了两根线出来监控,但客户也不可能给你提供一台电脑来监控,放自己的笔记本要三四天也不放心。


 楼主| 发表于 2015-9-7 14:32 | 显示全部楼层
本帖最后由 gongzhu 于 2015-9-7 14:34 编辑

MOXA技术人员说把packing length 由默认值0改为1就应该可以了。解释说串口服务器只要收到1个字节就发送,不会放在缓存里面了。
IMG_20150907_092437.jpg


本设置只能在ie里面改,不能在驱动设置软件中改(因为缺少这项)。
观察一周再说!
发表于 2015-9-8 16:29 | 显示全部楼层
gongzhu 发表于 2015-9-7 14:24
已经集成在仪表里面了,如果方便早做了。本来在输出串口服务器的数据线上并了两根线出来监控,但客户也不 ...

所以说 提问的时候 尽可能把前提条件说的清清楚楚,越全面越好., 不然很难得到有效帮助, 做无用功
发表于 2015-9-8 21:16 | 显示全部楼层
gongzhu 发表于 2015-9-7 14:32
MOXA技术人员说把packing length 由默认值0改为1就应该可以了。解释说串口服务器只要收到1个字节就发送,不 ...

默认是0?他有没有说0代表什么意思?

本版积分规则

QQ|一淘宝店|手机版|商店|电子DIY套件|一乐电子 ( 粤ICP备09076165号 ) 公安备案粤公网安备 44522102000183号

GMT+8, 2024-5-12 13:44 , Processed in 0.053799 second(s), 37 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表