【问题标题】:Read Weight from a Serial Mettler Toledo Digital Scale从串行 Mettler Toledo 数字秤读取重量
【发布时间】: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 端口。如果您不确定,请将其拔下并重新插入,然后查看哪个端口消失然后重新出现。如果您没有看到任何内容,则可能是缺少驱动程序。

标签: c# .net usb serial-port


【解决方案1】:

我遇到了这样的问题,我解决了它在设备中将 COM 配置 (Configuration > Comunication > Conections) 更改为 SICS。我不知道您的比例模型,但也许我的代码可以提供帮助。 [Reading data from Mettler Toledo (IND560) scale device using C#]

【讨论】:

    【解决方案2】:

    您可以尝试轮询而不是使用 DataReceived 事件吗?另外,我相信 DataReceived 事件在触发之前有一个阈值,您可能也想研究一下。

    【讨论】:

    【解决方案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.");
            }
        }
    }
    

    【讨论】:

      猜你喜欢
      • 2022-01-23
      • 1970-01-01
      • 2019-03-17
      • 2016-05-30
      • 1970-01-01
      • 2018-09-21
      • 1970-01-01
      • 2017-05-27
      • 1970-01-01
      相关资源
      最近更新 更多