当我启动方法" SendHex()"从我的第二堂课它给我一个错误(端口关闭)。虽然我可以从主类打开端口并成功发送任何数据,但我不能从第二类中做到这一点!
这是我的主要课程:(已编辑)
namespace SerialPort
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
foreach (String s in System.IO.Ports.SerialPort.GetPortNames())
{
txtPort.Items.Add(s);
}
}
public System.IO.Ports.SerialPort SP = new System.IO.Ports.SerialPort();
public void serialport_connect(String port, int baudrate, Parity parity, int databits, StopBits stopbits)
{
SP = new System.IO.Ports.SerialPort(port, baudrate, parity, databits, stopbits);
try{ SP.Open();}
catch (Exception ex) { MessageBox.Show(ex.ToString(), "Error"); }
}
private void cmdConnect_Click(object sender, EventArgs e)
{
String port = txtPort.Text;
int baudrate = Convert.ToInt32(cmbbaudrate.Text);
Parity parity = (Parity)Enum.Parse(typeof(Parity), cmbparity.Text);
int databits = Convert.ToInt32(cmbdatabits.Text);
StopBits stopbits = (StopBits)Enum.Parse(typeof(StopBits), cmbstopbits.Text);
serialport_connect(port, baudrate, parity, databits, stopbits);
}
static byte[] HexToBytes(string input)
{
byte[] result = new byte[input.Length / 2];
for (int i = 0; i < result.Length; i++)
{
result[i] = Convert.ToByte(input.Substring(2 * i, 2), 16);
}
return result;
}
public void SendHex(string hexData)
{
SP.Write(HexToBytes(hexData), 0, HexToBytes(hexData).Length);
}
private void button2_Click(object sender, EventArgs e)
{
SendCommand ss = new SendCommand();
ss.SC();
}
}
}
这是我的第二堂课: 编辑:
namespace SerialPort
{
class SendCommand
{
Form1 fm = new Form1();
public void SC ()
{
String port = "COM30";
int baudrate = Convert.ToInt32("115200");
Parity parity = (Parity)Enum.Parse(typeof(Parity), "None");
int databits = Convert.ToInt32("8");
StopBits stopbits = (StopBits)Enum.Parse(typeof(StopBits), "One");
if (fm.SP.IsOpen)
{
}else
{
fm.serialport_connect(port, baudrate, parity, databits, stopbits);
}
fm.SendHex("aabb");
}
}
}
答案 0 :(得分:0)
在Second Class中,您正在创建一个新的Form对象,因此您的SerialPort未打开。 您可能希望在调用SendHex方法之前调用SerialPort_Connect方法。
SideNote:如果您在单独的类中移动SerialPort相关代码并在表单和第二类中使用该类,那将会很不错。