private const string HandshakeSignal = "?"; private const string ReceiveSignal = "."; private const string TSignal = "T"; private const string HOSignal = "HO";

private void ReadWriter() { int handshakeCount = 0; string receivedData = ""; string matchWavelength = ""; string calculatedWavelength = ""; string result = "";

// 发送握手信号
SendSerialPort(HandshakeSignal);

// 循环等待接收数据
while (handshakeCount < 50)
{
    // 暂停50毫秒
    Thread.Sleep(50);

    // 读取数据
    receivedData = ReadSerialPort();

    // 判断是否握手成功
    if (receivedData.Contains(ReceiveSignal))
    {
        // 发送T信号
        SendTSignal();

        // 暂停50毫秒
        Thread.Sleep(50);

        // 读取数据
        receivedData = ReadSerialPort();

        // 查找匹配项
        matchWavelength = arr.FirstOrDefault(x => receivedData.IndexOf(x.ToString().Length == 3 ? "0" + x.ToString() : x.ToString()) >= 0);

        // 判断波长是否正确
        if (matchWavelength == null)
        {
            result = "功率波长错误,目前功率计,计算值的波长是:" + string.Join(",", arr.ToArray()) + ",请检查你的功率计波长是否正确,波长正确但未包含在目前计算的波长里,如果连续是这样,请联内网通联系蒋云开。";
            Send(result);
            return;
        }

        // 计算波长
        int index = receivedData.IndexOf(matchWavelength == null ? "" : matchWavelength);
        if (index < 5)
        {
            continue;
        }
        calculatedWavelength = receivedData.Substring(0, index == 0 ? receivedData.Length - 0 : index);

        switch (calculatedWavelength[calculatedWavelength.Length - 1])
        {
            case '2':
                calculatedWavelength = calculatedWavelength.Insert(7 - 1, ".");
                break;
            case '3':
                calculatedWavelength = calculatedWavelength.Insert(7 - 2, ".");
                break;
            case '4':
                calculatedWavelength = calculatedWavelength.Insert(7 - 3, ".");
                break;
            case '5':
                calculatedWavelength = calculatedWavelength.Insert(7 - 4, ".");
                break;
        }

        if (calculatedWavelength.Length > 9)
        {
            result = "功率波长错误,目前功率计,计算值的波长是:" + string.Join(",", arr.ToArray()) + ",请检查你的功率计波长是否正确,波长正确但未包含在目前计算的波长里,如果连续是这样,请联内网通联系蒋云开。";
            Send(result);
            return;
        }

        result = Replace(calculatedWavelength);
        Send(result);

        // 发送HO信号
        SendSerialPort(HOSignal);
        return;
    }
    else
    {
        // 继续发送握手信号
        SendSerialPort(HandshakeSignal);
        handshakeCount++;
    }
}

Send("握手失败。");

}

private void SendTSignal() { for (int i = 0; i < 24; i++) { SendSerialPort(TSignal); Thread.Sleep(3); } }

private string ReadSerialPort() { byte[] buffer = new byte[1024]; int length = 0;

try
{
    length = serialPort.Read(buffer, 0, serialPort.BytesToRead);
}
catch (Exception ex)
{
    HandleException(ex);
}

return Encoding.Default.GetString(buffer, 0, length);

}

private void SendSerialPort(string data) { try { serialPort.Write(data); } catch (Exception ex) { HandleException(ex); } }

private void HandleException(Exception ex) { Send(ex.Message); return; }


原文地址: http://www.cveoy.top/t/topic/jGOH 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录