mscom怎么用?
请粘几句主要的来看看!

解决方案 »

  1.   


    MSComm控件有许多属性(Property),其中一些重要的属性如下: CommPort:设置串口号;类型:short 。 Settings:设置串口通信参数;类型:Csting 。 PortOpen:设置或返回通信口的状态;类型:BOOL 。 InputMode:设置从缓冲区读取数据的格式;类型:long 。 Input:从接收缓冲区读取数据;类型:VARIANT 。 Output:向发送缓冲区写入数据;类型:VARIANT 。 InBufferCount:接收缓冲区中的字节数;类型:short 。 OutBufferCount:发送缓冲区中的字节数;类型:short 。 CommEvent:设置或返回Input每次读出的字节数;类型:short 。 CommEvent:串口事件;类型:short 。 其中串口号(CommPort)设置为1、2等表示COM1、COM2。参数设置(Settings)的格式为“
    B,P,D,S”B表示波特率,P表示奇偶校验(N:无校验,E:偶校验,O:奇校验),D表示字
    节有效位数,S表示停止位数。串口状态为BOOL变量,TRUE表示打开串口,FALSE表示关闭串口
    。InputMode使程序能方便地选择从缓冲区读取数据的格式,设置为0时,为字符串格式(Tex
    t),设置为1时,为二进制格式(Binary)。InputLen设置或返回的是用Input从缓冲区读字
    符串时每次读出的字符个数,这个性质对于读出数据块中长数据串非常有用。 另外,MSComm控件提供了两种方法来处理串口通:上面属性的InBufferCount和OutBufferCo
    unt用于串口的查询方式;对于较复杂的通信任务,可通过SetCommEvent()函数设置串口要
    响应的事件,当相应事件或串口错误事件发生时,系统会激活OnComm()事件,在OnComm()
    中添加用户的处理代码,则可实现类似DOS中断的串口处理程序。 2、变频器串口通信控制检测的软件编程 在项目窗体中嵌入MSComm通信控件之后,为了用该控件控制一个串口进行通信操作,还必须
    在应用程序中插入该控件。为此为程序的某个对话框插入MSComm控件,控件名为MSCOMM1,并
    为其添加两个定时器控件(TimPeriodic和TimNonPeriodic)和一个命令按钮控件CmdNonPeri
    odic 。通信控件用于访问串口、发送和接收数据;周期定时器控件(TimPeriodic)用于控制
    每秒由计算机向各数据点发送周期性命令;命令按钮控件与非周期定时器控件(TimNonPerio
    dic)用于发送非周期性命令。MicroMaster变频器回送的状态信息一帧位14个字节。为此,程
    序编制上采用事件驱动的通信方式,串口每接受14个字符边激活一个OnComm()事件,在OnC
    omm()消息处理函数中加入相应的处理代码,用来读取状态字ZSW和HIW各位的状态参数,并
    做出相应的处理,如显示、报警等等。下面简要给出用事件驱动方式读出变频器回送状态字的
    程序源代码。设RS-485的口地址为PC机的串口2的地址,波特率为9600bps 。 (1)窗体中各控件初始设置:TimPeriodic为1s,TimNonPeriodic为0.5s Sub Form_Load() Mscomm1.CommPort=2 ’选用COM2串行口 MsComm1.setting=”9600,N8,1” ’波特率为9600,无奇偶校验,8位数据位,一位停止位
     Mscomm1.InputLen=0 ’Input将读取接收缓冲区的全部内容 Mscomm1.InputLenSize=1024 ’设置接收缓冲区的字节长度 Mscomm1.PortOpen=0 ’打开通信口 Mscomm1.InBufferCount=0 ’清除发送缓冲区数据 Mscomm1.OutBufferCount=0 ’清除接收缓冲区数据 TimPeriodic.inteval=1000 ’设置1s定时间隔,使遥测命令每隔1s发送1次 TimNonPeriodic.inteval=500 ’设置0.5s定时间隔,查询命令按钮是否处于激活状态以确定
    是否发送周期性命令 CmdPressed=False ’命令按钮为未激活状态 DuringPeriodic=False ’周期命令数据传输尚未开始 DuringNonPeriodic=False ’非周期命令数据传输尚未开始 End Sub (2)非周期性命令的发送:根据命令按钮状态及周期性命令数据传输状态,在TimNonPerio
    dic定时器的中断程序中发送非周期性命令。 Sub CmdNonPeriodic_Click() CmdPressed=True ’命令按钮激活 End Sub Sub TimNonperiodic_Timer() If DuringPeriodic=True OR Cmdpressed=False Then Exit Sub ’如周期命令数据传输尚未
    结束或命令按钮处于激活                                                            状态,则退出发送非周期
    性命令程序。 CmdPressed=False ’命令按钮恢复为未激活状态 Call SendData(NonPeriodic_COMMAND) ’发送非周期性命令 Mscomm1.Rthreshold=R_NONPERIODIC_BYTE‘发送非周期性命令后,设置Rthreshold属性,使
    主站接收所设定的字节数                                       后引发OnComm事件 End Sub (3)TimPeriodic定时器程序:在TimPeriodic定时器的中断程序中发送周期性命令。 Sub TimPeriodic_Timer() If DuringNonPeriodic=True Then Exit Sub ’如非周期命令数据传输尚未结束,则退出发
    送非周期性命令程序。 DuringPeriodic=True ’设置周期命令数据传输状态为正在进行中 Call SendData(NonPeriodic_COMMAND) ’发送非周期性命令 Mscomm1.Rthreshold=R_PERIODIC_BYTE’设置Rthreshold属性,使主站接收R_PERIODIC_BYT
    E个字节,引发OnComm事件 End Sub (4)OnComm事件程序:根据Rthreshold属性设置值,当接收缓存区内接收到相应字节的字符
    时,引发OnComm事件,在中断程序中接收数据。 Sub Mscomm1_OnComm() Select Case Mscomm1.commEvent ’在此插入处理各种不同错误或事件的代码 Case MSCOMM_EV_RECEIVE ReceiveString$=Mscomm1.Input Select Case Mscomm1.Rthreshold Case R_PERIODIC_BYTE‘周期性命令的应答数据 Call DisposeDate(NonPeriodic_CommAND) ’处理接收数据 DuringPeriodic=False ’设置周期命令数据传输状态为结束 Case R_NONPERIODIC_BYTE ’非周期性命令的应答数据 Call DisposeData(NonPeriodic_CommAND) ’处理接收数据 DuringNonPeriodic=False ’设置非周期命令数据传输状态结束 End Select End Select End Sub 上述程序中,因变频器回送的状态信息一帧为14个字节,所以R_NONPERIODIC_BYTE和R_PERI
    ODIC_BYTE 。对于变频器回送的状态信息则利用Windows的消息处理函数OnComm()进行处理
    。在消息处理函数中,将变频器回送的14个状态字一次全部读到所定义的变量参数中,然后程
    序再从变量参数中分别读取各状态字,在屏幕上显示、判断并报警。 好,完了