Я пытаюсь создать приложение, которое может связываться с сервером, используя связь по последовательному порту.Связь последовательного порта с использованием конвертера RS-485 и сервера в C#
Сценарий:
Я есть мой ноутбук, который крепится с электрическим счетчиком (выступать в качестве сервера) через интерфейс RS-485 и USB. Теперь я хочу открыть порт и отправить исходную команду для связи с сервером и ожидать, что сервер отправит некоторый ответ.
Вот мой код
void main(string args[])
{
SerialPort sp = new SerialPort();
sp.PortName = "COM5";
sp.BaudRate = 9600;
... // other parameters i.e. Parity, StopBits
// Databits etc
sp.Open();
sp.DataReceived = myPortDataReceived();
sp.WriteLine("/?!\r\n");
}
public static void myPortDataReceived(object sender, SerialPortDataReceivedEventArgs e)
{
SerialPort myPort = (SerialPort)sender;
String data = myPort.ReadExisting();
Console.WriteLine("Data Received");
Console.WriteLine(data);
}
При запуске программы нет никакого вывода. Это означает, что объект myPort
ничего не читает.
Я новичок в программировании и понятия не имею, почему это произошло.
Любая идея действительно очень присваивается.
Благодаря
Update 1
я изменить свой код и запустить его, но он не может перейти к методу обработчика событий.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO.Ports;
using System.Threading;
namespace Communication
{
class Program
{
static void Main(string[] args)
{
SerialPort sp = new SerialPort();
sp.PortName = "COM5";
sp.Open();
// check port is open or not
if (sp.IsOpen==true)
Console.WriteLine("Port is open");
// set the port parameters
sp.BaudRate = 9600;
sp.DtrEnable = true;
sp.Handshake = Handshake.None;
sp.Parity = Parity.None;
sp.StopBits = StopBits.One;
sp.DataBits = 8;
// write some command on port
sp.WriteLine("?/!\r\n");
// make DataReceived event handler
sp.DataReceived += sp_DataReceived;
//Console.WriteLine("Press any key to exit");
//Console.ReadLine();
Console.ReadKey();
}
public static void sp_DataReceived(object sender, SerialDataReceivedEventArgs e)
{
Console.WriteLine("I am in event handler");
SerialPort sPort = (SerialPort)sender;
String data = sPort.ReadExisting();
foreach (char ch in data)
{
Console.WriteLine(ch);
}
}
}
}
И я могу поместить sPort
в while(true) {String data = sPort.ReadExisting(); Console.WriteLine(data); }
ответьте ,,,, – selflearner2014