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]; } }
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); }
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); }
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]; } }
public ModuleTwinProperties(int?publishInterval, ModuleConfig moduleConfig) { PublishInterval = publishInterval; SlaveConfigs = moduleConfig?.SlaveConfigs.ToDictionary(pair => pair.Key, pair => pair.Value.AsBase()); }
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); }