Пишу программу связку АЦП i-7017 и компа. Работает это чудо по протоколу DCON (простой текстовый протокол). Все вроде сделал все работает вот только АЦП возвращает не то что должно быть.
должен возвращать:
>-5.0000-5.0000-5.0000-5.0000-5.0000-5.0000-5.0000-4.9982
а возвращает:
j?r????j?r????j?r????j?r????j?r????j?r????j?r????j?r????j?
Код: Выделить всё
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.IO.Ports;
namespace SerrialPortReader
{
public partial class Form1 : Form
{
//public class ASCIIEncoding : Enc {};
string InputData = String.Empty;
delegate void SetTextCallback(string text);
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
// получаем список СОМ портов системы
string**** ports = SerialPort.GetPortNames();
foreach (string port in ports)
{
comboBox1.Items.Add(port);
}
}
void AddData(string text)
{
listBox1.Items.Add(text);
}
private void serialPort1_DataReceived(object sender, SerialDataReceivedEventArgs e)
{
int i = port.BytesToRead;
InputData = port.ReadExisting();
if (InputData != String.Empty)
{
SetText(InputData);
}
// while (i != 0)
//{
// i--;
// InputData = Convert.ToString(port.ReadChar(),16);
// SetText(InputData);
//}
}
private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
{
if (comboBox1.Text != "")
{
groupBox2.Enabled = true;
button1.Enabled = true;
}
else
{
groupBox2.Enabled = false;
button1.Enabled = false;
}
}
private void button1_Click(object sender, EventArgs e)
{
if (button1.Text == "Старт")
{
if (port.IsOpen) port.Close();
#region Задаем параметры порта
port.PortName = comboBox1.Text;
port.BaudRate = Convert.ToInt32(comboBox2.Text);
port.DataBits = Convert.ToInt32(comboBox3.Text);
switch (comboBox4.Text)
{
case "Пробел":
port.Parity = Parity.Space;
break;
case "Чет":
port.Parity = Parity.Even;
break;
case "Нечет":
port.Parity = Parity.Odd;
break;
case "Маркер":
port.Parity = Parity.Mark;
break;
default:
port.Parity = Parity.None;
break;
}
switch (comboBox5.Text)
{
case "2":
port.StopBits = StopBits.Two;
break;
case "1.5":
port.StopBits = StopBits.OnePointFive;
break;
case "Нет":
port.StopBits = StopBits.None;
break;
default:
port.StopBits = StopBits.One;
break;
}
switch (comboBox6.Text)
{
case "Xon/Xoff":
port.Handshake = Handshake.XOnXOff;
break;
case "Аппаратное":
port.Handshake = Handshake.RequestToSend;
break;
default:
port.Handshake = Handshake.None;
break;
}
#endregion
try
{
port.Open();
button1.Text = "Стоп";
button2.Enabled = false;
}
catch
{
MessageBox.Show("Порт " + port.PortName + " невозможно открыть!", "Ошибка!", MessageBoxButtons.OK, MessageBoxIcon.Warning);
comboBox1.SelectedText = "";
button1.Text = "Старт";
}
}
else
{
if (port.IsOpen) port.Close();
button1.Text = "Старт";
button2.Enabled = true;
}
}
private void SetText(string text)
{
if (this.listBox1.InvokeRequired)
{
SetTextCallback d = new SetTextCallback(SetText);
this.Invoke(d, new object**** { text });
}
else
{
this.AddData(text);
}
}
private void Form1_FormClosing(object sender, FormClosingEventArgs e)
{
button1.Text = "Стоп";
Application.DoEvents();
button1_Click(sender, e);
Application.DoEvents();
}
private void button3_Click(object sender, EventArgs e)
{
port.WriteLine(textBox1 + "\r\n");
}
private void button2_Click(object sender, EventArgs e)
{
}
}
}В техтбоксе я пишу стандартную команду #01 которая значит вернуть значения всех портов устройства с адресом 01.

