读取串行Mettler Toledo数字秤的重量

本文关键字:数字 Toledo Mettler 读取 | 更新日期: 2023-09-27 18:27:26

我试图从c#应用程序中的数字秤中读取重量,发现了这个问题这正是我想要做的但对我来说,下面的函数永远不会运行。

private void port_DataReceived(object sender, SerialDataReceivedEventArgs e) 
{ 
this.Invoke(new EventHandler(DoUpdate)); 
} 

我已经在设备管理器中检查了天平,它的位置设置为Port_#0004.Hub_#0003,看起来工作正常我不确定天平的端口号,所以我做了

var test = SerialPort.GetPortNames();

只有CCD_ 2返回

Edit 1:当我执行int a = port.ReadByte();时,我的应用程序将挂起,并且执行永远不会从此语句向前移动。

读取串行Mettler Toledo数字秤的重量

我遇到了这样的问题,并解决了将设备中的COM配置(Configuration > Comunication > Conections)更改为SICS的问题。我不知道你的比例模型,但也许我的代码可以帮助你。[使用C#从Mettler Toledo(IND560)秤设备读取数据]

您能尝试轮询而不是使用DataReceived事件吗?此外,我相信DataReceived事件在触发之前有一个阈值,您可能也需要对此进行研究。

您能从余额中获得序列号吗?这应该是连接时要做的第一件事。它将允许您验证连接是否已建立。如果您在通过C#接口连接时遇到问题,请先尝试使用超级终端。你可以很快改变很多设置,并拨入正确的设置。尽管天平应该能够使用各种各样的波特率和停止位等等。他们通常适应能力很强。但一定要试试HyperTerminal。

我在找pdf,但有一个很长的可用命令列表(取决于您的型号)。pdf大约有130页长。你读过这个吗?

请看这篇文章,我使用了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.");
        }
    }
}