Modbus TCP Excel VBA测试

最近正在研究用Excel VBA实现 modbus TCP取数据的功能,先是尝试用OSWINSCK控件的方式,之后又尝试了WindowsAPI尝数的方法。最后试下来用通过调用ws2_32.dll API函数的方法成功了,大体的过程如下:

  1. oswinsck控件方法。
    访问 http://ostrosoft.com/oswinsck.aspx 主页,非商业用途的话是免费使用的,有下载zip包的向导。我的测试平台是win10 64bit 企业版 10.0.19042 Build 19042,VBA Retail7.1 1108 ,下载exe文件后运行安装,在安装目录下有个文件夹:C:\Program Files (x86)\OSWINSCK , 里面是各种Demo程序,解压VBA的那个例子试着做了一个,代码也是借鉴了高人的。通过 Tools -> references 添加了 "OstroSoft Winsock Compent"的引用。在这里插入图片描述
Option Explicit
Dim wsTCP As OSWINSCK.Winsock


'This example uses OstroSoft Winsock Component
'http://www.ostrosoft.com/oswinsck.asp

Private Sub CommandButton1_Click() ' Retrieve Data
On Error GoTo ErrHandler
  Dim sServer As String
  Dim nPort As Long
  Dim StartTime
  Dim Test As Excel.Application
'  Dim wsTCP As OSWINSCK.Winsock
  
 
  DoEvents
  nPort = 1100 ' See configuration in Do-More Designer
  ' Set the IP address of the PLC
'  sServer = Sheets("Sheet1").Range("B4").Value '"192.168.1.3"
  sServer = "10.107.242.118"
  RetrieveData = 1
  CommandButton1.BackColor = "&H0000FF00" ' Set colour to Green"

'Check to see if the object has been created. If not set wsTCP.
If SetObject = "" Then
Set wsTCP = CreateObject("OSWINSCK.Winsock")

wsTCP.Protocol = sckTCPProtocol
SetObject = 1
  End If

' Check the state of the TCP connection
'0 sckClosed connection closed
'1 sckOpen open
'2 sckListening listening for incoming connections
'3 sckConnectionPending connection pending
'4 sckResolvingHost resolving remote host name
'5 sckHostResolved remote host name successfully resolved
'6 sckConnecting connecting to remote host
'7 sckConnected connected to remote host
'8 sckClosing Connection Is closing
'9 sckError error occured

' If TCP is not connected, try to connect again.
If wsTCP.State <> 7 Then
    If (wsTCP.State <> sckClosed) Then
      wsTCP.CloseWinsock
    End If
    ' Open the connection
    wsTCP.Connect sServer, nPort
    StartTime = Timer ' Use the timer to determine if a connection cannot be made
    Do While ((Timer < StartTime + 2) And (wsTCP.State <> 7))
        DoEvents
    Loop
    If (wsTCP.State = 7) Then
    Else
       Exit Sub
    End If
End If

' If we are connected then request the information.
If (wsTCP.State = 7) Then
    MbusQuery = Chr(0) + Chr(1) + Chr(0) + Chr(0) + Chr(0) 
  • 2
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
ExMod Serial Assistant使用说明 ExMod串口调试助手主要功能是发送大量串口数据,设计目标是满足上位机串口编程调试之用,是个人把在上位机编程中常用的模拟调试功能汇总到一个调试软件中而成。除普通串口调试助手功能外,还包括发送文件中数据、Modbus Rtu Master常用功能。其中文件格式支持Excel、CSV、文本文件3种格式。配合虚拟串口软件,只要确定了通讯协议,即可脱离设备调试软件。可适用于自定义协议、Modbus Rtu协议。 使用说明: 软件主界面包括3个功能区,“发送任意串口数据”以上为功能区1,用于基本串口数据发送,还包括计算CRC校验码并与数据同时发送功能。 功能区2 包括“读取Holding寄存器”、“读取输入寄存器”、“写入多个寄存器”,用于单条Modbus数据读取、发送。 剩余部分为第3功能区,“发送文件中数据”用于大量串口数据发送。其下有多个发送选项,包括发送范围、发送间隔、数据格式。“延时”用于设置多条数据间发送间隔。“Modbus数据”选择表示文件中数据按Modbus格式发送,不选择表示为普通串口数据。如果文件中所有数据为同一寄存器地址,需在“寄存器地址”中输入地址,如果多条数据地址不同,可在文件中编辑寄存器地址,此时需选择“第一列为地址”。Excel、CSV中第一列好理解,文本文件在软件中也按CVS格式处理,即文本文件中第1个逗号之前视为第一列。 发送文件中数据如果选择“Modbus数据”,仅支持“WriteMultipleRegisters”命令发送。发送串口数据如果16进制数据不为整字节(Modbus时为整字),会在数据前补0。 接收数据中的显示内容如果长度超过0.1M会自动保存到以当前时间命名的文本文件中。也可以手动保存以便以后调试时使用。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值