Общение с АЦП по протоколу DCON на C#

Подключаем наши девайсы к компьютеру. Обсуждаются: порты, протоколы, драйвера, языки программирования и т.д.
Ответить
Аватара пользователя
dazzgt
Первый раз сказал Мяу!
Сообщения: 23
Зарегистрирован: Вс май 15, 2011 21:20:36
Откуда: Питер

Общение с АЦП по протоколу DCON на C#

Сообщение dazzgt »

Всем привет.
Пишу программу связку АЦП 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.
Плохо выражаю свои мысли
Ищу наставника с кем можно было бы поболтать в аське, обсудить идеи, попросить совета I Seek You :) 213180453
Реклама
Аватара пользователя
МитяРа
Модератор
Сообщения: 11492
Зарегистрирован: Чт дек 11, 2008 14:52:26
Откуда: град Нижний

Re: Общение с АЦП по протоколу DCON на C#

Сообщение МитяРа »

Если соединение последовательное - может скорости не совпадают..
[img]http://radiokot.ru/forum/download/file.php?id=93376[/img][i][color=#000080][size=85]Между людьми возникает напряжение, если у них разный потенциал...[/size][/color][/i]
Реклама
Аватара пользователя
dazzgt
Первый раз сказал Мяу!
Сообщения: 23
Зарегистрирован: Вс май 15, 2011 21:20:36
Откуда: Питер

Re: Общение с АЦП по протоколу DCON на C#

Сообщение dazzgt »

Есть специальная программа от производителя DCON Utility, связывался с ацп через нее, она отображает данные полностью корректно. Все параметры настраивал чтоб точ в точ как в ней.

Я уже перепробовал разные варианты считывания и посимвольно, и побайтно (одно и тоже). Как с файлом разве что не общался(но собираюсь попробовать)
Плохо выражаю свои мысли
Ищу наставника с кем можно было бы поболтать в аське, обсудить идеи, попросить совета I Seek You :) 213180453
Аватара пользователя
dazzgt
Первый раз сказал Мяу!
Сообщения: 23
Зарегистрирован: Вс май 15, 2011 21:20:36
Откуда: Питер

Re: Общение с АЦП по протоколу DCON на C#

Сообщение dazzgt »

Решил ответить как решил проблему)) Я полностью переписал программу с нуля по статье с сайта http://piclist.ru/. Там есть очень подробная статья по работе с COM портом через CreateFile и потоки и исходники на си билдере.
Плохо выражаю свои мысли
Ищу наставника с кем можно было бы поболтать в аське, обсудить идеи, попросить совета I Seek You :) 213180453
Реклама
Эиком - электронные компоненты и радиодетали
Ответить

Вернуться в «Интеграция с ПК»