Exemplo n.º 1
0
        private byte[] BuildReadCommand(ModBusFunctionMask mask, ushort address, ushort length)
        {
            ushort messageId = GetMessageId();

            byte[] buffer = new byte[12];
            buffer[0]  = (byte)(messageId / 256);
            buffer[1]  = (byte)(messageId % 256);
            buffer[5]  = 0x06;
            buffer[6]  = station;
            buffer[7]  = (byte)mask;
            buffer[8]  = (byte)(address / 256);
            buffer[9]  = (byte)(address % 256);
            buffer[10] = (byte)(length / 256);
            buffer[11] = (byte)(length % 256);
            return(buffer);
        }
Exemplo n.º 2
0
        /// <summary>
        /// 读取服务器的数据,需要指定不同的功能码
        /// </summary>
        /// <param name="function"></param>
        /// <param name="address"></param>
        /// <param name="length"></param>
        /// <returns></returns>
        private OperateResult <byte[]> ReadModBusBase(ModBusFunctionMask function, ushort address, ushort length)
        {
            OperateResult <byte[]> resultBytes = CheckModbusTcpResponse(BuildReadCommand(function, address, length));

            if (resultBytes.IsSuccess)
            {
                // 二次数据处理
                if (resultBytes.Content?.Length >= 9)
                {
                    byte[] buffer = new byte[resultBytes.Content.Length - 9];
                    Array.Copy(resultBytes.Content, 9, buffer, 0, buffer.Length);
                    resultBytes.Content = buffer;
                }
            }
            return(resultBytes);
        }
Exemplo n.º 3
0
        private void userButton3_Click(object sender, EventArgs e)
        {
            // 00 00 00 00 00 06 FF 03 00 00 00 10

            HslCommunication.OperateResult <byte[]> read = null;

            ModBusFunctionMask mask = (ModBusFunctionMask)comboBox1.SelectedItem;

            switch (mask)
            {
            case ModBusFunctionMask.ReadCoil:
            {
                // 读线圈
                read = busTcpClient.ReadCoil(ushort.Parse(textBox4.Text), ushort.Parse(textBox5.Text));
                break;
            }

            case ModBusFunctionMask.ReadDiscrete:
            {
                // 读离散值
                read = busTcpClient.ReadDiscrete(ushort.Parse(textBox4.Text), ushort.Parse(textBox5.Text));
                break;
            }

            case ModBusFunctionMask.ReadRegister:
            {
                // 读寄存器
                read = busTcpClient.ReadRegister(ushort.Parse(textBox4.Text), ushort.Parse(textBox5.Text));
                break;
            }

            default: break;
            }

            if (read != null)
            {
                if (read.IsSuccess)
                {
                    textBox2.AppendText(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff") + " :" +
                                        HslCommunication.BasicFramework.SoftBasic.ByteToHexString(read.Content, ' ') + Environment.NewLine);
                }
                else
                {
                    MessageBox.Show(read.ToMessageShowString());
                }
            }
        }
Exemplo n.º 4
0
        /// <summary>
        /// 读取服务器的线圈,对应功能码0x01
        /// </summary>
        /// <param name="function"></param>
        /// <param name="address"></param>
        /// <param name="length"></param>
        /// <returns></returns>
        private OperateResult <byte[]> ReadModBusBase(ModBusFunctionMask function, ushort address, ushort length)
        {
            OperateResult <byte[]> resultBytes = ReadFromModBusServer(BuildReadCommand(function, address, length));

            if (resultBytes.IsSuccess)
            {
                // 二次数据处理
                if (resultBytes.Content?.Length >= 9)
                {
                    byte[] buffer = new byte[resultBytes.Content.Length - 9];
                    Array.Copy(resultBytes.Content, 9, buffer, 0, buffer.Length);
                    resultBytes.Content = buffer;
                }
                else
                {
                    // 数据异常
                    resultBytes.IsSuccess = false;
                    resultBytes.Message   = "数据异常";
                }
            }
            return(resultBytes);
        }