首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > .NET >

VSTO可以干串口通信不?信息直接发送到Excel

2012-12-14 
VSTO可以做串口通信不?信息直接发送到Excelhttp://topic.csdn.net/u/20100124/10/48032a01-ef6a-44b0-bfeb

VSTO可以做串口通信不?信息直接发送到Excel
http://topic.csdn.net/u/20100124/10/48032a01-ef6a-44b0-bfeb-46679185c9aa.html
上面最后有点问题,听老板一说,我决定试探性的问下:VSTO可以做串口通信吗?我用serialport控件可以接受到数据,并且将这些数据显示在richtextbox上面,现在想把这些数据直接在Excel中显示,请问要怎么做呢?
[最优解释]
1.启动excel从:工具-->宏-->Visual Basic 编辑器,打开excel VBA.

2.在ThisWorkbook上右单击鼠标选择插入--用户窗体

3.单击一下插入的窗体,单击菜单上的--工具--附加控件--选择Microsoft Communications Control, version 6.0

4.在窗体上添加mscomm1,添加commandButton1

5.单串口机子,短接rs232的2脚和3脚,双串口机子用232线连接两个串口,注意2、3线交叉,我这里以单串口短接举例。

6.复制以下代码到你的窗体里:


'VBA代码
Private Sub CommandButton1_Click()
   MSComm1.Output = "BEG1END"
End Sub

Private Sub MSComm1_OnComm()
  Dim t1 As Long, com_String As String
  Static i As Integer
  t1 = Timer
  
  Select Case MSComm1.CommEvent
     Case comEvReceive '收到 RThreshold定义的字符数1字节
           MSComm1.RThreshold = 0
          Do
             DoEvents
          Loop While Timer - t1 < 0.1 '延时时间自己调整
          com_String = MSComm1.Input
          MSComm1.RThreshold = 1
          i = i + 1: If i > 255 Then i = 1
          Application.Cells(3, i).Value = com_String
       End Select
       'ActiveWorkbook.SaveAs Filename:="C:\d1.xls"
End Sub


Private Sub iniMscomm()
   'On Error Resume Next
'=====-----初始化通信串口-----=====

   MSComm1.CommPort = 1                     '使用 COM1
   MSComm1.Settings = "9600,N,8,1"          '9600 波特,无奇偶校验,8 位数据,一个停止位
   MSComm1.PortOpen = True                  '打开端口
   
   MSComm1.RThreshold = 1                   '缓冲区有1个字节就产生OnComm事件
   MSComm1.InputLen = 0                     '为 0 时,使用 Input 将使 MSComm 控件读取接收缓冲区中全部的内容。
   
   MSComm1.InputMode = comInputModeText  'Input以二进制形式取回用comInputModeBinary,以文本形式取回是(缺省项)
   MSComm1.RTSEnable = True
   MSComm1.InBufferCount = 0                '清空缓冲区
   
End Sub

Private Sub UserForm_Initialize()
    iniMscomm
End Sub



7.双击thisWorkBook,复制以下代码到窗体里:



'VBA代码
Private Sub Workbook_Open()
   UserForm1.Show 0
   'UserForm1.Hide

End Sub



8.保存文件并关闭excel,然后再打开你的文件,然后单击你窗体上的按钮看看。
9.这个程序是我为你特意做的,已经做过测试,sys2003 office2003。
10.如果excel中有数据输入,再去测试你的设置,注意com口号与波特率的设置。
[其他解释]

Private Sub cmdbtn_Close_Click()
cmdbtn_Close.Enabled = False
cmdbtn_Con.Enabled = True
End Sub

Private Sub cmdbtn_Con_Click()
cmdbtn_Close.Enabled = True
cmdbtn_Con.Enabled = False
iniNetCom
End Sub

Private Sub NETComm1_OnComm()
Dim t1 As Long, str1 As String
t1 = Timer
Select Case NETComm1.CommEvent
Case comEvReceive
Do
DoEvents
Loop While Timer - t1 < 1.5
com_String = NETComm1.InputData
End Select
End Sub
Private Sub iniNetCom()
On Error Resume Next
NETComm1.CommPort = 1
NETComm1.Settings = "115200,N,8,1"
NETComm1.PortOpen = True
NETComm1.RThreshold = 1
NETComm1.InputLen = 0
NETComm1.InputMode = comInputModeText
NETComm1.RTSEnable = True
NETComm1.InBufferCount = 0
End Sub

