Пример #1
0
        private ModbusRequest SendWrite(ModbusPackage package, ModbusFunctions functionCode, bool isInternal)
        {
            ModbusRequest request = null;

            if (package.CountVariables > 0)
            {
                request            = new ModbusRequest();
                request.IsInternal = isInternal;
                request.MBAPHeader.TransactionId = GetTransactionId();
                request.MBAPHeader.Length        = 0;
                request.MBAPHeader.UnitId        = UnitId;
                request.PDU.FunctionCode         = functionCode;

                List <byte> pdu = new List <byte>();
                pdu.AddRange(BitConverter.GetBytes(Convert.ToUInt16(package.StartRegister)).Reverse());
                pdu.AddRange(BitConverter.GetBytes(Convert.ToUInt16(package.CountRegisters)).Reverse());

                switch (functionCode)
                {
                case ModbusFunctions.ForceSingleCoil:
                case ModbusFunctions.PresetSingleRegister:
                    request.MBAPHeader.Length = 6;
                    break;

                case ModbusFunctions.ForceMultipleCoils:
                case ModbusFunctions.PresetMultipleRegisters:
                    pdu.Add(Convert.ToByte(package.SizeInBytes));
                    pdu.AddRange(package.GetData());
                    request.MBAPHeader.Length = (ushort)(pdu.Count + 2);
                    break;
                }
                request.PDU.Data = pdu.ToArray();
            }
            return(request);
        }
Пример #2
0
        private void SEDevice_VariableValueChanged(IVariable variable)
        {
            ModbusPackage package = packages.FirstOrDefault(x => x.Contains(variable)).PackageVariable(variable);
            var           request = helper.SendPresetMultipleRegisters(package, false);

            request.PackageId = -1;
            if (!SendRequest(request))
            {
                lock (lockerRequestes)
                {
                    requestes.Remove(request);
                }
            }
        }
Пример #3
0
        private ModbusRequest SendRead(ModbusPackage package, ModbusFunctions functionCode, bool isInternal)
        {
            ModbusRequest request = null;

            if (package.CountVariables > 0)
            {
                request            = new ModbusRequest();
                request.IsInternal = isInternal;
                request.MBAPHeader.TransactionId = GetTransactionId();
                request.MBAPHeader.Length        = 6;
                request.MBAPHeader.UnitId        = UnitId;
                request.PDU.FunctionCode         = functionCode;
                request.PDU.Data = new byte[4];
                ConvertingToBytes(package.StartRegister, request.PDU.Data, 0);
                ConvertingToBytes(package.CountRegisters, request.PDU.Data, 2);
            }
            return(request);
        }
Пример #4
0
        public ModbusPackage[] PackagingVariables(IVariable[] variables)
        {
            List <ModbusPackage> packages       = new List <ModbusPackage>();
            ModbusPackage        currentPackage = new ModbusPackage();
            var sortedVariables = variables.OrderBy(x => (x.Address as ModbusAddress).StartIndex);

            foreach (var variable in sortedVariables)
            {
                if (!currentPackage.Add(variable))
                {
                    packages.Add(currentPackage);
                    currentPackage = new ModbusPackage();
                    currentPackage.Add(variable);
                }
            }
            if (currentPackage.CountVariables > 0)
            {
                packages.Add(currentPackage);
            }
            return(packages.ToArray());
        }
Пример #5
0
 public ModbusRequest SendPresetMultipleRegisters(ModbusPackage package, bool isInternal)
 {
     return(SendWrite(package, ModbusFunctions.PresetMultipleRegisters, isInternal));
 }
Пример #6
0
 public ModbusRequest SendForceMultipleCoils(ModbusPackage package, bool isInternal)
 {
     return(SendWrite(package, ModbusFunctions.ForceMultipleCoils, isInternal));
 }
Пример #7
0
 public ModbusRequest SendPresetSingleRegister(ModbusPackage package, bool isInternal)
 {
     throw new NotSupportedException("Данная функция 'PresetSingleRegister' не поддерживается этой версией приложения!");
 }
Пример #8
0
 public ModbusRequest SendForceSingleCoil(ModbusPackage package, bool isInternal)
 {
     throw new NotSupportedException("Данная функция 'ForceSingleCoil' не поддерживается этой версией приложения!");
 }
Пример #9
0
 public ModbusRequest SendReadInputRegisters(ModbusPackage package, bool isInternal)
 {
     return(SendRead(package, ModbusFunctions.ReadInputRegisters, isInternal));
 }
Пример #10
0
 public ModbusRequest SendReadInputStatus(ModbusPackage package, bool isInternal)
 {
     throw new NotSupportedException("Данная функция 'ReadInputStatus' не поддерживается этой версией приложения!");
 }