Страницы

Ярлыки

ДШИ-200 (1) КСВУ-6 (1) ЛЧМ (1) МДР-23 (1) микроконтроллер (1) перенаправление (1) С (1) структуры (1) учебный курс (1) AC/DC (1) ADC (1) ADS1248 (1) Altium (1) Altuim (1) Amolifer (1) ARM (1) assembler (2) Asynchronous (1) at command (3) at#eaddr (1) at#epassw (1) at#esmtp (1) at#euser (1) at#gprs (1) at#selint=2 (1) at#sgact (1) at#tcpatcmdseq (1) ATX (1) AVR (2) bit (1) boost (1) boot (2) bootlloader (1) C (6) C# (7) C++ (1) CMSIS (1) command (1) CP2101 (1) CSD (1) Danfoss (6) DBGMCU (1) debug (1) debug.ini (1) delegate (1) Discovery (1) DMA (1) DRV8805 (1) DWT (1) e-mail (1) email (1) Exel (1) exFAT (1) FC-051 (1) gl868-dual (2) gl868-dual cmux (1) GPIO (2) GSM (1) I2C (1) IAR (1) ID (1) Invoke (1) Keil (3) LabVIEW (1) Linux (1) LMP7721 (1) LoRa (3) mdmread (1) memory (1) MODBUS (1) Operation Amplifer (1) pack (1) printf (2) printf() (1) RCC (1) retargetting (1) RFM95/96/87/98(W) (1) RS232 (4) RS485 (1) RSAPI.DLL (1) RSS (1) RTC (2) send (2) SerialPort (1) Silabs (1) spl (1) standard peripherals library (1) startup (1) stepper (2) STlink (1) STlink/V2 (2) STM32 (10) stm32 stm32f10x (1) STM32DBG.IN (1) STM32F (19) STM32F103 (4) struct (1) Structure (1) system (1) SystemInit (1) Task (1) telit (5) thread (4) TIM (1) Type Cast (1) UART (1) uni-trend (1) USART (6) USB (1) UT61B (1) viewer (1)

четверг, 19 февраля 2015 г.

C# Serial Port Write/Read text/byte

Classic from MSDN
https://msdn.microsoft.com/ru-ru/library/system.io.ports.serialport.datareceived(v=vs.110).aspx
SerialPort.DataReceived - событие
public event SerialDataReceivedEventHandler DataReceived
Данные события может быть вызвано элементов в SerialData перечисления. Поскольку необходимость генерации такого события определяется операционной системой, могут выводиться не все ошибки четности.
Событие DataReceived также возникает, если получен символ конца файла , независимо от того, числа байтов во внутреннего входном буфере и значения свойства  P:System.IO.Ports.SerialPort. ReceivedBytesThreshold.
PinChangedDataReceived, и ErrorReceived события могут вызываться по порядку и может присутствовать небольшая задержка между ними в основном потоке при сообщении об ошибке и при выполнении обработчика событий. Только один обработчик событий может выполняться одновременно.
Возникновение DataReceived  для каждого байта полученных событий не гарантируется. Необходимо спользовать BytesToRead свойство,  чтобы определить, сколько данных оставить для чтения в буфере.
Событие DataReceived возникает  во вторичном потоке при получении данных от SerialPort объекта .Поскольку это событие вызывается во вторичном потоке, а не главного потока, попытка изменить некоторые элементы в основном потоке, таких как элементы пользовательского интерфейса может вызвать исключение потоковой обработки. При необходимости изменить элементы в главном Form или Control, запросы на изменение post должны вызываться с помощью Invoke, который будет работать в соответствующем потоке.
using System; using System.IO.Ports; using System.Threading; namespace comportMSDN { class Program { public static SerialPort mySerialPort; public static void Main(string[] args) { mySerialPort.PortName = "COM11"; mySerialPort.DataReceived += new SerialDataReceivedEventHandler(DataReceivedHandler); mySerialPort.Open(); var dataArray = new byte[] { 0xFF }; while (true) { Thread.Sleep(100); mySerialPort.Write(dataArray, 0, 1); } Console.ReadKey(); mySerialPort.Close(); } private static void DataReceivedHandler( object sender, SerialDataReceivedEventArgs e) { int inp = mySerialPort.BytesToRead; string indata =""; //SerialPort sp = (SerialPort)sender; if (mySerialPort.BytesToRead > 0) { indata = mySerialPort.ReadExisting(); } //Console.WriteLine("Data Received:"); Console.Write(indata); } } }


// Determine which mode (string or binary) the user is in
       if (CurrentDataMode == DataMode.Text)
        {
            // Read all the data waiting in the buffer
            var data = _comport.ReadExisting();

            // Check all the data 
            CheckDeviceSingal(data);

            // Write all data in text file
            WriteDeviceDataInTextFile(data);

            // Display the text to the user in the terminal
            Log(LogMsgType.Incoming, data);
        }
        else
        {
            // Obtain the number of bytes waiting in the port's buffer
            var bytes = _comport.BytesToRead;

            // Create a byte array buffer to hold the incoming data
            var buffer = new byte[bytes];

            // Read the data from the port and store it in our buffer
            _comport.Read(buffer, 0, bytes);

            // Show the user the incoming data in hex format
            Log(LogMsgType.Incoming, ByteArrayToHexString(buffer));
        }

private string stroka="";
private void serialPort1_DataReceived(object sender, System.IO.Ports.SerialDataReceivedEventArgs e)
        {
            this.Invoke(new EventHandler(DoUpdate));
        }
private void DoUpdate(object s,EventArgs e)
        {
            stroka = stroka + serialPort1.ReadExisting();
        }



Комментариев нет:

Отправить комментарий

ваше мнение...