当前位置:编程学习 > VB >>

求VB与flash通信,给串口发送信息的程序

自己实在搞的头疼了,请各位高手帮忙。
用vb加载一个flash多媒体程序,flash中使用 fscommand("H888") 给vb发送信息。vb接收这个信号,经过编码加校验码以后,发给串口,以控制沙盘的LED灯。

vb接收flash发送的信息,并处理的程序如下:

Private Sub Flash1_FSCommand(ByVal command As String, ByVal args As String)
    Dim tvar, tvar1, tvar2, tvar3, tvar4 As Integer
    Dim cono, st As String
    
    st = Mid(command, 1, 1)
    If st = "H" Then
        tvar1 = Asc("H")
        tvar2 = Asc(Mid(command, 2, 1))
        tvar3 = Asc(Mid(command, 3, 1))
        tvar4 = Asc(Mid(command, 4, 1))
        tvar = tvar1 + tvar2 + tvar3 + tvar4
        cono = "H" & Mid(command, 2, 3)
        outcom = cono & Hex(tvar)
        
        stim = True
    Else
        tvar1 = Asc("L")
        tvar2 = Asc(Mid(command, 2, 1))
        tvar3 = Asc(Mid(command, 3, 1))
        tvar4 = Asc(Mid(command, 4, 1))
        tvar = tvar1 + tvar2 + tvar3 + tvar4
        cono = "H" & Mid(command, 2, 3)
        outcom = cono & Hex(tvar)
        stim = True
    End If
    
    MSComm1.Output = outcom
End Sub


vb初始化程序如下:
Private Sub Form_Load()
    'Dim n As Integer
    
    'INIfileName = App.Path & "\PFC.ini"
    'n = GetPrivateProfileString("FileName", "SName", "试验.swf", swfnam, Len(swfnam), INIfileName)
    'swfnam = Left(swfnam, n)
    'comm_port = GetPrivateProfileInt("CommSeting", "comm_port", 1, INIfileName)
    'comm_sn = GetPrivateProfileInt("CommSeting", "comm_sn", 9600, INIfileName)
    'MSComm1.CommPort = comm_port
    'MSComm1.Settings = comm_sn & ",n,8,1"
    'MSComm1.PortOpen = True
    'MSComm1.RThreshold = 1
    MSComm1.CommPort = 1 '选择com1
    MSComm1.Settings = "9600,N,8,1" '设置波特率为115.2kpbs,没有奇偶校验,8位数据位,1位结束位
    MSComm1.InputLen = 0 '读取全部的输入缓冲区
    If MSComm1.PortOpen = False Then MSComm1.PortOpen = True '端口打开
    MSComm1.RThreshold = 2
    MSComm1.SThreshold = 2
    
    Me.Left = 0
    Me.Top = 0
    Me.Height = 11520   'Screen.Height
    Me.Width = 30720    'Screen.Width
    Flash1.Movie = App.Path & "/main.swf"
    
    
    Flash1.Left = 0
    Flash1.Top = 0
    Flash1.Height = 11520
    Flash1.Width = 10000 '30720
    
    Flash1.Play
End Sub

我自己写的程序,最后就是串口接收不到信号,求各位大侠帮助。 --------------------编程问答-------------------- 通信协议:
RS232接口,(可以使用USB转串口扩展RS232接口)
波特率9600,8位数据位,1位停止位,无校验位

命令为ASCII码格式,6字节:
第一字节:H亮,L灭;
第二到第四字节:控制编号,这里:控制编号 = (第一列序号 - 1);
第五字节:校验码

另外全亮命令:H888F0
    全灭命令:L888F4

如点亮004号地区,命令为H004DC
其中H为点亮,DC为校验码
校验码算法:0X48+0X30+0X30+0X34=0XDC,所以校验码为DC其中H的ASCII码为0X48

如点灭004号:命令为L004E0
其中H为点亮,DC为校验码
校验码算法:0X4C+0X30+0X30+0X34=0XE0

灭灯命令随时可以发,
亮灯命令要有时间间隔才能发,两个亮灯时间间隔为闪三下的时间。


我的想法,如果能做成通用的文件最好,flash只管发送信号,vb负责接收信号,发送给串口,flash文件名和大小,等参数可以通过外部文件修改。

项目时间紧迫,如果能帮做成可执行文件,并提供源代码更好,另开帖送分。

--------------------编程问答-------------------- 看得迷糊,就是没见到接收的代码. --------------------编程问答-------------------- 不好意思,我初学vb,可能没说清楚
Private Sub Flash1_FSCommand(ByVal command As String, ByVal args As String)
这个函数就是接收flash发送的信号的。
--------------------编程问答-------------------- LZ用vb加载一个flash多媒体程序,那么这个flash多媒体程序是EXE可执行文件?VB通过啥来加载?仍感到迷糊. --------------------编程问答-------------------- flash就是1个swf文件,用flash10ocx 好像是这个名字。。。 --------------------编程问答-------------------- 在LZ的Flash1_FSCommand中只找到MSComm1.Output = outcom,那是发送到COM口的输出语句.
并未发现XX = MSComm1.Input 类型的读取COM口的典型获取数据的语句!
--------------------编程问答-------------------- 那能不能帮我改一下呢。。我对这些的确不懂,都是按照网上抄的。。 --------------------编程问答--------------------
引用 7 楼 qimangxing 的回复:
那能不能帮我改一下呢。。我对这些的确不懂,都是按照网上抄的。。


你使用的
Private Sub Flash1_FSCommand(ByVal command As String, ByVal args As String)
.....
End Sub
我的VB保存时报错,MSDN也未找到FSCommand的解释.

--------------------编程问答-------------------- --------------------编程问答-------------------- 问题应该是你向串口发送的数据上  
outcom = cono & Hex(tvar)
这里的outcom 是字符串和16进制数的组合  应该分开按字节发送
补充:VB ,  多媒体
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,