很简单,是我自己摸出来的,不要用c#自带的serialPort控件,自己定义一个静态实例即可。
public static SerialPort serialPort1 = new SerialPort();
然后连接虚拟串口COM3:
private void bt_connectPlc_Click(object sender, EventArgs e)
{
try
{
if (serialPort1.IsOpen)
{ serialPort1.Close(); }
else
{
serialPort1.PortName = "COM3";
//serialPort1.PortName = ReadTenCom();//设置串口号,ReadTenCom()是读取串口号的方法,返回的是string类型
serialPort1.ReceivedBytesThreshold = 1;//设置能引发serialport的DataReceived事件所需要的字节个数
serialPort1.BaudRate = 19200;//设置波特率
serialPort1.DataBits = 8;
serialPort1.Parity = System.IO.Ports.Parity.None;//设置串口的奇偶校验为无奇偶校验
serialPort1.StopBits = System.IO.Ports.StopBits.One;//设置停止位为1
serialPort1.Open();//打开端口
}
}
catch (Exception er)
{
MessageBox.Show("串口打开失败!" + er.Message, "YC1");
}
}
byte[] output = new byte[1];
private void button1_Click(object sender, EventArgs e)
{
output[0] = 0x55;
serialPort1.Write(output, 0, 1);//Form1的button1发送0x55字节指令
}
然后是Form2的按钮button20发送0x44指令:
byte[] output2 = new byte[1];
private void button20_Click(object sender, EventArgs e)
{
output2[0]=0x44;
Form1.serialPort1.Write(output2, 0, 1);
}
两个指令接收端都接受到了,如下图: