Как использовать событие dataReceived объекта порта SerialPort в C#?
Прежде всего, я рекомендую .cs-file вам использовать следующий c-sharp конструктор вместо того, который rs232 вы сейчас используете:
new SerialPort("COM10", 115200, Parity.None, 8, StopBits.One);
Затем visual-c# вам действительно следует visual-c# удалить этот код:
// Wait 10 Seconds for data...
for (int i = 0; i < 1000; i++)
{
Thread.Sleep(10);
Console.WriteLine(sp.Read(buf,0,bufSize)); //prints data directly to the Console
}
А вместо visual-c# этого просто зацикливайтесь, пока c# пользователь не нажмет клавишу visual-c# или что-то в этом роде, например:
namespace serialPortCollection
{ class Program
{
static void Main(string[] args)
{
SerialPort sp = new SerialPort("COM10", 115200);
sp.DataReceived += port_OnReceiveDatazz; // Add DataReceived Event Handler
sp.Open();
sp.WriteLine("$"); //Command to start Data Stream
Console.ReadLine();
sp.WriteLine("!"); //Stop Data Stream Command
sp.Close();
}
// My Event Handler Method
private static void port_OnReceiveDatazz(object sender,
SerialDataReceivedEventArgs e)
{
SerialPort spL = (SerialPort) sender;
byte[] buf = new byte[spL.BytesToRead];
Console.WriteLine("DATA RECEIVED!");
spL.Read(buf, 0, buf.Length);
foreach (Byte b in buf)
{
Console.Write(b.ToString());
}
Console.WriteLine();
}
}
}
Также c-sharp обратите внимание на изменения serial-port в обработчике событий получения c# данных, он должен фактически csharp распечатать буфер.
ОБНОВЛЕНИЕ 1
Я только .cs-file что успешно выполнил следующий c#.net код на своем компьютере (используя c# нуль-модемный кабель между c#-language COM33 и COM34)
namespace TestApp
{
class Program
{
static void Main(string[] args)
{
Thread writeThread = new Thread(new ThreadStart(WriteThread));
SerialPort sp = new SerialPort("COM33", 115200, Parity.None, 8, StopBits.One);
sp.DataReceived += port_OnReceiveDatazz; // Add DataReceived Event Handler
sp.Open();
sp.WriteLine("$"); //Command to start Data Stream
writeThread.Start();
Console.ReadLine();
sp.WriteLine("!"); //Stop Data Stream Command
sp.Close();
}
private static void port_OnReceiveDatazz(object sender,
SerialDataReceivedEventArgs e)
{
SerialPort spL = (SerialPort) sender;
byte[] buf = new byte[spL.BytesToRead];
Console.WriteLine("DATA RECEIVED!");
spL.Read(buf, 0, buf.Length);
foreach (Byte b in buf)
{
Console.Write(b.ToString() + " ");
}
Console.WriteLine();
}
private static void WriteThread()
{
SerialPort sp2 = new SerialPort("COM34", 115200, Parity.None, 8, StopBits.One);
sp2.Open();
byte[] buf = new byte[100];
for (byte i = 0; i < 100; i++)
{
buf[i] = i;
}
sp2.Write(buf, 0, buf.Length);
sp2.Close();
}
}
}
ОБНОВЛЕНИЕ 2
Учитывая всю serial-port посещаемость по этому вопросу c# за последнее время. Я начинаю c# подозревать, что либо ваш c# последовательный порт не rs232 настроен должным образом, либо rs232 устройство не отвечает.
Я rs232 настоятельно рекомендую вам csharp попытаться связаться с устройством c#-language с помощью других средств serial-port (я часто использую гипертерминал). Затем visual-c# вы можете поиграть со всеми c# этими настройками (битрейт, четность, биты serial-port данных, стоповые биты, управление csharp потоком), пока не найдете rs232 подходящий набор. В документации visual-c# к устройству также должны visual-c# быть указаны эти настройки. Как c# только я это выясню, я должен c# убедиться, что мой .NET SerialPort visual-c# правильно настроен для использования rs232 этих параметров.
Несколько serial-port советов по настройке последовательного csharp порта:
Обратите внимание: когда rs232 я сказал, что вам следует c#-language использовать следующий конструктор, я rs232 имел в виду, что используйте csharp эту функцию, а не обязательно rs232 эти параметры! Вы должны c# ввести параметры для своего c#-language устройства, настройки ниже c# являются общими, но могут c-sharp отличаться для вашего устройства.
new SerialPort("COM10", 115200, Parity.None, 8, StopBits.One);
Также c#.net важно настроить .NET SerialPort csharp на использование того же visual-c# управления потоком, что и c#-language на вашем устройстве (как c#-language говорили ранее). Вы можете visual-c# найти дополнительную информацию csharp здесь:
http://www.lammertbies.nl/comm/info/RS-232_flow_control.html
c#
serial-port
Как использовать событие dataReceived объекта порта SerialPort в C#?
Мы используем файлы cookies для улучшения работы сайта. Оставаясь на нашем сайте, вы соглашаетесь с условиями использования файлов cookies. Чтобы ознакомиться с нашими Положениями о конфиденциальности и об использовании файлов cookie, нажмите здесь.