Проблема с чтением последовательного порта C # .net 2.0 для получения выходных данных весов - PullRequest
0 голосов
/ 08 июня 2011

Я пытаюсь прочитать вес из модели весов Sartorius № BS2202S, используя следующий код в C # .net 2.0 на компьютере с Windows XP:

public string readWeight()
{
    string lastError = "";
    string weightData = "";
    SerialPort port = new SerialPort();
    port.PortName = "COM1";
    port.BaudRate = 9600;
    port.Parity = Parity.Even;
    port.DataBits = 7;
    port.StopBits = StopBits.One;
    port.Handshake = Handshake.RequestToSend;
    try {
        port.Open();
        weightData = port.ReadExisting();
        if(weightData == null || weightData.Length == 0) {
            lastError = "Unable to read weight. The data returned form weighing machine is empty or null.";
            return lastError;
        }
    }
    catch(TimeoutException) {
        lastError = "Operation timed out while reading weight";
        return lastError;
    }
    catch(Exception ex) {
        lastError = "The following exception occurred while reading data." + Environment.NewLine + ex.Message;
        return lastError;
    }
    finally {
        if(port.IsOpen == true) {
            port.Close();
            port.Dispose();
        }
    }
    return weightData;
}

Я могу прочитать вес, используя приложение Hyperterminal (поставляется с Windows XP) с теми же параметрами последовательного порта, которые указаны выше для открытия порта. Но из приведенного выше фрагмента кода я могу открыть порт, и каждый раз он возвращает пустые данные.
Я попытался открыть порт, используя код, указанный в этом потоке переполнения стека , но он возвращает пустые данные.
Пожалуйста, помогите мне.

Ответы [ 2 ]

1 голос
/ 21 июня 2011

Я знаю, что это, вероятно, уже сейчас ... но для дальнейшего использования ...

Посмотрите на рукопожатие.Существует как аппаратное, так и программное обеспечение.Ваша проблема может быть либо - так что вам нужно попробовать оба.

Для аппаратного подтверждения связи вы можете попробовать:

        mySerialPort.DtrEnable = True
        mySerialPort.RtsEnable = True

Обратите внимание, что

        mySerialPort.Handshake = Handshake.RequestToSend

Я не думаю, что устанавливает линию DTR, которая может потребоваться некоторым последовательным устройствам

Программное подтверждение рукопожатия также известно как XON / XOFF и может быть установлено с помощью

        mySerialPort.Handshake = Handshake.XOnXOff

ИЛИ

        mySerialPort.Handshake = Handshake.RequestToSendXOnXOff

Возможно, вам все равно потребуется включить DTR

Когдавсе остальное терпит неудачу - не забудьте проверить все эти комбинации рукопожатия.

0 голосов
/ 01 августа 2012

Поскольку у кого-то еще, возможно, будут проблемы с этим в будущем, рукопожатие является выбираемым вариантом.

В большинстве балансов вы увидите опции для Программного обеспечения, Аппаратного обеспечения 2 символа, Аппаратного обеспечения 1 символа.Настройка по умолчанию для весов Sartorius - Hardware 2 Char.Я обычно рекомендую перейти на программное обеспечение.

Кроме того, если он перестает работать все вместе, его часто можно исправить, выполнив настройку по умолчанию для устройства с помощью параметра 9 1 1.А затем сброс настроек связи.

Пример того, как изменить настройки, можно найти в руководстве на этой странице:

http://www.dataweigh.com/products/sartorius/cpa-analytical-balances/

...