在VB.NET中向HID /以太网连接的设备发送命令

时间:2018-08-24 07:58:09

标签: vb.net forms class ethernet hid

我试图使我的软件与USB或以太网连接的设备(用户可以在这两者之间进行选择)进行通信,我收到了该设备,其文档以及带有命令和代码的演示软件。我想将他们的代码集成到我的应用程序中,并尝试对其进行调整,因为我实际上并不需要它们提供的所有功能。创建任何命令后,将创建表单的新副本,然后从此处运行其余代码(以下代码): 调用新表格:

Dim cererePlata As New PayMentREQ 'PayMentREQ is the class for payment command

Using progres As New FrmProgress(cererePlata)
    If VerificareStatus() = True Then
       progres.ShowDialog()
       progres.Close()
    End If
End Using

在表单内部,在form_Shown事件中,代码调用此函数:

Response = Connector.SendRequest(PackNum, CByte(SearchData.Cmd), SearchData)

参数设置正确,PackNum是一个字节,SearchData是之前设置的Payment命令。

在SendRequest函数内部,有以下行:

Dim iPackedLen As Integer = libSLIP.PackSLIPData(packNum, command, buffer, 0, buffer.Length, bufTmp) 'libSLIP is a class that uses functions inside a dll I received with the device

同样,参数设置正确并且工作正常。在改编过程中,我尝试删除该表单并将所有代码放置在一个类中,以便用户每次向设备发送命令时都不会显示该表单。使用断点逐行进行操作时,设备会接收并处理命令。没有断点时,SendRequest函数内部的行会出现以下错误:

  

CommunicationDevice.exe中发生了类型为'System.AccessViolationException'的未处理异常

     

其他信息:尝试读取或写入受保护的内存。这通常表明其他内存已损坏。

下达付款命令时,将设置要出售的产品,折扣(如果有的话)等。我的猜测是,通过使用类而不是表单,命令发送得太快,设备不堪重负。我尝试对类使用析构函数,但没有结果。 如果有任何人对此有答案,我将不胜感激。多谢您耐心阅读,祝您有美好的一天! (:

编辑:将Threading.Thread.Sleep(200)放在命令之间可以使其正常工作,因此问题的根源在于命令发送的速度太快。但我觉得应该有一种更“专业”的方法来解决此问题,例如在上一个命令完成时启动下一个命令...

0 个答案:

没有答案