MSComm控件在中文Windows下的通信问题与处理方法(1)_第1页
MSComm控件在中文Windows下的通信问题与处理方法(1)_第2页
MSComm控件在中文Windows下的通信问题与处理方法(1)_第3页
MSComm控件在中文Windows下的通信问题与处理方法(1)_第4页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、MSm控件正在中文Windows下的通信题目成绩与处置惩奖要收(1)摘要VB5.0/6.0的S通信控件供应了一系列尺度通信命令的接心,它答应创立串心毗邻,但正在真践通信硬件谋划历程中,S控件并没有是像念像中那样好谦战简单独霸,出格是正在中文inds下通信时更会呈现题目成绩。本文便S控件正在真践利用中年夜要呈现的题目成绩和编程本收停顿探供。闭键词s控件串心通信处置惩奖1.S控件的根底实际一样平常讲去,策画机皆有一个或多个串止端心,它们顺次为1、2、.。那些串心借供应了内部装备与P停顿数据传输战通信的通讲,那些串心正在PU战中设之间充任说明器的足色。当字符数据从PU收支给中设时,那些字符数据将被转

2、换成串止比特流数据;当汲与数据时,比特流数据被转换为字符数据传达给PU。再进一步讲,正在独霸系统圆里,inds用通信驱动步伐(.DRV)挪用API函数收支战汲与数据。当用通信控件或声明挪用API函数时,它们由.DRV说明并传达给装备驱动步伐。做为一个VB步伐员,要编写通信步伐,只需晓得通信控件供应应inds通信API函数的接心便可,换句话讲,只需设定战监视通信控件的属性战变乱便可。2.利用S控件停顿数据的汲与战收支弄清楚以上根底属性战变乱后便可以开端编写通信步伐了:正在VB5.0/6.0中新建一个工程文件,增减irsftntrl5.0组件,正在窗体Fr1中参减and命令按钮并与名为dTest,

3、S控件与名为S1,写进以下代码:PrivateSubdTest_lik()S1.Prt=1设定1心IfS1.Prtpen=FalseThenS1.Settings=9600,N,8,19600波特率,无校验,8位数据位,1位制止位S1.Prtpen=True翻开串心EndIfS1.utBufferunt=0浑空收支缓冲区S1.InBufferunt=0浑空汲与缓冲区收支字符数据,留意必需用回车符(vbr)完毕S1.utput=Thisisagdbk!vbr拨挨德律风号码或收支AT命令S1.utput=ATDT0294563622vbr收支字符数组数据,留意ByteArray必需事前定义赋值Di

4、ByteArrayasbyte()定义静态数组ReDiByteArray(1)重定义数组大小ByteArray(0)=0ByteArray(1)=1S1.utput=ByteArray收支字符数组数据EndSubPrivateSubS1_n()SeletaseS1.EventaseEvReEive汲与字符数据DiBufferAsVariantS1.InputLen=0当Inputde属性值为0文本形式时,变量中露String型数据。当Inputde属性值为1两进制形式时,变量中露Byte型数组数据。S1.Inputde=InputdeBinaryBuffer=S1.Input汲与通信题目成绩与

5、办理要收3.1汲与的数据少于收支的数据假设经由过程S控件一次性传支较多的两进制数据,那末,很年夜要支到的数据没有敷。例如正在设置为2400bps传输率的状况下,一次性可以传输2048个字符数据,那末正在年夜年夜皆状况下一次只能支到1200个字符左右,那是因为新版的S32.X中存正在一个影响传输两进制数据的Bug。32位indsAPI函数利用了几个用TIEUTS构制暗示的限时变量,riteTtalTieutnstant即是其中的一个,它被inds内部设定为5000即5秒,那个常量决议了正在通信驱动步伐制止传输之前消耗正在收支缓冲区中数据的工夫的黑黑。5秒钟意味着通信速度为1200bps状况下仅能

6、收支600个字符,2400bps状况下仅能收支1200个左右的字符。终究结果上,正在一个缓冲区内一次性收支更多的数据黑黑常年夜要的。VB5.0/6.0版本的S控件有一个新删的紧张的属性称为ID,ID指的是当串心被翻开时,被API所挪用的串心句柄或标识表记标帜,那也意味着能利用API接心函数去建正那个常量。每次串心封闭后,inds会主动将之光复为5000,所以,每次翻开串心后需要从头设定。以下是API声明朝码:TypeTIEUTSReadIntervalTieutAsLngReadTtalTieutultiplierAsLngReadTtalTieutnstantAsLngriteTtalTie

