public double ReadRegAscii(byte slaveAddress, long Address, int nTimeout = 1000) { Byte[] recvBytes = new Byte[1024]; int recvSize = 0; byte[] CMD = new byte[17]; CMD[0] = 0; string temp = (slaveAddress).ToString("X2"); //站号 CMD[1] = (byte)(slaveAddress).ToString("X2").ToCharArray()[0]; CMD[2] = (byte)(slaveAddress).ToString("X2").ToCharArray()[1]; //命令 CMD[3] = (byte)'0'; CMD[4] = (byte)'3'; //地址 byte addr = (byte)((Address & 0XFF00) >> 8); temp = ((byte)((Address & 0XFF00) >> 4)).ToString("X2"); CMD[5] = (byte)((byte)((Address & 0XFF00) >> 8)).ToString("X2").ToCharArray()[0]; CMD[6] = (byte)((byte)((Address & 0XFF00) >> 8)).ToString("X2").ToCharArray()[1]; temp = ((byte)((Address & 0X00FF) >> 0)).ToString("X2"); CMD[7] = (byte)((byte)((Address & 0X00FF) >> 0)).ToString("X2").ToCharArray()[0]; CMD[8] = (byte)((byte)((Address & 0X00FF) >> 0)).ToString("X2").ToCharArray()[1]; //读出个数 CMD[9] = (byte)'0'; CMD[10] = (byte)'0'; CMD[11] = (byte)'0'; CMD[12] = (byte)'1'; byte[] bytesAscii = new Byte[6]; bytesAscii[0] = slaveAddress; bytesAscii[1] = 0x03; bytesAscii[2] = (byte)((Address & 0XFF00) >> 8); bytesAscii[3] = (byte)(Address & 0X00FF); bytesAscii[4] = 0x00; bytesAscii[5] = 0x01; int VALLRC = ParityType.LRC(bytesAscii, 6); temp = ((byte)((VALLRC & 0XF0) >> 4)).ToString("X"); CMD[13] = (byte)((byte)((VALLRC & 0XF0) >> 4)).ToString("X").ToCharArray()[0]; CMD[14] = (byte)((byte)(VALLRC & 0X0F)).ToString("X").ToCharArray()[0]; temp = ((byte)((VALLRC & 0X0F) >> 0)).ToString("X"); CMD[15] = 0X0D; CMD[16] = 0X0A; CMD[0] = (byte)':'; _serialPort.DiscardInBuffer(); _serialPort.Write(CMD, 0, CMD.Length); int data = 0; string result = ""; Stopwatch stopwatch = new Stopwatch(); stopwatch.Restart(); do { if (stopwatch.ElapsedMilliseconds > nTimeout) { return(double.NaN); } try { Byte d = (Byte)_serialPort.ReadByte(); recvBytes[recvSize++] = d; } catch (Exception ex) { continue; } if (recvSize >= 5 && recvBytes[3] == (Byte)'8' && recvBytes[3] == (Byte)'3') { return(double.NaN); } if (recvSize >= 15 && recvBytes[13] == 0x0D && recvBytes[14] == 0x0a) { result = Encoding.Default.GetString(recvBytes); result = result.Substring(7, 4); data = Convert.ToInt32(result, 16); return(data); } }while (true); }