Есть кусок кода, как его сделать рабочим ? - C#
Формулировка задачи:
Новичок в шарпе, да и вообще в программировании. Сижу туплю, есть пример куска кода из инструкции. Нужно его нормально дооформить до рабочего состояния. Указать переменные и т.п. Некое устройство которому нужно послать команды через компорт и получить ответ. С настройкой компорта разобрался, а вот с типизацией и оформлением этого блока тупняк. Уже бьюсь пару часов и не могу сообразить. Может подскажете ?
out_data[0] = 0x01; out_data[1] = 0x81; SerialPort.Write(out_data, 0, 2); Thread.Sleep(50); SerialPort.Read(in_data, 0, 16); SensorType = ((in_data[0] & 0x0F) + ((in_data[1] & 0x0F) << 4)); Release = ((in_data[2] & 0x0F) + ((in_data[3] & 0x0F) << 4)); Serial = ((in_data[4] & 0x0F) + ((in_data[5] & 0x0F) << 4) + ((in_data[6] & 0x0F) << 8) + ((in_data[7] & 0x0F) << 12)); Base_distance = ((in_data[8] & 0x0F) + ((in_data[9] & 0x0F) << 4) + ((in_data[10] & 0x0F) << 8) + ((in_data[11] & 0x0F) << 12)); Measure_Range = ((in_data[12] & 0x0F) + ((in_data[13] & 0x0F) << 4) + ((in_data[14] & 0x0F) << 8) + ((in_data[15] & 0x0F) << 2));
Или вот дополню. Есть программа, мне нужно команды вида 0x01(исходящий пример выше) отсылать с помощью первого окна и вторым получать пока хоть какой-то ответ от устройства. Пока тишина, я понимаю что неправильная типизация - но, не могу понять как это исправить.
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; using System.IO.Ports; namespace WindowsFormsApplication1 { public partial class Form1 : Form { public Form1() { InitializeComponent(); GetAvailablePorts(); } void GetAvailablePorts() { String[] ports = SerialPort.GetPortNames(); comboBox1.Items.AddRange(ports); } private void button3_Click(object sender, EventArgs e) { try { if (comboBox1.Text == "" || comboBox2.Text == "") { textBox1.Text = "Please select port seting"; } else { serialPort1.PortName=comboBox1.Text; serialPort1.BaudRate=Convert.ToInt32(comboBox2.Text); serialPort1.DataBits = 8; serialPort1.Parity = System.IO.Ports.Parity.None; serialPort1.StopBits = System.IO.Ports.StopBits.One; serialPort1.ReadTimeout = 1000; serialPort1.WriteTimeout = 1000; serialPort1.Open(); progressBar1.Value=100; button1.Enabled=true; button2.Enabled=true; textBox1.Enabled=true; button3.Enabled=false; button4.Enabled=true; textBox1.Text = ""; } } catch(UnauthorizedAccessException) { textBox2.Text="Unauthorised Acess"; } } private void button4_Click(object sender, EventArgs e) { serialPort1.Close(); progressBar1.Value = 0; button1.Enabled = false; button2.Enabled = false; button4.Enabled = false; button3.Enabled = true; textBox1.Enabled = false; } private void button1_Click(object sender, EventArgs e) { serialPort1.WriteLine(textBox1.Text); textBox1.Text = ""; } private void button2_Click(object sender, EventArgs e) { try { textBox2.Text = serialPort1.ReadLine(); } catch(TimeoutException) { textBox2.Text = "TimeoutException"; } } } }
Решение задачи: «Есть кусок кода, как его сделать рабочим ?»
textual
Листинг программы
List<byte> buffer = new List<byte>(); string[] strs = textBox1.Text.Split(' '); for (int i = 0; i < strs.Count(); i++) buffer.Add(Convert.ToByte(strs[i], 16)); serialPort1.Write(buffer.ToArray(), 0, buffer.Count); textBox1.Text = ""; //------------------------------------------------------- List<byte> buffer = new List<byte>(); try { for (int i = 0; i < serialPort1.BytesToRead; i++) buffer.Add(Convert.ToByte(serialPort1.ReadByte())); for (int i = 0; i < buffer.Count; i++) textBox2.Text += buffer[i].ToString("X2") + " "; } catch (TimeoutException) {textBox2.Text = "TimeoutException";}
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д