没做过VB项目,这是在Excel中用VBA写的,调试的时候发现可以占用串口,但是数据接收与否不知道怎么看,有没有可能在表格中将这些数据显示出来呢?
[其他解释]
不懂啊,顶
[其他解释]
发现上面的代码有问题,串口被占用的时候,依旧能通过……
[其他解释]
10.如果excel中有数据输入,再去测试你的设备,注意com口号与波特率的设置。
[其他解释]
引用:
没做过VB项目,这是在Excel中用VBA写的,调试的时候发现可以占用串口,但是数据接收与否不知道怎么看,有没有可能在表格中将这些数据显示出来呢?

Private Sub NETComm1_OnComm()
Dim t1 As Long, str1 As String
t1 = Timer
Select Case NETComm1.CommEvent
Case comEvReceive
Do
DoEvents
Loop While Timer - t1 < 1.5
com_String = NETComm1.InputData
stop '加上这句,当程序暂停时把鼠标指针放到com_String上看。
End Select
End Sub
引用:
发现上面的代码有问题,串口被占用的时候,依旧能通过……


代码没有问题,因为我做了出错处理,要想看到错误,你要把On Error Resume Next删除或注掉
VB的注释是'
'On Error Resume Next
[其他解释]
引用:
10.如果excel中有数据输入,再去测试你的设备,注意com口号与波特率的设置。

天哪……啥都不说了……
[其他解释]
引用:
1.启动excel从:工具-->宏-->Visual Basic 编辑器,打开excel VBA.
10.如果excel中有数据输入,再去测试你的设置,注意com口号与波特率的设置。

测试了下,发现一个问题啊!
就是我现在打开了xx.xls文件后,会运行这个窗体(UserForm1),点击连接后会有些才可以开始接受数据:
问题是我已经打开了这个Excel文件(xx.xls),这个xx.xls程序就被占用了,怎么还可以修改呢?
[其他解释]
引用:


Private Sub btn_Start_Click()
iniMSComm


End Sub
Private Sub iniMSComm()
MSComm1.CommPort = 1
MSComm1.Settings = "115200,n,8,1"

MSComm1.RThreshold = 1
MSComm1.InputLen = 0
MSComm1.PortOpen = True
MSComm1.InputMode = comInputModeText
MSComm1.RTSEnable = True
MSComm1.InBufferCount = 0
End Sub

Private Sub MSComm1_OnComm()
Dim t1 As Long, com_string As String
Static i As Integer
t1 = Timer
Select Case MSComm1.CommEvent
    Case comEvReceive
        MSComm1.RThreshold = 0
        Do
            DoEvents
        Loop While Timer - t1 < 1
        com_string = MSComm1.Input
        MSComm1.RThreshold = 1
        i = i + 1: If i > 255 Then i = 1
        Application.Cells(3, i).Value = com_string
End Select
End Sub


就收不到数据,或者数据无法显示出来……,帮忙看看啊
[其他解释]
会不会调试程序?
设置断点,看看是否触发了onComm事件。

另外我让你测试的你测试了?

加个QQ我和你聊,在这太费劲了。23231803,写明你的CSDN名子

[其他解释]
引用:
会不会调试程序?
设置断点,看看是否触发了onComm事件。

另外我让你测试的你测试了?

加个QQ我和你聊,在这太费劲了。23231803,写明你的CSDN名子

哈哈,好了,加了你了……结贴,只能给100分
[其他解释]
引用:
会不会调试程序?
设置断点,看看是否触发了onComm事件。

另外我让你测试的你测试了?

加个QQ我和你聊,在这太费劲了。23231803,写明你的CSDN名子

要不你来这里顶下啊
顺便也给你加分,一样的贴
http://topic.csdn.net/u/20100121/14/90230a91-2f6d-4f08-a971-7757dcba677d.html
[其他解释]
http://topic.csdn.net/u/20100121/14/90230a91-2f6d-4f08-a971-7757dcba677d.html
上面没加链接,等你去顶了以后再结贴
[其他解释]
借VS2010东风,CSDN为啥不搞一个VSTO版快!!!!

【VSTO之家】
http://vsto.5d6d.com

【VSTO专家群】109033523




【VSTO】数据获取
【VSTO】对象起源
【VSTO】MSDN
【VSTO】Backstage View
【VSTO】名人堂
【VSTO】案例
【VSTO】MOSS
【VSTO】Excel Services
【VSTO】Open XML
【VSTO】资源、工具
【VSTO】教学视频
【VSTO】示例代码 
【VSTO】Actions Pane
【VSTO】智能标签

...
[其他解释]
很好。至少思路上有巨大帮助,抽空俺也试试。谢谢。

热点排行