Exemple #1
0
        public double ReadRegRTU2(byte slaveAddress, long Address, int nTimeout = 1000)
        {
            try
            {
                Byte[] recvBytes = new Byte[1024];
                int    recvSize  = 0;
                byte[] CMD       = new byte[8];
                CMD[0] = slaveAddress;
                CMD[1] = 0X03;
                CMD[2] = (byte)((Address & 0X00FF00) >> 8);
                CMD[3] = (byte)((Address & 0X00FF) >> 0);
                CMD[4] = 0;
                CMD[5] = 0X02;
                int VALCRC = ParityType.CRC16(CMD, 6);
                CMD[6] = (byte)(VALCRC & 0X00FF);
                CMD[7] = (byte)((VALCRC & 0XFF00) >> 8);
                _serialPort.DiscardInBuffer();
                _serialPort.Write(CMD, 0, CMD.Length);
                Stopwatch stopwatch = new Stopwatch();
                stopwatch.Restart();
                int data = 0;
                do
                {
                    if (stopwatch.ElapsedMilliseconds > nTimeout)
                    {
                        return(double.NaN);
                    }
                    try
                    {
                        Byte d = (Byte)_serialPort.ReadByte();
                        recvBytes[recvSize++] = d;
                    }
                    catch (Exception ex)
                    {
                        continue;
                    }
                    if (recvSize >= 2 && recvBytes[1] == 0x02)
                    {
                        return(double.NaN);
                    }

                    if (recvSize >= 9 && recvBytes[1] == 0x03)
                    {
                        data |= recvBytes[3] << 24;
                        data |= recvBytes[4] << 16;
                        data |= recvBytes[5] << 8;
                        data |= recvBytes[6];
                        return(data);
                    }
                }while (true);
            }
            catch (Exception e)
            {
                MessageBox.Show("电抓  串口 读取数据异常 " + e.Message, "Err", MessageBoxButtons.OK, MessageBoxIcon.Error);
                return(double.NaN);
            }
        }
Exemple #2
0
        public void WriteRegRTU(byte slaveAddress, long Address, int val)
        {
            try
            {
                byte[] CMD = new byte[8];
                CMD[0] = slaveAddress;
                CMD[1] = 0X06;

                CMD[2] = (byte)((Address & 0X00FF00) >> 8);
                CMD[3] = (byte)((Address & 0X00FF) >> 0);
                CMD[4] = (byte)((val & 0X00FF00) >> 8);
                CMD[5] = (byte)((val & 0X00FF) >> 0);
                int VALCRC = ParityType.CRC16(CMD, 6);
                CMD[6] = (byte)(VALCRC & 0X00FF);
                CMD[7] = (byte)((VALCRC & 0XFF00) >> 8);
                _serialPort.DiscardInBuffer();
                _serialPort.Write(CMD, 0, CMD.Length);
            }
            catch (Exception e)
            {
                MessageBox.Show("电抓  串口 写入数据异常 " + e.Message, "Err", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }