/// <summary> /// Simple Modbus TCP slave example. /// </summary> public static void StartModbusTcpSlave() { byte slaveId = 1; int port = 502; IPAddress address = new IPAddress(new byte[] { 127, 0, 0, 1 }); // create and start the TCP slave TcpListener slaveTcpListener = new TcpListener(address, port); slaveTcpListener.Start(); ModbusSlave slave = ModbusTcpSlave.CreateTcp(slaveId, slaveTcpListener); slave.DataStore = DataStoreFactory.CreateDefaultDataStore(); slave.Listen(); // prevent the main thread from exiting Thread.Sleep(Timeout.Infinite); }
public ModbusTCPSlaveDevice(Project theProject) { mProject = theProject; // TODO: make ID and port properties and "start" object after fully initialized (register as needing "start" after config fully processed? add a method to all objects which gets called after object is fully config'ed? byte slaveID = 1; int port = 502; //IPAddress address = new IPAddress(new byte[] { 127, 0, 0, 1 }); // create and start the TCP slave TcpListener slaveTcpListener = new TcpListener(port); slaveTcpListener.Start(); mSlave = ModbusTcpSlave.CreateTcp(slaveID, slaveTcpListener); mSlave.DataStore = DataStoreFactory.CreateDefaultDataStore(); Thread slaveThread = new Thread(mSlave.Listen); slaveThread.Start(); theProject.globalModbusSlave = this; }
/// <summary> /// Simple Modbus serial RTU slave example. /// </summary> public static void StartModbusSerialRtuSlave() { using (SerialPort slavePort = new SerialPort("COM2")) { // configure serial port slavePort.BaudRate = 9600; slavePort.DataBits = 8; slavePort.Parity = Parity.None; slavePort.StopBits = StopBits.One; slavePort.Open(); byte unitId = 1; // create modbus slave ModbusSlave slave = ModbusSerialSlave.CreateRtu(unitId, slavePort); slave.DataStore = DataStoreFactory.CreateDefaultDataStore(); slave.Listen(); } }
/// <summary> /// Simple Modbus serial ASCII slave example. /// </summary> public static void StartModbusSerialAsciiSlave() { using (SerialPort slavePort = new SerialPort("COM2")) { // configure serial port slavePort.BaudRate = 9600; slavePort.DataBits = 8; slavePort.Parity = Parity.None; slavePort.StopBits = StopBits.One; slavePort.Open(); byte unitId = 1; var adapter = new SerialPortAdapter(slavePort); // create modbus slave ModbusSlave slave = ModbusSerialSlave.CreateAscii(unitId, adapter); slave.DataStore = DataStoreFactory.CreateDefaultDataStore(); slave.ListenAsync().GetAwaiter().GetResult(); } }
/// <summary> /// Simple Modbus TCP slave example. /// </summary> public void StartModbusTcpSlave() { byte slaveId = 1; int port = 502; IPAddress address = new IPAddress(new byte[] { 127, 0, 0, 1 }); // create and start the TCP slave TcpListener slaveTcpListener = new TcpListener(address, port); slaveTcpListener.Start(); ModbusSlave slave = ModbusTcpSlave.CreateTcp(slaveId, slaveTcpListener); slave.DataStore = DataStoreFactory.CreateDefaultDataStore(); slave.ListenAsync().GetAwaiter().GetResult(); }
/// <summary> /// This method creates a modbus slave on the desired port. /// </summary> /// <param name="commPort"> /// The name for the slave serial port /// </param> /// <param name="baudRate"> /// the serial port baud rate /// </param> /// <param name="dataStore"> /// The data store object used for registers /// </param> public void initialize(string commPort, int baudRate, out DataStore dataStore) { //configure Modbus Slave SerialPort slavePort = new SerialPort(commPort); slavePort.BaudRate = baudRate; slavePort.DataBits = 8; slavePort.Parity = Parity.None; slavePort.StopBits = StopBits.One; slavePort.Open(); byte slaveId = 1; //create slave on seperate thread ModbusSlave slave = ModbusSerialSlave.CreateRtu(slaveId, slavePort); slave.DataStore = DataStoreFactory.CreateDefaultDataStore(); dataStore = slave.DataStore; Thread slaveThread = new Thread(new ThreadStart(slave.Listen)); slaveThread.Start(); }
/// <summary> /// Simple Modbus TCP slave example. /// </summary> public static void StartModbusTcpSlave() { byte slaveId = 1; int port = 503; IPAddress address = new IPAddress(new byte[] { 127, 0, 0, 1 }); // create and start the TCP slave #pragma warning disable CS0618 // Тип или член устарел TcpListener slaveTcpListener = new TcpListener(port); #pragma warning restore CS0618 // Тип или член устарел slaveTcpListener.Start(); ModbusSlave slave = ModbusTcpSlave.CreateTcp(slaveId, slaveTcpListener); slave.DataStore = DataStoreFactory.CreateDefaultDataStore(); //slave.Transport.ReadTimeout = 3000; //slave.Transport.WriteTimeout = 3000; slave.Listen(); // prevent the main thread from exiting Thread.Sleep(Timeout.Infinite); }
/// <summary> /// Simple Modbus serial RTU slave example. /// </summary> public static void StartModbusSerialRtuSlave() { using (SerialPort slavePort = new SerialPort("COM2")) { // configure serial port slavePort.BaudRate = 9600; slavePort.DataBits = 8; slavePort.Parity = Parity.None; slavePort.StopBits = StopBits.One; slavePort.Open(); byte unitId = 1; // create modbus slave ModbusSlave slave = ModbusSerialSlave.CreateRtu(unitId, slavePort); slave.DataStore = DataStoreFactory.CreateDefaultDataStore(); slave.Listen(); slave.ModbusSlaveRequestReceived += (obj, args) => { Console.WriteLine("[MODBUS SLAVE] I HAVE it!!!"); }; } }
public static void Slave(string selectedPort, string selectedBaudRate, string selectedParity, string selectedDataBits, string selectedStopBits) { int baudRate = int.Parse(selectedBaudRate); int dataBits = int.Parse(selectedDataBits); using (SerialPort slavePort = new SerialPort(selectedPort)) { slavePort.BaudRate = baudRate; slavePort.DataBits = dataBits; SetParity(selectedParity, slavePort); SetStopBits(selectedStopBits, slavePort); slavePort.Open(); slave = ModbusSerialSlave.CreateRtu(1, slavePort); slave.DataStore = DataStoreFactory.CreateDefaultDataStore(); slave.DataStore.DataStoreWrittenTo += new EventHandler <DataStoreEventArgs>(Modbus_DataStoreWriteTo); SetDefaultValue(); slave.Listen(); } }
private void button4_Click(object sender, EventArgs e) { button3.Enabled = true; button4.Enabled = false; byte slaveID = (byte)numericUpDown3.Value; int port = (int)numericUpDown2.Value; IPAddress address = IPAddress.Parse(comboBox3.Text); //new IPAddress(new byte[] { 10, 36, 5, 217 }); // create and start the TCP slave slaveTcpListener = new TcpListener(address, port); slaveTcpListener.Start(); slaveTcpM = ModbusTcpSlave.CreateTcp(slaveID, slaveTcpListener); slaveTcpM.DataStore = DataStoreFactory.CreateDefaultDataStore(); slaveTcp = new Thread(slaveTcpM.Listen); slaveTcp.IsBackground = true; slaveTcp.Start(); // prevent the main thread from exiting //Thread.Sleep(Timeout.Infinite); }
/// <summary> /// runs the modbus server to interface with the plc /// </summary> protected override void HandleClientManagementThread() { byte slaveId = 1; // create and start the TCP slave PLC_Modbusserver = ModbusTcpSlave.CreateTcp(slaveId, PLCTCPListener); //coils, inputs, holdingRegisters, inputRegisters PLC_Modbusserver.DataStore = DataStoreFactory.CreateDefaultDataStore(0, 0, 256, 0); // PLC_Modbusserver.DataStore.SyncRoot.ToString(); PLC_Modbusserver.ModbusSlaveRequestReceived += new EventHandler <ModbusSlaveRequestEventArgs>(Server_Read_handler); PLC_Modbusserver.DataStore.DataStoreWrittenTo += new EventHandler <DataStoreEventArgs>(Server_Written_to_handler); PLC_Modbusserver.Listen(); //PLC_Modbusserver.ListenAsync().GetAwaiter().GetResult(); // prevent the main thread from exiting while (keep_modbus_server_alive) { Thread.Sleep(100); } }
void doStuff() { DataStore data52 = DataStoreFactory.CreateDefaultDataStore(); Dictionary <byte, DataStore> map = new Dictionary <byte, DataStore>(); byte unitID52 = 52; map.Add(unitID52, data52); string portname = ""; if (InvokeRequired) { this.Invoke((MethodInvoker) delegate() { portname = comboBox1.SelectedItem.ToString(); }); } using (SerialPort com = new SerialPort(portname, 9600, Parity.None, 8, StopBits.One)) { com.Open(); slave = ModbusSerialSlave.CreateRtu(map, com); //slave.stop = false; slave.Listen(); } }
internal ModbusSlave(byte unitId, ModbusTransport transport) : base(transport) { DataStore = DataStoreFactory.CreateDefaultDataStore(); UnitId = unitId; }
private void bt_slave() { BluetoothClient bt_client = null; string BtAdress = null; string BtName = null; try { bt_client = new BluetoothClient(); } catch { MessageBox.Show("Bluetooth модуль не подключен!"); return; } while (BtAdress == null) { foreach (BluetoothDeviceInfo device in bt_client.DiscoverDevices(10, true, false, false, false)) { Console.WriteLine(device.DeviceName); BtAdress = device.DeviceAddress.ToString(); BtName = device.DeviceName; } Thread.Sleep(1000); } label10.Text = BtName; // Создаем последовательный порт, используя стороннее приложение btcom.exe Process a = Process.Start(Environment.CurrentDirectory + "\\btcom.exe", "-b\"" + BtAdress + "\" -c -s1101"); a.WaitForExit(); // Поиск названия созданного порта const string Win32_SerialPort = "Win32_SerialPort"; SelectQuery q = new SelectQuery(Win32_SerialPort); ManagementObjectSearcher s = new ManagementObjectSearcher(q); object id = null; foreach (object cur in s.Get()) { ManagementObject mo = (ManagementObject)cur; id = mo.GetPropertyValue("DeviceID"); object pnpId = mo.GetPropertyValue("PNPDeviceID"); Console.WriteLine("DeviceID: {0} ", id); Console.WriteLine("PNPDeviceID: {0} ", pnpId); Console.WriteLine(""); } //id = "COM2"; if (id != null) { label11.BeginInvoke((MethodInvoker)(() => label11.Text = id.ToString())); int bd = 9600; comboBox5.BeginInvoke((MethodInvoker)(() => bd = int.Parse(comboBox5.SelectedItem.ToString()))); // Открываем последовательный порт btSerialPort = new SerialPort(id.ToString(), bd); try { //ModbusRtuMaster.OpenPort(btSerialPort); btSerialPort.Open(); byte unitId = (byte)numericUpDown1.Value; // create modbus slave ModbusSlave slave = ModbusSerialSlave.CreateRtu(unitId, btSerialPort); slave.DataStore = DataStoreFactory.CreateDefaultDataStore(); slave.ModbusSlaveRequestReceived += (obj, args) => { Console.WriteLine("[MODBUS SLAVE] I got it!!!"); }; Console.WriteLine("BT PORT IS OPEN!"); slave.Listen(); } catch { MessageBox.Show("Ошибка открытия порта!"); } } }
/// <summary> /// Initializes a new instance of the <see cref="ModbusSlave"/> class. /// </summary> public ModbusSlave(byte unitID, ModbusTransport transport) : base(transport) { _dataStore = DataStoreFactory.CreateDefaultDataStore(); _unitID = unitID; }
private static void Main(string[] args) { var builder = new ConfigurationBuilder() .SetBasePath(Directory.GetCurrentDirectory()) .AddJsonFile("settings.json"); Configuration = builder.Build(); var address = Configuration["address"]; Console.WriteLine($"Start Advantech Wise4012e Modbus simulation at {address}"); var slaveTcpListener = new TcpListener(IPAddress.Parse(address), 502); slaveTcpListener.Start(); byte SlaveID = 1; var slave = ModbusTcpSlave.CreateTcp(SlaveID, slaveTcpListener); slave.DataStore = DataStoreFactory.CreateDefaultDataStore(); slave.DataStore.DataStoreReadFrom += DataStore_DataStoreReadFrom; slave.DataStore.DataStoreWrittenTo += DataStore_DataStoreWrittenTo; slave.DataStore.HoldingRegisters[1] = (ushort)0; slave.DataStore.HoldingRegisters[2] = (ushort)0; slave.DataStore.CoilDiscretes[1] = false; slave.DataStore.CoilDiscretes[2] = false; slave.DataStore.CoilDiscretes[17] = false; slave.DataStore.CoilDiscretes[18] = false; var awaiter = slave.ListenAsync().GetAwaiter(); Console.WriteLine($"Slave {SlaveID} supports switch 1, switch 2, relay 17, relay 18, knob 40001, knob 40002"); while (true) { Console.WriteLine($"> {slave.DataStore.CoilDiscretes[1]} {slave.DataStore.CoilDiscretes[2]} {slave.DataStore.CoilDiscretes[17]} {slave.DataStore.CoilDiscretes[18]} {slave.DataStore.HoldingRegisters[1]:0000} {slave.DataStore.HoldingRegisters[2]:0000} - Write '1 [bit]' '2 [bit]' '17 [bit]' '18 [bit]' '40001 [int]' '40002 [int]' or Q to exit"); Console.Write("> "); var input = Console.ReadLine(); if (input.ToUpper() == "Q") { break; } var fields = input.Split(' '); switch (fields[0]) { case "1": slave.DataStore.CoilDiscretes[1] = Convert.ToBoolean(Convert.ToInt16(fields[1])); break; case "2": slave.DataStore.CoilDiscretes[2] = Convert.ToBoolean(Convert.ToInt16(fields[1])); break; case "17": slave.DataStore.CoilDiscretes[17] = Convert.ToBoolean(Convert.ToInt16(fields[1])); break; case "18": slave.DataStore.CoilDiscretes[18] = Convert.ToBoolean(Convert.ToInt16(fields[1])); break; case "40001": var value1 = Math.Abs(Convert.ToInt32(fields[1])); slave.DataStore.HoldingRegisters[1] = value1 > 4500 ? (ushort)4500 : (ushort)value1; break; case "40002": var value2 = Math.Abs(Convert.ToInt32(fields[1])); slave.DataStore.HoldingRegisters[2] = value2 > 4500 ? (ushort)4500 : (ushort)value2; break; } } }