各位大哥:
   小弟今日在做一个关于串口通信的东东,用的是mscomm控件.我现在碰到了一个很棘手的问题,就是:
    我利用input和output来进行输入输出的,我想一个字节发送数据的范围应该是0-255
但是好象在130(?)以上的数据就不能发送了,否则接受的只是0,可能是因为没有一个字符它的序号在130(?)以上吧.但是现在我想要能发送在0-255范围内的任何一个数字,让接受程序只接受一次就可以识别是哪个数字.而且接受程序可以是其他任何程序编写的.不知哪位大哥大侠能给小弟指点一二?在此感激不尽!谢谢
                                               小弟 即日

解决方案 »

  1.   

    在实际开发中经常遇到通讯只是用来发送一些控制字符命令和少量数据。在VB的中文在线帮助中有“若数据只用 ANSI 字符集,则用 comInputModeText”的表述。 ANSI字符集是0-127这容易使人误解为&h88也可用“INPUTMIDE=comInputModeText”方式收发。我刚开始用VB编通讯模块时就为此迷惑过,网上不少网友也时常问及这种问题。实际上在VB中0-127是可以正常收发的,大于127即&H7F的只有&H80和&HFF能够收发,其余ANSI字符都被过滤为0。由于串口通讯是以字节收发的,数据如以comInputModeText模式收发则非字符串数据会被过滤。在VB中用“INPUTMIDE   =  comInputModeBinary” 就可以解决这个问题,只是收发都必须用动态数组来完成。用comInputModeBinary模式编程稍有点复杂,调试也不直观,对于初学者不易掌握。另外软件完成后,在实际应用时会增加工程维护难度,因为对于二进制代码不是易于理解的。比如下端机发送现场统计数据233,comInputModeBinary模式下串口监测到“:A &H233;",它代表A探针的温度。一般串口监测软件要么用ASCII方式显示,要么用二进制方式显示。用ASCII方式则不能看到&H233,而二进制方式则示不好理解,如果显示58 65 233 59,我想没有人喜欢这种方式(如果有更好的方式的话)。但如果显示“:A 2 3 3 ;”不就解决问题了!用comInputModeText方式就可完成任务了,只是多了一段数据分离程序。对于一般通讯要求这种方法不为是一种好方法。由于通讯任务是多种多样的,有时候这种方法就有点力不从心了,如传送较多的的数据时,这会显著地增加通讯量,通讯变得复杂了,对于单片机系统就不太合适了;还有一些特殊要求,如数据包的识别符也不适此法,但能确定传送数据码值范围也可用此法。下面介绍另一种方法,此法适用比较广,传送二进制数据通讯量增加也不大。
      

  2.   

    用SPCOMM吧,这个很好用。我今天刚完成了一个串口通信程序。
    使用前设置好波特率、起始位、停在位、奇偶校验等,就可以用了。
      

  3.   

    spcomm我现在还不熟悉,而且我的程序已经编到一定的地步了。我发现了一个问题,就是为什么大于127的数字必须连续发两次我就能收到呢?如果全部过滤为0,也就算了,但是为什么连续发送两次就能收到?我实在是不懂,请各位赐教!