7、utultiplierAsLngriteTtalTieutnstantAsLngEndTypeDelareFuntinSetTieutsLibKernel32(ByValhFileAsLng,_lpTieutsAsTIEUTS)AsLngDelareFuntinGetTieutsLibKernel32(ByValhFileAsLng,_lpTieutsAsTIEUTS)AsLngDitieutsAsTIEUTSDiRetAsLngIf1.Prtpen=FalseThen1.Prtpen=TrueEndIf翻开串心后从头设定串心句柄Ret=GetTieuts(1.ID,tieuts)Setsed

8、efaulttieutstieuts.ReadIntervalTieut=1tieuts.ReadTtalTieutultiplier=1tieuts.ReadTtalTieutnstant=1tieuts.riteTtalTieutultiplier=1tieuts.riteTtalTieutnstant=(1.utBufferSizeVal(1.Settings)*10000+1000Ret=SetTieuts(1.ID,tieuts)3.2如何收支年夜于128的字符数据正在通信步伐中,以单字符要收逐一收支数据时,每个数据范畴为0-255即十六进制的00-FF。正在单字符版本的英文inds

9、或DS版的BASI步伐中,只需要将响应的数据转换成响应的字符收支到通信端心便可。但正在中文inds下却止欠亨,假定正在中文inds下运转以下步伐:DiiasIntegerFri=0T255S1.utput=hr(i)Nexti渴视正在汲与端获得预期的0-255之间的数据,成果倒是:前129个数据汲与准确,为0-128,背里127个数据为126个0战一个255。形成那种成果的去由原果正在于中文inds利用的是单字节字符散(DBS)系统。DBS系统利用0-128之间的数字暗示ASII字符,年夜于128的数字仅做为前导字符,它只是暗示是一个非推丁语系的字符,而其真没有代暗示真意义。上述步伐正在挪用H

10、R()函数时用到了DBS字符散,果而收死了此类缺点。那末,如何收支年夜于128的数据呢?谜底是利用字节数组,将以上步伐改成:DiyData(255)AsByteFri=0T255yData(i)=iNextiS1.utput=yDataDDEventsLpUntilS1.utBufferunt=0汲与历程如何收支中翰朱符串VB5.0/6.0中可以直接把中翰朱符同等于英翰朱符收支,如:S1.utput=如今收支中文数据!,但那种要收收支的中文数据没有克没有及太少,收支缓冲区战汲与缓冲区的大小需设定为中翰朱符的两倍以上,并且收支与汲与系统所处的独霸系统版本最好要齐整,没有然会呈现汲与或收支缓冲区溢

11、出之类的缺点。那种要收可用于一样平常要供没有太下的场所。除上述要收中,借可以采纳直接要收收支中翰朱符串。正在收支端将汉字或字符转换为机器内码或区位码数据数组,然后将转换后的数据收支到串心,正在汲与端汲与到数据后,根据相反的顺次将获得的数据转换为响应的汉字或字符。正在转换历程中,要用到位运算,如获得汉字的内码后需要将下字节战低字节分开,而VB5.0/6.0中并出有供应此类函数,以下是供整数下、低字节的函数。PubliFuntinHiByte(aAsInteger)DibAsIntegerb=aAndHFF00b=b/256Ifb0Thenb=b+256HiByte=bEndFuntinPubli

12、FuntinLByte(aAsInteger)DibAsIntegerb=aAndHFFLByte=bEndFuntin3.4如何正在通信历程中停顿延时正在某些通信历程中,经常需要正在收支完一组数据后停顿一段延时,以等待对圆处置惩奖上组数据,以下是延时函数代码。PubliSubDelay(PauseTieAsSingle)DiStartStart=Tier设定开端工夫DhileTierStart+PauseTieDEventsLpEndSub4.完毕语跟着策画机利用范畴的没有竭扩大,策画机之间的少途通信誉得也越去越广泛。做为RAD开收东西代表的VisualBasi一样供应了一系列尺度通信命令的接心,它答应创立串心毗邻,可以毗邻到其他通信装备如de、借可以收支命令、停顿数据交流和监视战响应

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论