diff --git a/CyberSystem/ApiServer/ApiServer.csproj b/CyberSystem/ApiServer/ApiServer.csproj index c50afcc..9ecfb79 100644 --- a/CyberSystem/ApiServer/ApiServer.csproj +++ b/CyberSystem/ApiServer/ApiServer.csproj @@ -8,6 +8,7 @@ + diff --git a/CyberSystem/ApiServer/Controllers/StateController.cs b/CyberSystem/ApiServer/Controllers/StateController.cs index 8af7548..fcda4f0 100644 --- a/CyberSystem/ApiServer/Controllers/StateController.cs +++ b/CyberSystem/ApiServer/Controllers/StateController.cs @@ -11,5 +11,12 @@ namespace ApiServer.Controllers { return GetActualStateFromCom.CurrentState; } - } + + [HttpGet] + [Route("modbus")] + public bool GetActualState(int inputIndex) + { + return GetActualStateFromComWithModbus.CurrentState[inputIndex]; + } + } } diff --git a/CyberSystem/ApiServer/GetActualStateFromComWithModbus.cs b/CyberSystem/ApiServer/GetActualStateFromComWithModbus.cs new file mode 100644 index 0000000..99b00b6 --- /dev/null +++ b/CyberSystem/ApiServer/GetActualStateFromComWithModbus.cs @@ -0,0 +1,52 @@ +using Modbus.Device; +using System; +using System.Diagnostics.Metrics; +using System.IO.Ports; +using System.Threading; +using System.Threading.Tasks; + + +namespace ApiServer +{ + public class GetActualStateFromComWithModbus : IHostedService, IDisposable + { + public static bool[] CurrentState { get; set; } + + static SerialPort _serialPort; + static ModbusSerialMaster _serialMaster; + + static void DataReceivedHandler(object sender, SerialDataReceivedEventArgs e) + { + _serialMaster = ModbusSerialMaster.CreateRtu(_serialPort); + + byte slaveID = 1; + ushort startAddress = 0; + ushort numOfPoints = 2; + CurrentState = _serialMaster.ReadInputs(slaveID, startAddress, numOfPoints); + } + + public Task StartAsync(CancellationToken cancellationToken) + { + _serialPort = new SerialPort(); + _serialPort.PortName = "COM5"; + _serialPort.BaudRate = 9600; + _serialPort.DataBits = 8; + _serialPort.Parity = Parity.None; + _serialPort.StopBits = StopBits.One; + _serialPort.DataReceived += new SerialDataReceivedEventHandler(DataReceivedHandler); + _serialPort.Open(); + + return Task.CompletedTask; + } + + public Task StopAsync(CancellationToken cancellationToken) + { + return Task.CompletedTask; + } + + public void Dispose() + { + _serialPort.Dispose(); + } + } +} diff --git a/CyberSystem/ApiServer/Program.cs b/CyberSystem/ApiServer/Program.cs index 8d6f988..6647018 100644 --- a/CyberSystem/ApiServer/Program.cs +++ b/CyberSystem/ApiServer/Program.cs @@ -8,7 +8,8 @@ builder.Services.AddControllers(); // Learn more about configuring Swagger/OpenAPI at https://aka.ms/aspnetcore/swashbuckle builder.Services.AddEndpointsApiExplorer(); builder.Services.AddSwaggerGen(); -builder.Services.AddHostedService(); +//builder.Services.AddHostedService(); +builder.Services.AddHostedService(); var app = builder.Build(); diff --git a/CyberSystem/ModbusLearn/ModbusLearn.csproj b/CyberSystem/ModbusLearn/ModbusLearn.csproj index c946f88..9c8ead4 100644 --- a/CyberSystem/ModbusLearn/ModbusLearn.csproj +++ b/CyberSystem/ModbusLearn/ModbusLearn.csproj @@ -41,14 +41,8 @@ ..\packages\Microsoft.Win32.Registry.4.3.0\lib\net46\Microsoft.Win32.Registry.dll - - ..\packages\NModbus.3.0.81\lib\net46\NModbus.dll - - - ..\packages\NModbus.Serial.3.0.81\lib\net46\NModbus.Serial.dll - - - ..\packages\NModbus.SerialPortStream.3.0.81\lib\net46\NModbus.SerialPortStream.dll + + ..\packages\NModbus4.2.1.0\lib\net40\NModbus4.dll ..\packages\SerialPortStream.2.2.0\lib\net45\RJCP.SerialPortStream.dll diff --git a/CyberSystem/ModbusLearn/Program.cs b/CyberSystem/ModbusLearn/Program.cs index 23193d3..38b6c85 100644 --- a/CyberSystem/ModbusLearn/Program.cs +++ b/CyberSystem/ModbusLearn/Program.cs @@ -1,40 +1,57 @@ -using NModbus; -using NModbus.Extensions.Enron; -using NModbus.Serial; +using Modbus.Device; using System; using System.IO.Ports; namespace ModbusLearn { - internal class Program - { - static void Main(string[] args) - { - using (SerialPort port = new SerialPort("COM5")) - { - // configure serial port - port.BaudRate = 9600; - port.DataBits = 8; - port.Parity = Parity.None; - port.StopBits = StopBits.One; - port.Open(); + internal class Program + { + static void Main(string[] args) + { + SerialPort serialPort = new SerialPort(); + serialPort.PortName = "COM5"; + serialPort.BaudRate = 9600; + serialPort.DataBits = 8; + serialPort.Parity = Parity.None; + serialPort.StopBits = StopBits.One; + serialPort.Open(); + ModbusSerialMaster master = ModbusSerialMaster.CreateRtu(serialPort); - // Wrap the serial port - var adapter = new SerialPortAdapter(port); + byte slaveID = 1; + ushort startAddress = 0; + ushort numOfPoints = 5; + var data = master.ReadInputs(slaveID, startAddress, numOfPoints); + Console.WriteLine(data[0]); + Console.ReadKey(); - // Create the factory - var factory = new ModbusFactory(); - // Create Modbus Master - IModbusMaster master = factory.CreateRtuMaster(adapter); + //using (SerialPort port = new SerialPort("COM5")) + //{ + // // configure serial port + // port.BaudRate = 9600; + // port.DataBits = 8; + // port.Parity = Parity.None; + // port.StopBits = StopBits.One; + // port.Open(); - byte slaveId = 1; - ushort startAddress = 100; - ushort[] registers = new ushort[] { 1, 2, 3 }; + // // Wrap the serial port + // var adapter = new SerialPortAdapter(port); - // write three registers - master.WriteMultipleRegisters(slaveId, startAddress, registers); - } - } - } + // // Create the factory + // var factory = new ModbusFactory(); + + // // Create Modbus Master + // IModbusMaster master = factory.CreateRtuMaster(adapter); + + // byte slaveId = 1; + // ushort startAddress = 100; + // ushort[] registers = new ushort[] { 1, 2, 3 }; + + // // write three registers + // master.WriteMultipleRegisters(slaveId, startAddress, registers); + + // Console.ReadKey(); + //} + } + } } diff --git a/CyberSystem/ModbusLearn/packages.config b/CyberSystem/ModbusLearn/packages.config index 18beadf..1433123 100644 --- a/CyberSystem/ModbusLearn/packages.config +++ b/CyberSystem/ModbusLearn/packages.config @@ -4,9 +4,7 @@ - - - + diff --git a/sketch_apr29a/sketch_may6a/sketch_may6a.ino b/sketch_apr29a/sketch_may6a/sketch_may6a.ino new file mode 100644 index 0000000..baca216 --- /dev/null +++ b/sketch_apr29a/sketch_may6a/sketch_may6a.ino @@ -0,0 +1,31 @@ +# include + +const uint8_t coilPins[2] = {4, 5}; +const uint8_t discreteInputPins[2] = {2, 3}; + +ModbusRTUSlave modbus(Serial); + +bool coils[5]; +bool discreteInputs[5]; + +void setup() { + pinMode(coilPins[0], OUTPUT); + pinMode(coilPins[1], OUTPUT); + pinMode(discreteInputPins[0], INPUT); + pinMode(discreteInputPins[1], INPUT); + + modbus.configureCoils(coils, 5); + modbus.configureDiscreteInputs(discreteInputs, 5); + modbus.begin(1, 9600); +} + +void loop() { + discreteInputs[0] = digitalRead(discreteInputPins[0]); + discreteInputs[1] = digitalRead(discreteInputPins[1]); + //Serial.print(discreteInputs[0]); + + modbus.poll(); + + digitalWrite(coilPins[0], coils[0]); + digitalWrite(coilPins[1], coils[1]); +}