Есть кусок кода, как его сделать рабочим ? - 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";}