《现代电子技术》2006年第23期摘录:2006年第23期总第238定
-
如发现有乱码,请点击下面链接浏览原文
正文摘录:
2006年第23期总第238定要分开。核心代码如下:lp()verlapped.()ffset:一O;lp()verlapped.0ffsetHigh:一O;//ClearCommError(hFile,lpErrors,lpStat);fSucccss:_二WriteFile(hFik,B_Jffer.nNumber()rBvtesToWrite,dwError:=ifdwErrorbeglndwError:=FINITE):TemplpNurobe·r()fBytesW“tten,@lp()verlapped);//synchron()usWriteFikstart(;etI.astErr()r:=FRR()RI()PENDINGthenWaitFor:Single()bject(1poverlapped.hFvent,INcasedwF:rroroIWAIT()BJECT—O:bcginfSuc-cess:一(jet()vcrlappedResull(hFile,//HANDI。EhFile,lp()vcrlapped.//I。P()VERI,APPE【)lpNum}]er()fTjytcswritten,//I。PDw()RDlpNumber()n{ytesTransferred,//addressofactuaIbytescountTrue)://B00I。}1wait//wa_1flagfSLlccess:一ResetFvent(1p()verlapped.hEvent);再编写一写线程,该线程永远在等一写事件,如果等到就调写过程往设备写相应内容,复位该事件,一曰.写完成,发用户定制的消息给主窗口.告知写L二完成.并给出写出字节数及写计数。到此,涉及串行通讯的部分就完成_r,下面我们来编写发送实现代码段:A:征设备发东吣,无非昆一·定长的卜六进制字符而已。我们需要编写一填充发送缓冲区过程。这一过程代码段较长.实现起来较复杂“asc语句分开。首先根据发送形式分开,是面向字符的、7廿的、文件的、还是弹道的,设计一全局发送缓冲区,该函数主要就是填写这一缓冲区,并给出发送长度。a1:对字符形式而言,用一编辑控件即可实现,将编辑控件内的义本Copy到发送缓冲区即可。a2:对字节晰占,制作相对要复杂的多。首先在界面卜放置一字符串格子控件,并定制该格子内每个单元只能输入两个字符,并没定只允许特定字符才可以输入,比如Ol,2A,3C,5D,6F.FE,AC,定制该格子的键盘按下消息、cellEdit消息,键盘按下消息处理输入检查,CellEdit消息保证只能输入两个字符。再放置一编辑控件用于输入发送长度。对字节而ij‘,冉编制自动侦测代码,在该方式下,判断是否是位允许化自动变换.从哪一字节开始,到哪一字节结束。例根据某通汛协议.某控制设备第2字节到第8字节表示某些状态变化,每一化代表某~状态,我们希望该仿真器能快速自动的给幢片J控制程序发来这一串代码。探测应用程序编的怎样。该部分就需要设计许多全局量用于记忆这一自动过程。编程逻辑为:首先使某一字节为0,下次自动加1,直到255,到了后换下一字节,直到设定的结束字节为255。这部分代码过长省略之。定制一Tl‘nlC,r组件,间隔可由界而设定。Timer消息就一句话,调发送按钮。发送按钮消息为:首先根据界面元素选发送形式,再根据其他元素设定发送时间间隔、长度等,调填充缓冲区代码过程完成设备缓冲填写,设置发送事件有信号。Case语句中其他形式为:a3:Flie形式:该形式下,首先由界面加入一文件。读为流文件形式,并求出文件长度及设定发送长度,求出发送次数,当每次发送时,从文件读出一小部分到发送缓冲区,直至发送完成。a4:理论弹道形式:这一部分实现起来很复杂,因为我们要模仿这样一过程.比方说:有一协议为:欲传一十六进制字节的信息,以第4字节开始,每3字节表示x,y,z,转换单位为10000j2‘24,Jfj二进制补码表示,其他字节根据协议可以定制,给定的文件为*.TXT文件,每秒给一次数据,给出400s数掂。要求每隔50n·s发来一组数,模仿一弹道进行过程。重新设计一界面,定制渎变化部分,有JL个元变化,每个变元占几亨节,是原码还足补码表示,从哪一字节开始放,是否需要插值处理。当装载完成后,我们将这一变化的缓冲区构造好。在FillSendBI·ffer过程中,根据定制的变量,从这个变化的缓冲区中取出信息,再用界面格子中取出其他发送信息.填写为一新的发送缓冲区,这就是要发送的东西。读过程用户消息:当读线程中读函数确实读到东西后,往主界面发一读完成消息。该消息完成信息显示。十六进制显示在Del—phi中没有现成代码,不妨自己编一通用过程,允许显示内存中任意数。定制硬件事件变化仿真代码:专业调试器在无外接硬件设备时,也可以仿真出硬件事件变化,重新设计一界面。调如下函数即可实现。Escape(?0mmFunction(HardwareDeviceHandle01,//HANDI。EhFi】e,//handletocOn]111UBlcationsdeviceCI。RDTR//DW()RDdwFunc//extendedfunctiontoperform)其他辅助功能:比如/kS(:II码表速查,调计算器程序,颜色调试等等,略之。(下转第74页)
阅读此文(图):
点击此处在线翻阅