Есть кусок кода, как его сделать рабочим ? - C#

Узнай цену своей работы

Формулировка задачи:

Новичок в шарпе, да и вообще в программировании. Сижу туплю, есть пример куска кода из инструкции. Нужно его нормально дооформить до рабочего состояния. Указать переменные и т.п. Некое устройство которому нужно послать команды через компорт и получить ответ. С настройкой компорта разобрался, а вот с типизацией и оформлением этого блока тупняк. Уже бьюсь пару часов и не могу сообразить. Может подскажете ?
Листинг программы
  1. out_data[0] = 0x01;
  2. out_data[1] = 0x81;
  3. SerialPort.Write(out_data, 0, 2);
  4. Thread.Sleep(50);
  5. SerialPort.Read(in_data, 0, 16);
  6. SensorType = ((in_data[0] & 0x0F) + ((in_data[1] & 0x0F) << 4));
  7. Release = ((in_data[2] & 0x0F) + ((in_data[3] & 0x0F) << 4));
  8. Serial = ((in_data[4] & 0x0F) + ((in_data[5] & 0x0F) << 4) + ((in_data[6] & 0x0F) << 8) + ((in_data[7] & 0x0F) << 12));
  9. Base_distance = ((in_data[8] & 0x0F) + ((in_data[9] & 0x0F) << 4) + ((in_data[10] & 0x0F) << 8) + ((in_data[11] & 0x0F) << 12));
  10. Measure_Range = ((in_data[12] & 0x0F) + ((in_data[13] & 0x0F) << 4) + ((in_data[14] & 0x0F) << 8) + ((in_data[15] & 0x0F) << 2));
Или вот дополню. Есть программа, мне нужно команды вида 0x01(исходящий пример выше) отсылать с помощью первого окна и вторым получать пока хоть какой-то ответ от устройства. Пока тишина, я понимаю что неправильная типизация - но, не могу понять как это исправить.
Листинг программы
  1. using System;
  2. using System.Collections.Generic;
  3. using System.ComponentModel;
  4. using System.Data;
  5. using System.Drawing;
  6. using System.Linq;
  7. using System.Text;
  8. using System.Threading.Tasks;
  9. using System.Windows.Forms;
  10. using System.IO.Ports;
  11. namespace WindowsFormsApplication1
  12. {
  13. public partial class Form1 : Form
  14. {
  15. public Form1()
  16. {
  17. InitializeComponent();
  18. GetAvailablePorts();
  19. }
  20. void GetAvailablePorts()
  21. {
  22. String[] ports = SerialPort.GetPortNames();
  23. comboBox1.Items.AddRange(ports);
  24. }
  25. private void button3_Click(object sender, EventArgs e)
  26. {
  27. try
  28. {
  29. if (comboBox1.Text == "" || comboBox2.Text == "")
  30. {
  31. textBox1.Text = "Please select port seting";
  32. }
  33. else
  34. {
  35. serialPort1.PortName=comboBox1.Text;
  36. serialPort1.BaudRate=Convert.ToInt32(comboBox2.Text);
  37. serialPort1.DataBits = 8;
  38. serialPort1.Parity = System.IO.Ports.Parity.None;
  39. serialPort1.StopBits = System.IO.Ports.StopBits.One;
  40. serialPort1.ReadTimeout = 1000;
  41. serialPort1.WriteTimeout = 1000;
  42. serialPort1.Open();
  43. progressBar1.Value=100;
  44. button1.Enabled=true;
  45. button2.Enabled=true;
  46. textBox1.Enabled=true;
  47. button3.Enabled=false;
  48. button4.Enabled=true;
  49. textBox1.Text = "";
  50. }
  51. }
  52. catch(UnauthorizedAccessException)
  53. {
  54. textBox2.Text="Unauthorised Acess";
  55. }
  56. }
  57. private void button4_Click(object sender, EventArgs e)
  58. {
  59. serialPort1.Close();
  60. progressBar1.Value = 0;
  61. button1.Enabled = false;
  62. button2.Enabled = false;
  63. button4.Enabled = false;
  64. button3.Enabled = true;
  65. textBox1.Enabled = false;
  66. }
  67. private void button1_Click(object sender, EventArgs e)
  68. {
  69. serialPort1.WriteLine(textBox1.Text);
  70. textBox1.Text = "";
  71. }
  72. private void button2_Click(object sender, EventArgs e)
  73. {
  74. try
  75. {
  76. textBox2.Text = serialPort1.ReadLine();
  77. }
  78. catch(TimeoutException)
  79. {
  80. textBox2.Text = "TimeoutException";
  81. }
  82. }
  83. }
  84. }

Решение задачи: «Есть кусок кода, как его сделать рабочим ?»

textual
Листинг программы
  1. List<byte> buffer = new List<byte>();
  2. string[] strs = textBox1.Text.Split(' ');
  3. for (int i = 0; i < strs.Count(); i++)
  4. buffer.Add(Convert.ToByte(strs[i], 16));
  5. serialPort1.Write(buffer.ToArray(), 0, buffer.Count);
  6. textBox1.Text = "";
  7.  
  8.  
  9. //-------------------------------------------------------
  10.  
  11.  
  12. List<byte> buffer = new List<byte>();
  13. try
  14. {
  15. for (int i = 0; i < serialPort1.BytesToRead; i++)
  16. buffer.Add(Convert.ToByte(serialPort1.ReadByte()));
  17. for (int i = 0; i < buffer.Count; i++)
  18. textBox2.Text += buffer[i].ToString("X2") + " ";
  19.  }
  20. catch (TimeoutException)
  21. {textBox2.Text = "TimeoutException";}

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


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

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

13   голосов , оценка 4.154 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы