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

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

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

通信协议:
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文件名和大小,等参数可以通过外部文件修改。

项目时间紧迫,如果能帮做成可执行文件,并提供源代码更好,另开帖送分。 --------------------编程问答-------------------- 问老朱 --------------------编程问答-------------------- 老朱是哪位?论坛ID也是老朱吗? --------------------编程问答-------------------- http://hi.csdn.net/zdingyun --------------------编程问答-------------------- 看了你的帖子,我发表一点看法:
1、VB程序不用管Flash和VB之间的数据传输吧?只需要管串口通信吧?
2、分析串口通信协议,我自己写了一个测试程序,你拿去试一试吧。


Private Declare Function GetTickCount Lib "kernel32" () As Long

Private Sub btnClose_Click()
    Dim bolP As Boolean
On Error GoTo errSub
    bolP = funLEDComm(mscLED, CInt(txtLEDNo.Text), "L")
    Exit Sub
errSub:
End Sub

'打开LED
Private Sub btnOpen_Click()
    Dim bolP As Boolean
On Error GoTo errSub
    bolP = funLEDComm(mscLED, CInt(txtLEDNo.Text), "H")
    Exit Sub
errSub:

End Sub

Private Sub Form_Load()
    With mscLED
        .CommPort = 1
        .Settings = "9600,n,8,1"
        .RThreshold = 0
        .InBufferSize = 1024
        .OutBufferSize = 100
        .OutBufferCount = 0
        .InputLen = 0
        .InputMode = comInputModeBinary
    End With
End Sub

Private Sub Form_QueryUnload(Cancel As Integer, UnloadMode As Integer)
    If mscLED.PortOpen Then mscLED.PortOpen = False
End Sub
'%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
'串口通信函数
'%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
Private Function funLEDComm(mscP As MSComm, intLEDAdd As Integer, strLEDStatus As String) As Boolean
    Dim strP As String
    Dim lngP As Long
On Error GoTo errSub
    strP = strLEDStatus & Right("000" & CStr(intLEDAdd), 3)
    strP = strP & funCheck(strP)
    If Not mscP.PortOpen Then mscP.PortOpen = True
    lngP = GetTickCount
    mscP.Output = strP
    Exit Function
errSub:

End Function

Private Function funCheck(ByVal strP As String) As String
    Dim intP As Integer
    Dim lngP As Long
On Error GoTo errSub
    For intP = 1 To Len(strP)
        lngP = lngP + Asc(Mid(strP, intP, 1))
    Next intP
    funCheck = Right("00" & Hex$(lngP Mod 256), 2)
    Exit Function
errSub:

End Function

--------------------编程问答--------------------
补充:VB ,  控件
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,