Пример #1
0
        protected override void EncodeWrite(byte[] request, string uid, string address, string value)
        {
            //uid
            request[0] = Convert.ToByte(uid);

            //Body
            //function code
            ModuleConfig.ParseEntity(address, false, out ushort address_int16, out request[m_dataBodyOffset], out byte entity_type);

            //address
            byte[] address_byte = BitConverter.GetBytes(IPAddress.HostToNetworkOrder((Int16)(address_int16)));
            request[m_dataBodyOffset + 1] = address_byte[0];
            request[m_dataBodyOffset + 2] = address_byte[1];
            //value
            UInt16 value_int = (UInt16)Convert.ToInt32(value);

            if (entity_type == '0' && value_int == 1)
            {
                request[m_dataBodyOffset + 3] = 0xFF;
                request[m_dataBodyOffset + 4] = 0x00;
            }
            else
            {
                byte[] val_byte = BitConverter.GetBytes(IPAddress.HostToNetworkOrder((Int16)value_int));
                request[m_dataBodyOffset + 3] = val_byte[0];
                request[m_dataBodyOffset + 4] = val_byte[1];
            }
            if (GetCRC(request, 6, out UInt16 crc))
            {
                byte[] crc_byte = BitConverter.GetBytes(crc);
                request[m_dataBodyOffset + 5] = crc_byte[0];
                request[m_dataBodyOffset + 6] = crc_byte[1];
            }
        }
Пример #2
0
        public static async Task <ModuleHandle> CreateHandleFromConfiguration(ModuleConfig config)
        {
            Modbus.Slaves.ModuleHandle moduleHandle = null;
            foreach (var config_pair in config.SlaveConfigs)
            {
                Console.WriteLine("Creating Modbus Handle");
                ModbusSlaveConfig slaveConfig = config_pair.Value;
                switch (slaveConfig.GetConnectionType())
                {
                case ModbusConstants.ConnectionType.ModbusTCP:
                {
                    Console.WriteLine("Type: TCP");
                    if (moduleHandle == null)
                    {
                        moduleHandle = new Modbus.Slaves.ModuleHandle();
                    }

                    ModbusSlaveSession slave = new ModbusTCPSlaveSession(slaveConfig);
                    await slave.InitSession();

                    moduleHandle.ModbusSessionList.Add(slave);
                    break;
                }

                case ModbusConstants.ConnectionType.ModbusRTU:
                {
                    Console.WriteLine("Type: RTU");
                    if (moduleHandle == null)
                    {
                        moduleHandle = new Modbus.Slaves.ModuleHandle();
                    }

                    ModbusSlaveSession slave = new ModbusRTUSlaveSession(slaveConfig);
                    await slave.InitSession();

                    moduleHandle.ModbusSessionList.Add(slave);
                    break;
                }

                case ModbusConstants.ConnectionType.ModbusASCII:
                {
                    Console.WriteLine("Type: ASCII (UNSUPPORTED)");
                    break;
                }

                case ModbusConstants.ConnectionType.Unknown:
                {
                    Console.WriteLine("Type: UNKNWON");
                    break;
                }
                }
            }
            return(moduleHandle);
        }
Пример #3
0
        public static async Task <ModuleHandle> CreateHandleFromConfiguration(ModuleConfig config)
        {
            Modbus.Slaves.ModuleHandle moduleHandle = null;
            foreach (var config_pair in config.SlaveConfigs)
            {
                ModbusSlaveConfig slaveConfig = config_pair.Value;
                switch (slaveConfig.GetConnectionType())
                {
                case ModbusConstants.ConnectionType.ModbusTCP:
                {
                    if (moduleHandle == null)
                    {
                        moduleHandle = new Modbus.Slaves.ModuleHandle();
                    }

                    ModbusSlaveSession slave = new ModbusTCPSlaveSession(slaveConfig);
                    await slave.InitSession();

                    moduleHandle.ModbusSessionList.Add(slave);
                    break;
                }

                case ModbusConstants.ConnectionType.ModbusRTU:
                {
                    if (moduleHandle == null)
                    {
                        moduleHandle = new Modbus.Slaves.ModuleHandle();
                    }

                    ModbusSlaveSession slave = new ModbusRTUSlaveSession(slaveConfig);
                    await slave.InitSession();

                    moduleHandle.ModbusSessionList.Add(slave);
                    break;
                }

                case ModbusConstants.ConnectionType.ModbusASCII:
                {
                    break;
                }

                case ModbusConstants.ConnectionType.Unknown:
                {
                    break;
                }
                }
            }
            return(moduleHandle);
        }
