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

qimangxing 2010-09-16 09:13:05
自己实在搞的头疼了,请各位高手帮忙。
用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

我自己写的程序,最后就是串口接收不到信号,求各位大侠帮助。
...全文
312 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
hbkjccl 2010-09-16
  • 打赏
  • 举报
回复
问题应该是你向串口发送的数据上
outcom = cono & Hex(tvar)
这里的outcom 是字符串和16进制数的组合 应该分开按字节发送
zdingyun 2010-09-16
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 qimangxing 的回复:]
那能不能帮我改一下呢。。我对这些的确不懂,都是按照网上抄的。。
[/Quote]

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

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

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

809

社区成员

发帖
与我相关
我的任务
社区描述
VB 多媒体
社区管理员
  • 多媒体
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