Чтение с порта Com1 с использованием C # - PullRequest
0 голосов
/ 25 сентября 2018

Я пытаюсь написать программу, которая может читать входные данные из текущего масштаба (Mettler Toldeo pg802-S), который я подключил через COM1.В текущем коде я могу перечислить все предлагаемые COM, но у меня возникают проблемы с отображением их в списке, когда их толкает шкала.

Шкала находится на COM1, поэтому Я пытаюсь получить данные, которые нажимает шкала.Используя WinWedge , я могу получить результаты для отправки, используя Com1, скорость 2400 бод, четность, семь битов данных, 1 стоповый бит, отсутствие управления потоком, размер входного буфера 1024 и размер выходного буфера 512.Как я могу получить данные таким образом?

using System;
using System.Collections.Generic;
using System.Text;
using System.IO.Ports;


namespace SerialPortWrite{
    class GetSerialData{
        static void Main(string[] args){

            Form1 form1 = new Form1();
            form1.ShowDialog();

             Console.WriteLine("Program Started For COM1...");
            // List all COMS
             ListComPorts();

            // Read this COM.
            var reader = new ArduinoSerialReader("COM1");

            // Read COM input.
               Console.ReadLine();
        }

        static void ListComPorts(){
            // Get a list of port names. 
            string[] ports = SerialPort.GetPortNames();

            Console.WriteLine("The following serial ports were found:");

            // Get all COM ports to list out. 
            foreach (string port in ports){
                Console.WriteLine(port);
            }
        }
    }

    // Get input.
    public class ArduinoSerialReader : IDisposable{
        private SerialPort _serialPort;

        public ArduinoSerialReader(string portName){
            _serialPort = new SerialPort(portName);
            _serialPort.Open();
            _serialPort.DataReceived += serialPort_DataReceived;
        }

        void serialPort_DataReceived(object s, SerialDataReceivedEventArgs e){
            Console.WriteLine(_serialPort.ReadLine());
        }

        public void Dispose(){
            if (_serialPort != null){
                _serialPort.Dispose();
            }
        }
    }
}

Ответы [ 2 ]

0 голосов
/ 25 сентября 2018

Я разработал библиотеку для подключения шкалы к c #, в библиотеке есть компонент, и его можно настраивать для всех шкал с непрерывной связью, с необходимой командой или без команды для отправки на шкалу, на самом деле попробуйте это с эмулятором масштабирования arduino ииндикатор JUSTA LS7510A, код библиотеки его на GITHUB .

enter image description here

0 голосов
/ 25 сентября 2018

Чтобы получить данные от последовательного порта в c #, вы можете использовать класс SerialPort.Вы можете использовать отдельный поток для постоянного чтения данных из порта и их обработки.См. Пример кода ниже:

void readFromSerial()
{
    SerialPort sp;
    try
    {
        string[] ports = SerialPort.GetPortNames();    // get all the available port names in string array
        if (ports.Length > 0)
        {
            // create SerialPort object 
            sp = new SerialPort(ports[0], 2400, Parity.Even, 7, StopBits.One);
            sp.Open();

            string str = "";
            // infinite loop to read data byte by byte. you can also use for loop to read constant amount of bytes
            while (true)
            {
                // sp.ReadByte is blocking read, it will wait until a byte is available for reading
                byte data = (byte)sp.ReadByte();
                Console.Write(" "+data);
                str += data + " ";
            }
        }
    }
    catch(Exception ex)
    {}
    finally
    {
        if (sp != null && sp.IsOpen())
            sp.Close();
    }
}

Затем создайте отдельный поток, подобный этому

Thread t = new Thread(new ThreadStart(readFromSerial));
t.Start();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...