Пример #4
0
        protected override void EncodeWrite(byte[] request, string uid, string address, string value)
        {
            //MBAP
            //transaction id 2 bytes
            request[0] = 0;
            request[1] = 0;
            //protocol id 2 bytes
            request[2] = 0;
            request[3] = 0;
            //length
            byte[] len_byte = BitConverter.GetBytes(IPAddress.HostToNetworkOrder((Int16)6));
            request[4] = len_byte[0];
            request[5] = len_byte[1];
            //uid
            request[6] = Convert.ToByte(uid);

            //Body
            //function code
            ModuleConfig.ParseEntity(address, false, out ushort address_int16, out request[m_dataBodyOffset], out byte entity_type);

            //address
            byte[] address_byte = BitConverter.GetBytes(IPAddress.HostToNetworkOrder((Int16)(address_int16)));
            request[m_dataBodyOffset + 1] = address_byte[0];
            request[m_dataBodyOffset + 2] = address_byte[1];
            //value
            UInt16 value_int = (UInt16)Convert.ToInt32(value);

            if (entity_type == '0' && value_int == 1)
            {
                request[m_dataBodyOffset + 3] = 0xFF;
                request[m_dataBodyOffset + 4] = 0x00;
            }
            else
            {
                byte[] val_byte = BitConverter.GetBytes(IPAddress.HostToNetworkOrder((Int16)value_int));
                request[m_dataBodyOffset + 3] = val_byte[0];
                request[m_dataBodyOffset + 4] = val_byte[1];
            }
        }
Пример #5
0
 public ModuleTwinProperties(int?publishInterval, ModuleConfig moduleConfig)
 {
     PublishInterval = publishInterval;
     SlaveConfigs    = moduleConfig?.SlaveConfigs.ToDictionary(pair => pair.Key, pair => pair.Value.AsBase());
 }
Пример #6
0
        public static async Task <ModuleHandle> CreateHandleFromConfiguration(ModuleConfig config, ModbusSlaveSession.HandleResultDelegate resultHandler)
        {
            Modbus.Slaves.ModuleHandle moduleHandle = null;
            foreach (var config_pair in config.SlaveConfigs)
            {
                ModbusSlaveConfig slaveConfig = config_pair.Value;
                switch (slaveConfig.GetConnectionType())
                {
                case ModbusConstants.ConnectionType.ModbusTCP:
                {
                    if (moduleHandle == null)
                    {
                        moduleHandle = new Modbus.Slaves.ModuleHandle();
                    }
                    if (slaveConfig.TcpPort <= 0)
                    {
                        slaveConfig.TcpPort = ModbusConstants.DefaultTcpPort;
                    }
                    if (slaveConfig.RetryCount <= 0)
                    {
                        slaveConfig.RetryCount = ModbusConstants.DefaultRetryCount;
                    }
                    if (slaveConfig.RetryInterval <= 0)
                    {
                        slaveConfig.RetryInterval = ModbusConstants.DefaultRetryInterval;
                    }

                    ModbusSlaveSession slave = new ModbusTCPSlaveSession(slaveConfig, resultHandler);
                    await slave.InitSession();

                    moduleHandle.ModbusSessionList.Add(slave);
                    break;
                }

                case ModbusConstants.ConnectionType.ModbusRTU:
                {
                    if (moduleHandle == null)
                    {
                        moduleHandle = new Modbus.Slaves.ModuleHandle();
                    }
                    if (slaveConfig.RetryCount <= 0)
                    {
                        slaveConfig.RetryCount = ModbusConstants.DefaultRetryCount;
                    }
                    if (slaveConfig.RetryInterval <= 0)
                    {
                        slaveConfig.RetryInterval = ModbusConstants.DefaultRetryInterval;
                    }

                    ModbusSlaveSession slave = new ModbusRTUSlaveSession(slaveConfig, resultHandler);
                    await slave.InitSession();

                    moduleHandle.ModbusSessionList.Add(slave);
                    break;
                }

                case ModbusConstants.ConnectionType.ModbusASCII:
                {
                    break;
                }

                case ModbusConstants.ConnectionType.Unknown:
                {
                    break;
                }
                }
            }
            return(moduleHandle);
        }