namespace read_display_data
{ 公共部分Form1类:表格 {
SerialPort port = new SerialPort("COM2", 19200, Parity.None, 8, StopBits.One);
public Form1()
{
InitializeComponent();
port.Open();
}
private void Form1_Load(object sender, EventArgs e)
{
port.DataReceived += new SerialDataReceivedEventHandler(port_DataReceivedBIT);
// port.ReadTimeout = 500;
}
private void BITbutton_Click(object sender, EventArgs e)
{
port.Write(new byte[] { 0x10 0x04, 0x06 }, 0, 3);
byte[] buffer1 = new byte[] { 0x10 0x04, 0x06 };
LogSent(LogMsgType.Outgoing, DateTime.Now + " -- " + ByteArrayToHexString(buffer1) + "\n");
//port.Close();
}
私人无效Databutton_Click(对象发件人,EventArgs的) {
port.Write(new byte[] { 0x11, 0x43, 0x0D}, 0, 3);
byte[] buffer1 = new byte[] {0x11, 0x43, 0x0D };
LogSent(LogMsgType.Outgoing, DateTime.Now + " -- " + ByteArrayToHexString(buffer1) + "\n");
}
private Color[] LogMsgTypeColor = { Color.Blue, Color.Green, Color.Black, Color.Orange, Color.Red };
public enum LogMsgType { Incoming, Outgoing, Normal, Warning, Error };
void port_DataReceivedBIT(object sender, SerialDataReceivedEventArgs e)
{
//port.Open();
this.Invoke(new EventHandler(AddReceiveBIT));
}
private void AddReceiveBIT (object s, EventArgs e)
{
Thread.Sleep(100);
byte[] buffer = new byte[port.BytesToRead];
port.Read(buffer, 0, buffer.Length);
LogReceive(LogMsgType.Incoming, DateTime.Now + " -- " + ByteArrayToHexString(buffer) + "\n");
Log(LogMsgType.Incoming, checkBit(buffer) + "\n");
}
private string checkBit(byte[] buffer)
{
StringBuilder message = new StringBuilder();
var responseByte = buffer[7];
if ((responseByte & (1 << 0)) == 0)
{
message.AppendFormat("rezerved ok ");
}
else
{
message.AppendFormat("rezerved error ");
}
if ((responseByte & (1 << 1)) == 0)
{
message.AppendFormat("rezerved ok ");
}
else
{
message.AppendFormat("rezerved error ");
}
if ((responseByte & (1 << 2)) == 0)
{
message.AppendFormat("rezerved ok ");
}
else
{
message.AppendFormat("rezerved error ");
}
if ((responseByte & (1 << 3)) == 0)
{
message.AppendFormat("rezerved ok ");
}
else
{
message.AppendFormat("rezerved error ");
}
if ((responseByte & (1 << 4)) == 0)
{
message.AppendFormat("rezerved ok ");
}
else
{
message.AppendFormat("rezerved error ");
}
if ((responseByte & (1 << 5)) == 0)
{
message.AppendFormat("rezerved ok ");
}
else
{
message.AppendFormat("rezerved error ");
}
if ((responseByte & (1 << 6)) == 0)
{
message.AppendFormat("Serial Communication ok ");
}
else
{
message.AppendFormat("Serial Communication error ");
}
if ((responseByte & (1 << 7)) == 0)
{
message.AppendFormat("Optical Zoom ok ");
}
else
{
message.AppendFormat("Optical Zoom error ");
}
return message.ToString();
}
private string ByteArrayToHexString(byte[] PortBuffer)
{
StringBuilder sb = new StringBuilder(PortBuffer.Length * 3);
foreach (byte b in PortBuffer)
sb.Append(Convert.ToString(b, 16).PadLeft(2, '0').PadRight(3, ' '));
return sb.ToString().ToUpper();
}
private void LogReceive(LogMsgType msgtype, string msg)
{
richTextBox1.Invoke(new EventHandler(delegate
{
richTextBox1.SelectedText = string.Empty;
richTextBox1.SelectionFont = new Font(richTextBox1.SelectionFont, FontStyle.Bold);
richTextBox1.SelectionColor = LogMsgTypeColor[(int)msgtype];
richTextBox1.AppendText(msg);
richTextBox1.ScrollToCaret();
}
));
}
private void LogSent(LogMsgType msgtype, string msg)
{
textBox2.Invoke(new EventHandler(delegate
{
textBox2.SelectedText = string.Empty;
textBox2.AppendText(msg);
textBox2.ScrollToCaret();
}
));
}
private void Log(LogMsgType msgtype, string msg)
{
textBox3.Invoke(new EventHandler(delegate
{
textBox3.Clear();
textBox3.SelectedText = string.Empty;
textBox3.AppendText(msg);
textBox3.ScrollToCaret();
}
));
}
private void textBox2_TextChanged(object sender, EventArgs e)
{
}
private void label2_Click(object sender, EventArgs e)
{
}
private void label1_Click(object sender, EventArgs e)
{
}
private void textBox3_TextChanged(object sender, EventArgs e)
{
}
private void textBox4_TextChanged(object sender, EventArgs e)
{
}
private void richTextBox1_TextChanged(object sender, EventArgs e)
{
}
题外话:你可能想想想你对“[hex](http://en.wikipedia.org/wiki/Hex)”[adecimal]这个词的用法。请记住,您将*位*发送给您的设备,而不是十六进制数字。十六进制只是表示这些位是如何表示给你的。同样,设备不会用“十六进制”[adecimal number]回答,但会收集一些位(分组为一个字节,一个字或一系列这些字),然后您可以将其转换为十进制数,或者十六进制或任何其他格式。 – stakx
我完全同意你的stakx。我使用了非学院形式,谢谢。 – gheo
如果可以的话,它总是很好的发布你的代码。这两个函数如何工作(就接收和处理数据而言)的一个例子可能会使建议行动方案变得更容易。 – Chris