【发布时间】:2015-06-13 12:02:11
【问题描述】:
我有一个与一些外部硬件接口的 vb.net 应用程序 - 一组电机控制器。为此,我使用了硬件供应商提供的 CANOpen 库。但是,坦率地说,库中内置的超时时间过长,并导致应用程序在特定条件下痛苦地挂起。如果可能的话,我宁愿不需要编辑库。
在 vb.net 中设计另一个更短的超时时间的最明智的方法是什么?有问题的函数是一个阻塞函数,因此线程内计时器可能无济于事。这里有优雅的解决方案吗?
【问题讨论】:
-
在不知道库的结构的情况下,不清楚,但我想知道您是否可以创建库的子类并更改超时的持续时间?
-
如果可以的话,那就太好了,但遗憾的是,就我的专业知识水平而言,图书馆本身同样神秘莫测。超时持续时间似乎不是可供用户更改的参数,并且看起来是硬编码的。
-
我感受到了你的痛苦。尝试从 VB 中处理任何特定供应商的硬件在很大程度上是一个巨大的痛苦,我对尝试与我最终编写自己的以太网/IP 通信驱动程序的 AB ControlLogix 处理器交谈感到恼火。只是出于兴趣,您想与什么硬件通信?
-
哈! VB 从一开始就看起来很方便,因为所有的库都在那里,但它并不总是那么简单。我正在尝试与一对重新命名的 Invertek Optidrive 电机 VFD 交谈 - 但具体来说,这些电机并不总是在使用,并且在控制软件运行时并不总是供电。结果是线程挂起 20-30 秒等待建立连接的超时,因为没有其他方法可以确定它们的状态。我想严肃的答案是编写我自己的 CANOpen 'ping' 来检查首先发生了什么,但这听起来很费力。
-
残酷的事实是VB 是方便,但供应商库通常不是 - 他们宁愿你支付相当于英国国家赤字的费用来使用他们的软件!以 AB 为例,5k+ 用于开发许可证,另外 3k 用于我当前项目的运行时。抢劫他们中的很多混蛋。
标签: vb.net multithreading timeout