从串行 Mettler Toledo 数字秤读取重量
Posted
技术标签:
【中文标题】从串行 Mettler Toledo 数字秤读取重量【英文标题】:Read Weight from a Serial Mettler Toledo Digital Scale 【发布时间】:2012-03-29 02:26:47 【问题描述】:我正在尝试从 c# 应用程序中的数字秤读取重量,发现 this 问题 这正是我想要做的 但对我来说,下面的函数永远不会运行。
private void port_DataReceived(object sender, SerialDataReceivedEventArgs e)
this.Invoke(new EventHandler(DoUpdate));
我在设备管理器中检查了比例,它的位置设置为Port_#0004.Hub_#0003
并且似乎工作正常
我不确定秤的端口号,所以我做了
var test = SerialPort.GetPortNames();
只有COM1
被返回
【问题讨论】:
也许秤没有给你任何数据?使用 portmon 查看计算机是否正在接收任何数据。 如果你还没有,你可能需要一个驱动把USB连接变成一个虚拟的COMM端口,否则打开串口将无法连接到USB设备。编辑 SamFisher83 的观点很好,您可能需要以某种方式对其进行初始化以使其发送信息。 @SamFisher83 我正在使用 win 7 (x64) portmon,现在可以使用,还有其他选择吗? 秤收到指令后总会返回响应。响应可能是说命令未被理解或用户传递了错误的参数,但只要接收到某些内容就会返回。 如果这是 USB 连接而不是真正的串行端口连接(使用 d-sub 连接器直接连接到计算机上的物理端口),那么 COM1 可能是错误的。检查 Windows 控制面板上的设备管理器,查看 Windows 是否看到虚拟 COM 端口。如果您不确定,请将其拔下并重新插入,然后查看哪个端口消失然后重新出现。如果您没有看到任何内容,则可能是缺少驱动程序。 【参考方案1】:我遇到了这样的问题,我解决了它在设备中将 COM
配置 (Configuration > Comunication > Conections
) 更改为 SICS
。我不知道您的比例模型,但也许我的代码可以提供帮助。 [Reading data from Mettler Toledo (IND560) scale device using C#]
【讨论】:
【参考方案2】:您可以尝试轮询而不是使用 DataReceived 事件吗?另外,我相信 DataReceived 事件在触发之前有一个阈值,您可能也想研究一下。
【讨论】:
我应该轮询端口的哪个属性? 设置一个定时器来定期检查串口上的BytesToRead。然后使用 Read 读取数据。查看 MSDN 页面了解更多详情:msdn.microsoft.com/en-us/library/30swa673.aspx【参考方案3】:你能从天平上得到序列号吗?这应该是您连接时要做的第一件事。它将让您验证连接是否已建立。如果您在通过 C# 接口连接时遇到问题,请先尝试使用超级终端。您可以非常快速地更改很多设置并拨入正确的设置以使用。虽然天平应该能够使用多种波特率和停止位等。它们通常适应性很强。但是请尝试使用超级终端。
我正在寻找 pdf,但可用命令列表很长(取决于您的型号)。 pdf 大约有 130 页。你读过这个吗?
【讨论】:
感谢您的回答 1) 是的,我已阅读 pdf,它说验证 USB 连接已建立的步骤很好 2) 超级终端在 win 7 中不可用 3) 当你说我是能够从天平中获取序列号,它就像我可以通过硬件设置访问的秤的属性吗? 序列号是您特别要求或发出重新启动命令时天平返回的响应(两个响应应该看起来相同)。这是要测试的第一件事。超出【参考方案4】:请看this的帖子,我用Mike库连接的。
using System;
using System.Linq;
using System.Text;
using HidLibrary;
namespace MagtekCardReader
class Program
private const int VendorId = 0x0801;
private const int ProductId = 0x0002;
private static HidDevice _device;
static void Main()
_device = HidDevices.Enumerate(VendorId, ProductId).FirstOrDefault();
if (_device != null)
_device.OpenDevice();
_device.Inserted += DeviceAttachedHandler;
_device.Removed += DeviceRemovedHandler;
_device.MonitorDeviceEvents = true;
_device.ReadReport(OnReport);
Console.WriteLine("Reader found, press any key to exit.");
Console.ReadKey();
_device.CloseDevice();
else
Console.WriteLine("Could not find reader.");
Console.ReadKey();
private static void OnReport(HidReport report)
if (!_device.IsConnected) return;
var cardData = new Data(report.Data);
Console.WriteLine(!cardData.Error ? Encoding.ASCII.GetString(cardData.CardData) : cardData.ErrorMessage);
_device.ReadReport(OnReport);
private static void DeviceAttachedHandler()
Console.WriteLine("Device attached.");
_device.ReadReport(OnReport);
private static void DeviceRemovedHandler()
Console.WriteLine("Device removed.");
【讨论】:
以上是关于从串行 Mettler Toledo 数字秤读取重量的主要内容,如果未能解决你的问题,请参考以下文章
Mettler toledo IND780 通过 javascript 读取重量