由于下位机处理能力不够强,所以上位机给下位机传输数据时,在高速的串口通讯经常会出错!!要怎样处理啊:(1.正常情况下是要传输1024字节就检查一下OK标志位.但如果传输了少于1024字节就出错了,那么这已经传输的<1024的字节要怎样处理?续传吗?
2.大家对串口通讯有什么好的经验,在这里说下,偶一定高分相赠!老板交给偶这样一个重任,要是搞不定就要闪人了,help me!

解决方案 »

  1.   

    以前用Delphi开发串口没发现这种问题啊,C#2.0的没试过,帮你顶一下,呵呵
      

  2.   

    保证两边通讯数率相同,把数据分成若干小节传送,没小节后面添加验证码[crc或者add都行],没传送一个节,必须下位机返回正确与否,正确继续传送,直到传送完成
      

  3.   

    补充:
    1.串口协议是我们自己把c#2.0中SerialPort类进行了第二次封装的一个协议包
    2.数据是从数据库读取后,进行对象二进制序列化后进行上传下载的,数据库中现在已有1w条以上的数据,所以数据量还是蛮大的,这样当从上位机向下位机发送时,由于下位机处理能力有限,就会有拥塞的现象发生micher_yan(人在江湖飘)说的我觉得有道理,我们现在的情况是把缓冲区设的足够大,发送时候没有进行校验,以保证速率,但很容易出现掉包的情况,不知道要怎样才能改进:(
    另:每次发送校验都进行校验,会不会太慢?
      

  4.   

    串口本来就不快的,如果想速度快一点,就用USB吧
      

  5.   

    缓冲区设置的太大,对台式机或者处理能力较强的机器可能没事,对类似单片机或者是pc104的板子可能会有问题,莫名其妙的得不到完整数据,我以前的思路是把缓冲设置成512字节
    1 发送简单字节到下位机,告诉他清空缓冲区,
    2 读取500字节,通过函数获得这500字节的crc验证码4位,附加到最后面,发送,然后等待下位机返回
    3 下位机接收504字节,验证前500字节的crc骂是否等于最后4字节,返回成功与否,不成功 上位机重发,成功上位机继续发送4 重复2,3步,直到全部完成