Как общаться с весами через rs232 - PullRequest
1 голос
/ 25 августа 2011

Я пытаюсь заставить мое приложение C # взаимодействовать с цифровым масштабированием через rs232, используя класс SerialPort в .net.К сожалению, я не могу получить никакой обратной связи от шкалы.

Это шкала TSCALE TSQSP и, по-видимому, она использует протокол связи CAS.Из моего понимания протокола CAS мне нужно отправить «ENQ», ждать «ACK», а затем отправить «DC1» для получения информации, но после отправки «ENQ» я не получаю никакого ответа.Вот мой кодУ кого-нибудь есть опыт работы с масштабированием по тому же протоколу связи?

Большое спасибо за любую помощь

public partial class Form1 : Form
{
    private SerialPort port = new SerialPort("COM6", 4800, Parity.None, 8, StopBits.One);

    public Form1()
    {
        InitializeComponent();

        port.DataReceived += new SerialDataReceivedEventHandler(port_DataReceived);
        port.Open();            
    }

    private void button1_Click(object sender, EventArgs e)
    {            
        port.Write("ENQ");

    }

    private void port_DataReceived(object sender, SerialDataReceivedEventArgs e)
    {
        this.textBox1.Text = port.ReadExisting();
    }      
}

Спасибо всем за помощь, все ответы были полезны, я наконец-то смогзаставить это работать.Сначала я узнал, что у меня не правильно настроена шкала, а также вы правы, что я должен отправить 05H.Теперь все работает, спасибо.

Ответы [ 3 ]

4 голосов
/ 25 августа 2011

Я запрограммировал много весов, и обычно, если вы даже не получаете ответ на ENQ, это потому, что вы неправильно настроили SerialPort.Будьте на 100% уверены, что скорость передачи, биты данных, стоп-биты и четность установлены правильно.

Что бы я сделал, это загрузил LookRS232 .Это программа для связи через COM-порт.После установки откройте COM-порт с нашими настройками, а затем запишите ENQ непосредственно в COM-порт.Проще протестировать множество настроек, чтобы сначала он заработал здесь.Затем, когда вы заставите его работать, используйте те же самые настройки в вашей программе.

РЕДАКТИРОВАТЬ - ДОБАВЛЕННЫЕ НЕКОТОРЫЕ ТОЧКИ ОТ ПАССАНТА ГАНСА ЗДЕСЬ, ЧТО ЭТО ВАЖНО - БОЛЬШЕ ВАЖНО, ЧТО ENQ - ASCII VALUE 5,И НЕ СТРОКА

port.Write("ENQ");

ENQ, ACK и DC1 - это управляющие коды, а не строки.Используйте ASCII-таблицу, чтобы узнать код.Исправление:

port.Write(5);

Вы также должны включить аппаратные сигналы рукопожатия, многие устройства используют его, чтобы убедиться, что аппарат включен и готов к приему данных.Таким образом, они знают, что они получают реальные данные, а не шум.Исправление:

port.Open();            
port.DtrEnable = true;
port.RtsEnable = true;

Проверка соединения с другой программой, такой как HyperTerminal или Putty, всегда хорошая идея, если у вас все еще есть проблемы.Сгенерируйте управляющие коды клавишей Ctrl на клавиатуре.ENQ - это Ctrl + E, DC1 - это Ctrl + Q.

2 голосов
/ 28 августа 2011

Если вам нужно отправить ENQ, вам нужно отправить двоичный 5, а не строку 5.

Если вы пишете

port.Write("5");

Затем вы отправляете двоичный файл 53 ( ASCII Chart ) Посмотрите на диаграмме ASCII, как 5 декабря - Запрос, а 53 декабря - символ '5'?

Попробуйте это:

byte [] Buff = new byte[1];
        Buff[0] = 0x05;
        port.Write(Buff, 0, 1);
1 голос
/ 26 августа 2011

Другая проблема, у вас есть правильный кабель? Прозрачная коробка отлично подходит для проверки проводки.

...