示例#1
0
        public TValue[] Read <TValue>(string address, ushort length)
        {
            int Address = DMT.DevToAddrW("DVP", address, Station);

            if (typeof(TValue) == typeof(bool))
            {
                bool[] b = busTcpClient.ReadCoil($"{Address}", length).Content;
                return((TValue[])(object)b);
            }
            if (typeof(TValue) == typeof(ushort))
            {
                ushort[] b = busTcpClient.ReadUInt16($"{Address}", length).Content;

                return((TValue[])(object)b);
            }
            if (typeof(TValue) == typeof(int))
            {
                int[] b = busTcpClient.ReadInt32($"{Address}", length).Content;

                return((TValue[])(object)b);
            }
            if (typeof(TValue) == typeof(uint))
            {
                uint[] b = busTcpClient.ReadUInt32($"{Address}", length).Content;
                return((TValue[])(object)b);
            }
            if (typeof(TValue) == typeof(long))
            {
                long[] b = busTcpClient.ReadInt64($"{Address}", length).Content;
                return((TValue[])(object)b);
            }
            if (typeof(TValue) == typeof(ulong))
            {
                ulong[] b = busTcpClient.ReadUInt64($"{Address}", length).Content;
                return((TValue[])(object)b);
            }

            if (typeof(TValue) == typeof(short))
            {
                short[] b = busTcpClient.ReadInt16($"{Address}", length).Content;
                return((TValue[])(object)b);
            }
            if (typeof(TValue) == typeof(double))
            {
                double[] b = busTcpClient.ReadDouble($"{Address}", length).Content;
                return((TValue[])(object)b);
            }
            if (typeof(TValue) == typeof(float))
            {
                float[] b = busTcpClient.ReadFloat($"{Address}", length).Content;
                return((TValue[])(object)b);
            }
            if (typeof(TValue) == typeof(string))
            {
                string b = busTcpClient.ReadString($"{Address}", length).Content;
                return((TValue[])(object)b);
            }

            throw new InvalidOperationException(string.Format("type '{0}' not supported.", typeof(TValue)));
        }
        public byte[] ReadHoldingRegisters(byte slaveAddress, string startAddress, ushort nuMBErOfPoints)
        {
            var Address = DMT.DevToAddrW("DVP", startAddress, slaveAddress);
            var frame   = ReadHoldingRegistersMessage(slaveAddress, Convert.ToUInt32(Address), nuMBErOfPoints);

            SerialAdaper.WriteLine(frame);
            Thread.Sleep(DELAY);
            var buffReceiver = SerialAdaper.ReadLine();

            if (string.IsNullOrEmpty(buffReceiver))
            {
                return new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }
            }
            ;
            var tempStrg        = buffReceiver.Substring(1, buffReceiver.Length - 2);
            var messageReceived = Conversion.HexToBytes(tempStrg);

            if (buffReceiver.Length == 10)
            {
                ModbusExcetion(messageReceived);
            }
            var data = new byte[messageReceived[2]];

            Array.Copy(messageReceived, 3, data, 0, data.Length);
            return(data);
        }
        public byte[] ReadCoilStatus(byte slaveAddress, string startAddress, ushort nuMBErOfPoints)
        {
            var stopwatch = Stopwatch.StartNew();

            var Address = DMT.DevToAddrW("DVP", startAddress, slaveAddress);
            var frame   = ReadCoilStatusMessage(slaveAddress, $"{Address}", nuMBErOfPoints);

            stopwatch.Stop();
            //   RequestAndResponseMessage _RequestAndResponseMessage = new RequestAndResponseMessage("RequestRead", frame);

            EthernetAdaper.Write(frame);
            Thread.Sleep(DELAY);
            var buffReceiver = EthernetAdaper.Read();

            if (FUNCTION_01 != buffReceiver[7])
            {
                var errorbytes = new byte[3];
                Array.Copy(buffReceiver, 6, errorbytes, 0, errorbytes.Length);
                ModbusExcetion(errorbytes);
            }

            int SizeByte = buffReceiver[8]; // Số lượng byte dữ liệu thu được.
            var data     = new byte[SizeByte];

            Array.Copy(buffReceiver, 9, data, 0,
                       data.Length); // Dữ liệu cần lấy bắt đầu từ byte có chỉ số 9 trong buffReceive.
            return(Bit.ToByteArray(Bit.ToArray(data)));
        }
        public byte[] WriteSingleRegister(byte slaveAddress, string startAddress, byte[] values)
        {
            var Address = DMT.DevToAddrW("DVP", startAddress, slaveAddress);
            var frame   = WriteSingleRegisterMessage(slaveAddress, $"{Address}", values);

            SerialAdaper.Write(frame, 0, frame.Length);
            Thread.Sleep(DELAY);
            var buffReceiver = SerialAdaper.Read();

            if (buffReceiver.Length == 5)
            {
                ModbusExcetion(buffReceiver);
            }
            return(buffReceiver);
        }
