Считайте вес из серийной цифровой шкалы Меттлера Толедо - PullRequest
0 голосов
/ 12 марта 2012

Я пытаюсь прочитать вес из цифровой шкалы в приложении c #, нашел этот вопрос, это именно то, что я пытаюсь сделать, но для меня ниже функция никогда не запускается.

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

Я проверил масштаб в диспетчере устройств, его расположение установлено на Port_#0004.Hub_#0003 и, кажется, работает нормально. Я не был уверен в номере порта шкалы, поэтому я сделал

var test = SerialPort.GetPortNames();

и только COM1 возвращается

Edit 1: Когда я выполняю int a = port.ReadByte();, мое приложение зависает, и выполнение никогда не продвигается вперед от этого оператора.

Ответы [ 4 ]

1 голос
/ 19 февраля 2016

Я столкнулся с такой проблемой, и решил ее, изменив конфигурацию COM (Configuration > Comunication > Conections) на SICS в устройстве.Я не знаю вашу масштабную модель, но, возможно, мой код может помочь.[ Считывание данных с устройства масштаба Mettler Toledo (IND560) с использованием C # ]

0 голосов
/ 12 марта 2012

Вы можете получить серийный номер с баланса?Это должно быть первым, что вы делаете при подключении.Это позволит вам убедиться, что соединение установлено.Если у вас возникли проблемы с подключением через интерфейс C #, попробуйте сначала использовать HyperTerminal.Вы можете очень быстро менять настройки и набирать нужные.Хотя баланс должен быть в состоянии использовать широкий спектр скоростей передачи и стоп-битов и тому подобное.Они обычно довольно легко приспосабливаемы.Но попробуйте HyperTerminal.

Я ищу pdf, но есть очень длинный список доступных команд (в зависимости от вашей модели).PDF как 130 страниц.Вы читали это?

0 голосов
/ 24 февраля 2013

Пожалуйста, смотрите этот пост, я использовал библиотеку Майка для подключения.

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.");
        }
    }
}
0 голосов
/ 12 марта 2012

Не могли бы вы попробовать опрос вместо использования события DataReceived? Кроме того, я полагаю, что событие DataReceived имеет пороговое значение до того, как оно сработает, возможно, вы захотите рассмотреть это тоже.

...