首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >利用Excel与工业运动控制器的HTTP接口

利用Excel与工业运动控制器的HTTP接口
EN

Stack Overflow用户
提问于 2015-07-29 02:45:36
回答 1查看 40关注 0票数 0

我使用Excel与一个使用HTTP协议的工业运动控制器进行通信。这就是我正在做的事情&它运行得很好。

代码语言:javascript
复制
  ColumnCountA = Sheets(1).Range("A" & Rows.Count).End(xlUp).Row

   a3 = 1

   For a1 = 0 To ColumnCountA - 1


        Set objHTTP = CreateObject("MSXML2.ServerXMLHTTP")
        URL = "http://127.0.0.1/kas//plcvariables"
        objHTTP.Open "PUT", URL, False


        a2 = CStr(a1)
        a4 = CStr(a3)

        strDATA1Array = "Sample1Array[" + a2 + "]=" + LTrim((Application.ActiveSheet.Range("a" + a4).Value))
        strDATA2Array = "Sample2Array[" + a2 + "]=" + LTrim(Str(Application.ActiveSheet.Range("b" + a4).Value))


        strSendToKAS = strDATA1Array + "," + strDATA2Array + ","


        objHTTP.send (strSendToKAS)


        a3 = a3 + 1

   Next

使用上面的代码,我能够以数组的形式(strData1Array,strData2Array)将A&B列的所有内容发送到运动控制器。

我有下面的问题- 1。我想让用户知道这个数据传输已经完成(细胞数通常可以达到5000。因此,完成实际的数据传输需要8-10秒。我们有任何‘数据传输完成’确认位在excel端吗? 2。我计划使用一个按钮“清除数据在运动控制器”。按下此按钮后,我希望以前发送的所有HTTP数据都被重新设置为0。怎么做?我试着在A&B列中按0,但我的excel程序挂起。有什么建议吗?

EN

回答 1

Stack Overflow用户

发布于 2015-07-29 03:48:02

几件事:您的代码正在为每个循环中的objHTTP创建一个新的对象。这似乎是一种潜在的资源浪费。我会把这句话移出循环。另外,下一行不使用循环中的任何变量,因此在循环中使用它似乎也没有任何意义。

Open行确实需要在循环中,根据IServerXMLHTTP的文档,Send方法每次都需要一个OpenSend。既然如此,我会让他们更紧密地联系在一起,这样你所做的事情就更明显了。

至于检查命令是否已经完成,您可以检查ReadyState属性。

我不能完全理解删除之前的HTTP命令是什么意思,但我认为您是说要从excel工作簿中删除它们。您可以使用ClearContents来完成这一任务。

代码语言:javascript
复制
  ColumnCountA = Sheets(1).Range("A" & Rows.Count).End(xlUp).Row

   a3 = 1
   Set objHTTP = CreateObject("MSXML2.ServerXMLHTTP")
   URL = "http://127.0.0.1/kas//plcvariables"


   For a1 = 0 To ColumnCountA - 1   

        a2 = CStr(a1)
        a4 = CStr(a3)

        strDATA1Array = "Sample1Array[" + a2 + "]=" + LTrim((Application.ActiveSheet.Range("a" + a4).Value))
        strDATA2Array = "Sample2Array[" + a2 + "]=" + LTrim(Str(Application.ActiveSheet.Range("b" + a4).Value))


        strSendToKAS = strDATA1Array + "," + strDATA2Array + ","

        objHTTP.Open "PUT", URL, False    
        objHTTP.send (strSendToKAS)

        'Check if the data transfer is complete
        Do While objHTTP.ReadyState <> 4
             Do Events
        Loop    

        'Do something to inform the user the data transfer has completed  
        MsgBox("The HTTP data transfer has completed")

        a3 = a3 + 1

   Next

   ColumnCountA.ClearContents
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31690414

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档