Я хочу читать данные моих датчиков с последовательных портов, и я могу прочитать имя портов, но я не могу получить данные от них ... Я новичок в #c и последовательного кодирования порта, благодаря, прежде чем ~не может считывать данные из последовательного порта (в C#)
и вот моя попытка:
using System;
using System.ComponentModel;
using System.Collections;
using System.Diagnostics;
using System.IO;
using System.IO.Ports;
using System.Text;
using System.Security;
using System.Security.Permissions;
using Microsoft.Win32;
using System.Runtime.InteropServices;
using System.Runtime.Versioning;
using System.Collections.Generic;
namespace ConsoleApplication1
{
class Program
{
//----------------------------------------------------- GLOBAL PARAMETER ------------------------------------------------------
//---serial port objects
static private List <SerialPort> _serialPort = new List<SerialPort>();
//---serial port read buffer
static private List <byte[]> _buffer = new List<byte[]>();
//---length of the port list
static private int _length;
//--------------------------------------------------- INIT FUNCTIONS ----------------------------------------------------------
//---init main function
static private void initFunction(){
//create the serial port objs
createPortObj();
//create the buffers
createBuffer();
//init a clock
//init the ports' name
return;
}
//---Set the port objs
static private void setPortOption(int i) {
SerialPort tPort = _serialPort[i];
//set options
tPort.BaudRate = 9600;
tPort.Parity = Parity.None;
tPort.StopBits = StopBits.One;
tPort.DataBits = 8;
tPort.Handshake = Handshake.None;
//set the datareceived function
//tPort.DataReceived += new SerialDataReceivedEventHandler(DataReceivedHandler);
tPort.DataReceived += DataReceivedHandler;
tPort.Open();
return;
}
//---Create the port objs
static private void createPortObj(){
// Get a list of serial port names.
string[] _names = SerialPort.GetPortNames();
_length = _names.Length;
//create the objs
for(int i=0; i < _length; i++)
{
Console.WriteLine(_names[i]);
//create the port objects
_serialPort.Add(new SerialPort(_names[i]));
//init the port object
setPortOption(i);
}
return;
}
//---Create the buffer
static private void createBuffer() {
//create buffer for each port obj
for (int i = 0; i < _length; i++){
byte[] bufferOne = new Byte[_serialPort[i].BytesToRead];
_buffer.Add(bufferOne);
}
return;
}
//-------------------------------------------------- FEATURED FUNCTION ----------------------------------------------------
//---Transmit the code
//---Data received handler
static public void DataReceivedHandler(Object sender, SerialDataReceivedEventArgs e){
SerialPort sp = (SerialPort)sender;
string indata = sp.ReadExisting();
Console.WriteLine("Data Received:");
Console.Write(indata);
//Receive the data from serial ports
for (int i=0; i<_length; i++){
int temp;
temp = _serialPort[i].Read(_buffer[i], 100, _buffer[i].Length);
Console.WriteLine(temp);
}
return;
}
//-------------------------------------------------- RETRIVE FUNCTION ----------------------------------------------------
//---Retrive the source
static private void retriveFunction(){
//close the serial ports
foreach (SerialPort port in _serialPort){
port.Close();
}
return;
}
//-------------------------------------------------- MAIN -----------------------------------------------------------------
//---main function
static void Main(string[] args){
//init function, and open the
initFunction();
int[] num = new int[_length];
for (int i = 0; i < _length; i++){
num[i] = _serialPort[i].Read(_buffer[i], 0, _buffer[i].Length);
}
//check the result of the read function
Console.Write(num[0]);
//on serial port receiving
//retrive the source
retriveFunction();
Console.ReadLine();
}
}
}
еще раз спасибо ~
отладка. отлаживать. отлаживать. –
Вы могли получать данные из последовательного порта не через приложение C#? Начните с одного последовательного порта, убедитесь, что вы можете получать данные с одного, результат чтения равен 0, и вы не поместили i var. – ilansch
@ilansch я уверен, что данные могут быть получены другими приложениями, такими как arduino клиент. кроме того, я не думаю, что это проблема с массивом, вызывающая проблему – tristan