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

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

13   голосов , оценка 4.154 из 5
Похожие ответы