示例#5
0
        public bool Write(string address, dynamic value)
        {
            int Address = DMT.DevToAddrW("DVP", address, Station);

            if (value is bool)
            {
                busTcpClient.Write($"{Address}", value);
            }
            else
            {
                busTcpClient.Write($"{Address}", value);
            }

            return(true);
        }
        public byte[] WriteSingleRegister(byte slaveAddress, string startAddress, byte[] values)
        {
            var Address = DMT.DevToAddrW("DVP", startAddress, slaveAddress);
            var frame   = WriteSingleRegisterMessage(slaveAddress, Convert.ToUInt32(Address), values);

            SerialAdaper.WriteLine(frame);
            Thread.Sleep(DELAY);
            var buffReceiver = SerialAdaper.ReadLine();
            var tempStrg     = buffReceiver.Substring(1, buffReceiver.Length - 2);
            var data         = Conversion.HexToBytes(tempStrg);

            if (buffReceiver.Length == 10)
            {
                ModbusExcetion(data);
            }
            return(data);
        }
        public byte[] ReadHoldingRegisters(byte slaveAddress, string startAddress, ushort nuMBErOfPoints)
        {
            var Address = DMT.DevToAddrW("DVP", startAddress, slaveAddress);
            var frame   = ReadHoldingRegistersMessage(slaveAddress, $"{Address}", nuMBErOfPoints);

            SerialAdaper.Write(frame, 0, frame.Length);
            Thread.Sleep(DELAY);
            var buffReceiver = SerialAdaper.Read();

            if (buffReceiver.Length == 5)
            {
                ModbusExcetion(buffReceiver);
            }
            var data = new byte[buffReceiver.Length - 5];

            Array.Copy(buffReceiver, 3, data, 0, data.Length);
            return(data);
        }
        public byte[] WriteMultipleRegisters(byte slaveAddress, string startAddress, byte[] values)
        {
            var Address = DMT.DevToAddrW("DVP", startAddress, slaveAddress);
            var frame   = WriteMultipleRegistersMessage(slaveAddress, $"{Address}", values);

            EthernetAdaper.Write(frame);
            // RequestAndResponseMessage _RequestAndResponseMessage = new RequestAndResponseMessage("RequestWrite", frame);

            Thread.Sleep(DELAY);
            var buffReceiver = EthernetAdaper.Read();

            if (FUNCTION_16 != buffReceiver[7])
            {
                var errorbytes = new byte[3];
                Array.Copy(buffReceiver, 6, errorbytes, 0, errorbytes.Length);
                ModbusExcetion(errorbytes);
            }

            return(buffReceiver);
        }
示例#9
0
        public bool[] ReadDiscrete(string address, ushort length)
        {
            int Address = DMT.DevToAddrW("DVP", address, Station);

            return(busTcpClient.ReadDiscrete($"{Address}", length).Content);
        }