示例#1
0
        /// <summary>
        /// 自动扫描可连接串口属性
        /// </summary>
        /// <returns></returns>
        private void AutoOpenRead()
        {
            #region 当前选择的配置有效匹配
            FirstItem(ref BaudRateList, int.Parse(cb_baudRate.Text.ToString()));
            FirstItem(ref DataBitList, int.Parse(txt_dataBit.Text.ToString()));
            FirstItem(ref StopBitsList, (StopBits)int.Parse(txt_stopBit.Text.ToString()));
            var firstParity = cb_parity.SelectedIndex == 0 ? Parity.None : (cb_parity.SelectedIndex == 1 ? Parity.Odd : Parity.Even);
            FirstItem(ref ParityList, firstParity);
            #endregion
            byte.TryParse(txt_stationNumber.Text?.Trim(), out byte stationNumber);

            if (!client.ReadInt16("0", stationNumber).IsSucceed)
            {
                foreach (var baudRate in BaudRateList)
                {
                    foreach (var dataBit in DataBitList)
                    {
                        foreach (var stopBits in StopBitsList)
                        {
                            foreach (var parity in ParityList)
                            {
                                for (byte i = 0; i < 255; i++)
                                {
                                    stationNumber = (byte)(i + 1);
                                    if (but_open.Enabled)
                                    {
                                        return;
                                    }
                                    client?.Close();
                                    client = new ModbusRtuClient(cb_portNameSend.Text.ToString(), baudRate, dataBit, stopBits, parity);
                                    var result = client.Open();
                                    if (result.IsSucceed)
                                    {
                                        if (client.ReadInt16("0", stationNumber).IsSucceed)
                                        {
                                            AppendText($@"连接【成功】 端口:{cb_portNameSend.Text.ToString()} 波特率:{baudRate} 数据位:{dataBit} 停止位:{stopBits} 奇偶:{parity} 站号:{stationNumber}");
                                            return;
                                        }
                                        else
                                        {
                                            AppendText($@"连接失败 端口:{cb_portNameSend.Text.ToString()} 波特率:{baudRate} 数据位:{dataBit} 停止位:{stopBits} 奇偶:{parity} 站号:{stationNumber}");
                                        }
                                    }
                                    else
                                    {
                                        AppendText($"连接异常 端口:{cb_portNameSend.Text.ToString()} 波特率:{baudRate} 数据位:{dataBit} 停止位:{stopBits} 奇偶:{parity} 站号:{stationNumber} Err:{result.Err}");
                                    }
                                }
                            }
                        }
                    }
                }
            }
            else
            {
                AppendText($@"连接【成功】 端口:{cb_portNameSend.Text} 波特率:{cb_baudRate.Text} 数据位:{txt_dataBit.Text} 停止位:{txt_stopBit.Text} 奇偶:{cb_parity.Text} 站号:{stationNumber}");
            }
        }
示例#2
0
        public async Task 短连接自动开关()
        {
            short Number = 33;

            client.Write("4", Number, stationNumber);
            Assert.True(client.ReadInt16("4", stationNumber).Value == Number);

            Number = 34;
            client.Write("4", Number, stationNumber);
            Assert.True(client.ReadInt16("4", stationNumber).Value == Number);

            Number = 1;
            client.Write("12", Number, stationNumber);
            Assert.True(client.ReadInt16("12", stationNumber).Value == 1);

            Number = 0;
            client.Write("12", Number, stationNumber);
            Assert.True(client.ReadInt16("12", stationNumber).Value == 0);

            int numberInt32 = -12;

            client.Write("4", numberInt32, stationNumber);
            Assert.True(client.ReadInt32("4", stationNumber).Value == numberInt32);

            float numberFloat = 112;

            client.Write("4", numberFloat, stationNumber);
            Assert.True(client.ReadFloat("4", stationNumber).Value == numberFloat);

            double numberDouble = 32;

            client.Write("4", numberDouble, stationNumber);
            Assert.True(client.ReadDouble("4", stationNumber).Value == numberDouble);
        }