我正在编写一个通过RS232与设备通信的程序。 我的程序将是一个GUI,以帮助用户编程/配置设备。
它将有多种形式。 为了使事物可读,我为串行通信创建了一个单独的类。 我可以打开,关闭并连接到表单1上的选定串行端口。但是,如果我进入表单2并尝试向端口发送串行命令,程序将抛出一个异常,说“端口已关闭”。
你能否让我知道我可能做错了什么。
Serial Class:
year
表格2:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.IO.Ports;
namespace DM_Config_Tool
{
class Program
{
/// <summary>
/// The main entry point for the application.
/// </summary>
SerialPort serialPort = new SerialPort();
[STAThread]
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new Form_Connect());
}
public string[] Serial_ListPorts()
{
string[] portList = { null };
try
{
portList = SerialPort.GetPortNames();
}catch (Exception)
{
return null;
}
return portList;
}
public bool Serial_Connect(string _serialPortName)
{
serialPort.PortName = _serialPortName;
serialPort.BaudRate = 9600;
serialPort.Parity = Parity.None;
serialPort.DataBits = 8;
serialPort.StopBits = StopBits.One;
serialPort.ReadTimeout = 500;
serialPort.Handshake = Handshake.None;
return Serial_Open();
}
public void Serial_Close()
{
serialPort.Close();
}
public bool Serial_Open()
{
try
{
serialPort.Open();
return true;
}catch(Exception)
{
return false;
}
}
public bool Serial_Send_Cmd(string _serial_TXData, bool _serialData_AddNewLine)
{
bool TXStatus = false;
if(_serialData_AddNewLine == true)
{
try
{
serialPort.WriteLine(_serial_TXData);
TXStatus = true;
}
catch(Exception)
{
TXStatus = false;
}
}
else
{
try
{
serialPort.Write(_serial_TXData);
TXStatus = true;
serialPort.DiscardOutBuffer();
}
catch (Exception msg)
{
TXStatus = false;
//serialPort.DiscardOutBuffer();
}
}
return TXStatus;
}
public string Serial_Receive_Data()
{
string _serial_RXDATA = null;
try
{
_serial_RXDATA = serialPort.ReadExisting();
}catch (Exception)
{
return null;
}
serialPort.DiscardInBuffer();
return _serial_RXDATA;
}
public bool Serial_GetStatus()
{
return serialPort.IsOpen;
}
}
}