[英]How to get the value and listen to the COM2 port using C#?
我正在使用连接在COM2端口上的Dallas Key。 达拉斯密钥打开时有一个值(例如00 AA BB),而删除它时有一个值(例如00 00 00)。 我如何连续准备COM2端口的值,以便检测到它的变化并基于它进行操作(winforms应用程序)。
我试图通过端口名称获取值并读取它,但是它表示在某些情况下访问被拒绝。
private SerialPort port = new SerialPort("COM2",9600, Parity.None, 8, StopBits.One);
static void Main(string[] args)
{
SerialPortProgram();
}
private static void SerialPortProgram()
{
port.DataReceived += new SerialDataReceivedEventHandler(port_DataReceived);
port.Open();
Console.ReadLine();
}
private void port_DataReceived(object sender, SerialDataReceivedEventArgs e)
{
Console.WriteLine(port.ReadExisting());
}
我想一直监听COM2端口的值,而又不影响应用程序速度,打开时获取COM2端口的值(我的达拉斯密钥),并检测它何时关闭并采取特定措施。
即使您没有描述实际抛出的行,但通过阅读文档我发现了这个细节
异常
UnauthorizedAccessException
拒绝对端口的访问。-要么-
当前进程或系统上的另一个进程已经通过SerialPort实例或非托管代码打开了指定的COM端口。
您或者没有打开端口的权限,或者您已经打开了端口,您需要确定端口是哪一个并进行适当处理
注意 :如果您使用USB来进行com通讯,端口可能会有些变
下面的代码在我用控制台(项目是控制台应用程序)编写时起作用,但是当我改回到Windows应用程序并尝试写标签或更改变量值时,此代码不起作用:
public Form1()
{
InitializeComponent();
SerialPortProgram();
}
private void SerialPortProgram()
{
SerialPort mySerialPort = new SerialPort("COM2");
mySerialPort.BaudRate = 9600;
mySerialPort.Parity = Parity.None;
mySerialPort.StopBits = StopBits.One;
mySerialPort.DataBits = 8;
mySerialPort.Handshake = Handshake.None;
mySerialPort.DataReceived += new SerialDataReceivedEventHandler(DataReceivedHandler);
mySerialPort.Open();
mySerialPort.Close();
}
private void DataReceivedHandler(object sender, SerialDataReceivedEventArgs e)
{
SerialPort sp = (SerialPort)sender;
string indata = sp.ReadExisting();
switch (ASCIItoHex(indata))
{
case "00000113":
LB_Display.Text = "User 1";
break;
case "0000017a":
LB_Display.Text = "User 2";
break;
default:
LB_Display.Text = "Disconnect";
break;
}
}
public static string ASCIItoHex(string Value)
{
StringBuilder sb = new StringBuilder();
foreach (byte b in Value)
sb.Append(string.Format("{0:x2}", b));
return sb.ToString();
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.