Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/296.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 从串行梅特勒-托莱多数字秤读取重量_C#_.net_Usb_Serial Port - Fatal编程技术网

C# 从串行梅特勒-托莱多数字秤读取重量

C# 从串行梅特勒-托莱多数字秤读取重量,c#,.net,usb,serial-port,C#,.net,Usb,Serial Port,我试图在c#应用程序中读取数字秤的重量,发现了一个问题 这正是我想做的 但对我来说,下面的函数永远不会运行 private void port_DataReceived(object sender, SerialDataReceivedEventArgs e) { this.Invoke(new EventHandler(DoUpdate)); } 我已经在设备管理器中检查了刻度,它的位置设置为端口0004.Hub#0003,似乎工作正常 我不确定磅秤的端口号,所以我确定了 var t

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

private void port_DataReceived(object sender, SerialDataReceivedEventArgs e) 
{ 
this.Invoke(new EventHandler(DoUpdate)); 
} 
我已经在设备管理器中检查了刻度,它的位置设置为
端口0004.Hub#0003
,似乎工作正常 我不确定磅秤的端口号,所以我确定了

var test = SerialPort.GetPortNames();
并且只返回
COM1


edit1:
当我执行
inta=port.ReadByte()时我的应用程序挂起,执行从此语句开始不会向前移动。

是否可以尝试轮询而不是使用DataReceived事件?另外,我相信DataReceived事件在触发之前有一个阈值,您可能也希望了解它。

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

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

请看帖子,我用Mike library连接

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.");
        }
    }
}

我遇到了这样一个问题,我解决了它,将设备中的
COM
配置(
configuration>communication>conconnections
)更改为
SICS
。我不知道你的比例模型,但也许我的代码能帮上忙。[]

也许电子秤没有返回任何数据?使用portmon查看计算机是否正在接收任何数据。如果您还没有数据,则可能需要驱动程序将USB连接转换为虚拟通信端口,否则打开串行端口将无法连接到USB设备。编辑SamFisher83的点很好,您可能需要以某种方式对其进行初始化以使其发送信息。@SamFisher83我在win 7(x64)portmon上工作,有其他选择吗?如果天平收到命令,它将始终返回响应。响应可能是命令未被理解,或者用户传递了错误的参数,但只要接收到某些内容,就会返回某些内容。如果这是USB连接而不是真正的串行端口连接(使用d-sub连接器直接连接到计算机上的物理端口),则COM1可能是错误的。检查Windows控制面板上的设备管理器,查看Windows是否看到虚拟com端口。如果您不确定,请拔下插头并重新插入,然后查看哪个端口消失,然后重新出现。如果没有看到任何内容,则可能缺少驱动程序。我应该轮询端口的哪个属性?设置计时器以定期检查串行端口上的BytesToRead。然后使用Read读取数据。查看MSDN页面了解更多详细信息:谢谢回答1)是的,我已经阅读了pdf,它说要验证USB连接是否建立的步骤很好2)超级终端在win 7中不可用3)当你说我可以从balance获得序列号时,它是否类似于我可以通过硬件设置访问的天平属性?序列号是当您特别要求它或发出重新启动命令时天平返回的响应(两个响应看起来应该相同)。这是测试的第一件事。从…里面