【发布时间】:2017-01-31 10:35:05
【问题描述】:
我正在尝试以 ASCII 值发送1,我的 mk 正在等待那个字符。
但是当我按下一个按钮时,什么也没有发生。但是当我发送一个字节来切换端口时,一切正常。所以我想知道如何发送 ASCII,1 值。
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e) // Here i send a byte to MK
{
// serialPort1.RtsEnable = true; serialPort1.DtrEnable = true;
// var content = new List<byte>();
// content.AddRange(Encoding.ASCII.GetBytes("1"));
// content.Add(3); // ASCII ETX
//byte[] buffer = content.ToArray();
// serialPort1.Write(buffer, 0, buffer.Length);
serialPort1.Write("1");
}
private void textBox1_TextChanged(object sender, EventArgs e)
{
}
private void button2_Click(object sender, EventArgs e) // choosing a right com port
{
serialPort1.PortName = textBox1.Text;
serialPort1.BaudRate = Convert.ToInt32(textBox2.Text);
}
string rs;
byte re;
private void serialPort1_DataReceived(object sender, SerialDataReceivedEventArgs e) // Da
{
try
{
//rs = serialPort1.ReadByte();
//re = Convert.ToByte(serialPort1.ReadByte());
rs = serialPort1.ReadExisting();
// System.Text.Encoding.ASCII.GetString(new[] { re });
this.Invoke(new EventHandler(type));
}
catch (System.TimeoutException) { }
}
void type(object s,EventArgs e) // receive data
{
textBox4.Text += rs;
}
private void button3_Click(object sender, EventArgs e) // OPen port
{
serialPort1.Open();
}
private void button4_Click(object sender, EventArgs e) // Close port
{
serialPort1.Close();
}
}
【问题讨论】:
-
如果注释代码是正确的,那么您必须以 ETX 字符结束传输。
-
ASCII
1是0x31所以你可以做serialPort1.Write(0x31);并且正如@Gusman所说,这可能需要你发送一些“”类型的命令,在你的情况下是@ 987654327@ 默认windows字符串编码是 CP1252,所以我认为发送"1"作为字符串输入会发送0x0031而不是0x31。 -
@m.rogalski - SerialPort 的默认编码是 ASCII。 ASCII 和 CP1252 都将“1”编码为 0x31。他的问题可能是他没有发送 ETX 字符。
-
@Joe 如果他的
serialPort流具有ASCII或CP1252编码,那么它应该。但如果它有unicode,那么我认为可能是这样。 -
@m.rogalski - 是的,你是对的,万一他明确将 SerialPort.Encoding 配置为 UTF16。
标签: c# serial-port ascii