From 7c23d96a9914c3e4186cf0283c7831f5d5025d3c Mon Sep 17 00:00:00 2001 From: Artyom Date: Mon, 15 Apr 2024 18:44:14 +0300 Subject: [PATCH 1/9] =?UTF-8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB=D0=B5?= =?UTF-8?q?=D0=BD=20=D0=BE=D1=82=D0=B2=D0=B5=D1=82=20=D0=BE=D1=82=20=D1=81?= =?UTF-8?q?=D0=B5=D1=80=D0=B2=D0=B5=D1=80=D0=B0=20=D0=B2=20=D0=B2=D0=B8?= =?UTF-8?q?=D0=B4=D0=B5=20=D1=81=D1=82=D1=80=D0=B0=D0=BD=D0=B8=D1=86.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- CyberSystem/CyberSystem/Server.cs | 21 ++++++++++++++++++--- 1 file changed, 18 insertions(+), 3 deletions(-) diff --git a/CyberSystem/CyberSystem/Server.cs b/CyberSystem/CyberSystem/Server.cs index 47ba87e..b858d85 100644 --- a/CyberSystem/CyberSystem/Server.cs +++ b/CyberSystem/CyberSystem/Server.cs @@ -36,9 +36,24 @@ public class Server // Обработка и отправка клиенту новых данных. // Отправка сообщения обратно клиенту. - //var serverMessage = "Hello, client!"; - //var messageBytes = Encoding.ASCII.GetBytes(serverMessage); - //clientSocket.Send(messageBytes); + + var serverMessage = string.Empty; + + if (clientMessage.Contains("GET /post")) + { + serverMessage = "HTTP/1.1 200 OK\r\nContent-Type: text/html; charset=UTF-8\r\n\r\nПример страницы

Привет, мир!

Страница с постами!

"; + } + else if (clientMessage.Contains("GET /admin")) + { + serverMessage = "HTTP/1.1 200 OK\r\nContent-Type: text/html; charset=UTF-8\r\n\r\nПример страницы

Привет, мир!

Страница администратора!

"; + } + else + { + serverMessage = "HTTP/1.1 200 OK\r\nContent-Type: text/html; charset=UTF-8\r\n\r\nПример страницы

Привет, мир!

Базовая страница!

"; + } + + var messageBytes = Encoding.UTF8.GetBytes(serverMessage); + clientSocket.Send(messageBytes); // Закрытие соединения. clientSocket.Shutdown(SocketShutdown.Both); From 468365e10a41b275ec493d3f6b5b6d48f73aea83 Mon Sep 17 00:00:00 2001 From: Artyom Date: Mon, 15 Apr 2024 18:55:54 +0300 Subject: [PATCH 2/9] =?UTF-8?q?=D0=98=D0=B7=D0=BC=D0=B5=D0=BD=D0=B5=D0=BD?= =?UTF-8?q?=D0=B0=20=D0=B2=D0=B5=D1=80=D1=81=D0=B8=D1=8F=20.NET=20Framewor?= =?UTF-8?q?k?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- CyberSystem/CyberSystem/App.config | 6 +++--- CyberSystem/CyberSystem/BerklySocketServer.csproj | 3 ++- CyberSystem/CyberSystem/Server.cs | 2 +- 3 files changed, 6 insertions(+), 5 deletions(-) diff --git a/CyberSystem/CyberSystem/App.config b/CyberSystem/CyberSystem/App.config index 193aecc..ecdcf8a 100644 --- a/CyberSystem/CyberSystem/App.config +++ b/CyberSystem/CyberSystem/App.config @@ -1,6 +1,6 @@ - + - + - \ No newline at end of file + diff --git a/CyberSystem/CyberSystem/BerklySocketServer.csproj b/CyberSystem/CyberSystem/BerklySocketServer.csproj index ad17448..cc3c335 100644 --- a/CyberSystem/CyberSystem/BerklySocketServer.csproj +++ b/CyberSystem/CyberSystem/BerklySocketServer.csproj @@ -8,10 +8,11 @@ Exe CyberSystem CyberSystem - v4.8 + v4.7.2 512 true true + AnyCPU diff --git a/CyberSystem/CyberSystem/Server.cs b/CyberSystem/CyberSystem/Server.cs index b858d85..72d0b00 100644 --- a/CyberSystem/CyberSystem/Server.cs +++ b/CyberSystem/CyberSystem/Server.cs @@ -54,7 +54,7 @@ public class Server var messageBytes = Encoding.UTF8.GetBytes(serverMessage); clientSocket.Send(messageBytes); - + // Закрытие соединения. clientSocket.Shutdown(SocketShutdown.Both); clientSocket.Close(); From e3201182450f46a28c0b6767a575c2030cf07c85 Mon Sep 17 00:00:00 2001 From: Artyom Date: Mon, 15 Apr 2024 19:31:53 +0300 Subject: [PATCH 3/9] =?UTF-8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB=D0=B5?= =?UTF-8?q?=D0=BD=20=D0=BF=D1=80=D0=BE=D0=B5=D0=BA=D1=82=20=D1=81=20Web=20?= =?UTF-8?q?API=20Server.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- CyberSystem/ApiServer/ApiServer.csproj | 14 +++++++++ .../ApiServer/Controllers/PostContoller.cs | 26 ++++++++++++++++ CyberSystem/ApiServer/Program.cs | 23 ++++++++++++++ .../ApiServer/Properties/launchSettings.json | 31 +++++++++++++++++++ .../ApiServer/appsettings.Development.json | 8 +++++ CyberSystem/ApiServer/appsettings.json | 9 ++++++ CyberSystem/CyberSystem.sln | 6 ++++ CyberSystem/CyberSystem/Server.cs | 2 +- 8 files changed, 118 insertions(+), 1 deletion(-) create mode 100644 CyberSystem/ApiServer/ApiServer.csproj create mode 100644 CyberSystem/ApiServer/Controllers/PostContoller.cs create mode 100644 CyberSystem/ApiServer/Program.cs create mode 100644 CyberSystem/ApiServer/Properties/launchSettings.json create mode 100644 CyberSystem/ApiServer/appsettings.Development.json create mode 100644 CyberSystem/ApiServer/appsettings.json diff --git a/CyberSystem/ApiServer/ApiServer.csproj b/CyberSystem/ApiServer/ApiServer.csproj new file mode 100644 index 0000000..8768216 --- /dev/null +++ b/CyberSystem/ApiServer/ApiServer.csproj @@ -0,0 +1,14 @@ + + + + net8.0 + enable + enable + + + + + + + + diff --git a/CyberSystem/ApiServer/Controllers/PostContoller.cs b/CyberSystem/ApiServer/Controllers/PostContoller.cs new file mode 100644 index 0000000..25b31a3 --- /dev/null +++ b/CyberSystem/ApiServer/Controllers/PostContoller.cs @@ -0,0 +1,26 @@ +using Microsoft.AspNetCore.Components; +using Microsoft.AspNetCore.Mvc; +using RouteAttribute = Microsoft.AspNetCore.Mvc.RouteAttribute; + + +namespace ApiServer.Controllers +{ + [ApiController] + [Route("api")] + public class PostContoller + { + [HttpGet] + [Route("post")] + public string GetUserPost() + { + return "Hello, user! Your post is best!"; + } + + [HttpGet] + [Route("adminpost")] + public string GetAdmin() + { + return "Hello, Admin! It's your POST!!!"; + } + } +} diff --git a/CyberSystem/ApiServer/Program.cs b/CyberSystem/ApiServer/Program.cs new file mode 100644 index 0000000..0b40fc1 --- /dev/null +++ b/CyberSystem/ApiServer/Program.cs @@ -0,0 +1,23 @@ +var builder = WebApplication.CreateBuilder(args); + +// Add services to the container. + +builder.Services.AddControllers(); +// Learn more about configuring Swagger/OpenAPI at https://aka.ms/aspnetcore/swashbuckle +builder.Services.AddEndpointsApiExplorer(); +//builder.Services.AddSwaggerGen(); + +var app = builder.Build(); + +// Configure the HTTP request pipeline. +if (app.Environment.IsDevelopment()) +{ + //app.UseSwagger(); + //app.UseSwaggerUI(); +} + +app.UseAuthorization(); + +app.MapControllers(); + +app.Run(); diff --git a/CyberSystem/ApiServer/Properties/launchSettings.json b/CyberSystem/ApiServer/Properties/launchSettings.json new file mode 100644 index 0000000..e1ba3c5 --- /dev/null +++ b/CyberSystem/ApiServer/Properties/launchSettings.json @@ -0,0 +1,31 @@ +{ + "$schema": "http://json.schemastore.org/launchsettings.json", + "iisSettings": { + "windowsAuthentication": false, + "anonymousAuthentication": true, + "iisExpress": { + "applicationUrl": "http://localhost:3819", + "sslPort": 0 + } + }, + "profiles": { + "http": { + "commandName": "Project", + "dotnetRunMessages": true, + "launchBrowser": true, + "launchUrl": "swagger", + "applicationUrl": "http://localhost:12345", + "environmentVariables": { + "ASPNETCORE_ENVIRONMENT": "Development" + } + }, + "IIS Express": { + "commandName": "IISExpress", + "launchBrowser": true, + "launchUrl": "swagger", + "environmentVariables": { + "ASPNETCORE_ENVIRONMENT": "Development" + } + } + } +} diff --git a/CyberSystem/ApiServer/appsettings.Development.json b/CyberSystem/ApiServer/appsettings.Development.json new file mode 100644 index 0000000..0c208ae --- /dev/null +++ b/CyberSystem/ApiServer/appsettings.Development.json @@ -0,0 +1,8 @@ +{ + "Logging": { + "LogLevel": { + "Default": "Information", + "Microsoft.AspNetCore": "Warning" + } + } +} diff --git a/CyberSystem/ApiServer/appsettings.json b/CyberSystem/ApiServer/appsettings.json new file mode 100644 index 0000000..10f68b8 --- /dev/null +++ b/CyberSystem/ApiServer/appsettings.json @@ -0,0 +1,9 @@ +{ + "Logging": { + "LogLevel": { + "Default": "Information", + "Microsoft.AspNetCore": "Warning" + } + }, + "AllowedHosts": "*" +} diff --git a/CyberSystem/CyberSystem.sln b/CyberSystem/CyberSystem.sln index 6d19b17..fce98b7 100644 --- a/CyberSystem/CyberSystem.sln +++ b/CyberSystem/CyberSystem.sln @@ -5,6 +5,8 @@ VisualStudioVersion = 17.9.34728.123 MinimumVisualStudioVersion = 10.0.40219.1 Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "BerklySocketServer", "CyberSystem\BerklySocketServer.csproj", "{732F06D2-F9CE-40A3-8281-48D7A41E0F79}" EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ApiServer", "ApiServer\ApiServer.csproj", "{7C72B3F0-8B39-4D48-8D9B-9A56046E5DA8}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -15,6 +17,10 @@ Global {732F06D2-F9CE-40A3-8281-48D7A41E0F79}.Debug|Any CPU.Build.0 = Debug|Any CPU {732F06D2-F9CE-40A3-8281-48D7A41E0F79}.Release|Any CPU.ActiveCfg = Release|Any CPU {732F06D2-F9CE-40A3-8281-48D7A41E0F79}.Release|Any CPU.Build.0 = Release|Any CPU + {7C72B3F0-8B39-4D48-8D9B-9A56046E5DA8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {7C72B3F0-8B39-4D48-8D9B-9A56046E5DA8}.Debug|Any CPU.Build.0 = Debug|Any CPU + {7C72B3F0-8B39-4D48-8D9B-9A56046E5DA8}.Release|Any CPU.ActiveCfg = Release|Any CPU + {7C72B3F0-8B39-4D48-8D9B-9A56046E5DA8}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE diff --git a/CyberSystem/CyberSystem/Server.cs b/CyberSystem/CyberSystem/Server.cs index 72d0b00..c6cb049 100644 --- a/CyberSystem/CyberSystem/Server.cs +++ b/CyberSystem/CyberSystem/Server.cs @@ -8,7 +8,7 @@ public class Server public static void Main() { // Настройка IP-адреса сервера и номера порта. - var serverAddress = IPAddress.Parse("127.0.0.7"); + var serverAddress = IPAddress.Parse("0.0.0.0"); var serverPort = 8000; // Создаем наш серверный сокет. From 3884b3f997ae22ae96b0d11487b0fd0fc1578fbf Mon Sep 17 00:00:00 2001 From: Artyom Date: Mon, 22 Apr 2024 19:53:03 +0300 Subject: [PATCH 4/9] =?UTF-8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB=D0=B5?= =?UTF-8?q?=D0=BD=D0=BE=20=D1=87=D1=82=D0=B5=D0=BD=D0=B8=D0=B5=20=D1=81=20?= =?UTF-8?q?Arduino=D1=8E=D1=8A.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- CyberSystem/ApiServer/ApiServer.csproj | 2 + .../ApiServer/Controllers/PostContoller.cs | 2 +- .../ApiServer/Controllers/StateController.cs | 15 ++++++ .../ApiServer/GetActualStateFromCom.cs | 48 +++++++++++++++++++ CyberSystem/ApiServer/Program.cs | 10 ++-- .../ApiServer/Properties/launchSettings.json | 2 +- project1/project1.ino | 20 ++++++++ 7 files changed, 94 insertions(+), 5 deletions(-) create mode 100644 CyberSystem/ApiServer/Controllers/StateController.cs create mode 100644 CyberSystem/ApiServer/GetActualStateFromCom.cs create mode 100644 project1/project1.ino diff --git a/CyberSystem/ApiServer/ApiServer.csproj b/CyberSystem/ApiServer/ApiServer.csproj index 8768216..c50afcc 100644 --- a/CyberSystem/ApiServer/ApiServer.csproj +++ b/CyberSystem/ApiServer/ApiServer.csproj @@ -9,6 +9,8 @@ + + diff --git a/CyberSystem/ApiServer/Controllers/PostContoller.cs b/CyberSystem/ApiServer/Controllers/PostContoller.cs index 25b31a3..d7a0ed5 100644 --- a/CyberSystem/ApiServer/Controllers/PostContoller.cs +++ b/CyberSystem/ApiServer/Controllers/PostContoller.cs @@ -17,7 +17,7 @@ namespace ApiServer.Controllers } [HttpGet] - [Route("adminpost")] + [Route("admin")] public string GetAdmin() { return "Hello, Admin! It's your POST!!!"; diff --git a/CyberSystem/ApiServer/Controllers/StateController.cs b/CyberSystem/ApiServer/Controllers/StateController.cs new file mode 100644 index 0000000..8af7548 --- /dev/null +++ b/CyberSystem/ApiServer/Controllers/StateController.cs @@ -0,0 +1,15 @@ +using Microsoft.AspNetCore.Mvc; + +namespace ApiServer.Controllers +{ + [ApiController] + [Route("api/state")] + public class StateContoller + { + [HttpGet] + public byte GetActualState() + { + return GetActualStateFromCom.CurrentState; + } + } +} diff --git a/CyberSystem/ApiServer/GetActualStateFromCom.cs b/CyberSystem/ApiServer/GetActualStateFromCom.cs new file mode 100644 index 0000000..de2274b --- /dev/null +++ b/CyberSystem/ApiServer/GetActualStateFromCom.cs @@ -0,0 +1,48 @@ +using System; +using System.IO.Ports; +using System.Threading; +using System.Threading.Tasks; + + +namespace ApiServer +{ + public class GetActualStateFromCom : IHostedService, IDisposable + { + public static byte CurrentState { get; set; } + + static SerialPort _serialPort; + + static void DataReceivedHandler(object sender, SerialDataReceivedEventArgs e) + { + SerialPort serialPort = (SerialPort)sender; + string receivedData = serialPort.ReadExisting(); + + Console.WriteLine("Полученные данные: " + receivedData); + CurrentState = Convert.ToByte(receivedData); + } + + public Task StartAsync(CancellationToken cancellationToken) + { + string portName = "COM3"; + int baudRate = 9600; + + _serialPort = new SerialPort(portName, baudRate); + _serialPort.DataReceived += new SerialDataReceivedEventHandler(DataReceivedHandler); + _serialPort.Open(); + + Console.WriteLine("Чтение данных с порта: " + portName); + + 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 0b40fc1..8d6f988 100644 --- a/CyberSystem/ApiServer/Program.cs +++ b/CyberSystem/ApiServer/Program.cs @@ -1,3 +1,5 @@ +using ApiServer; + var builder = WebApplication.CreateBuilder(args); // Add services to the container. @@ -5,15 +7,16 @@ var builder = WebApplication.CreateBuilder(args); builder.Services.AddControllers(); // Learn more about configuring Swagger/OpenAPI at https://aka.ms/aspnetcore/swashbuckle builder.Services.AddEndpointsApiExplorer(); -//builder.Services.AddSwaggerGen(); +builder.Services.AddSwaggerGen(); +builder.Services.AddHostedService(); var app = builder.Build(); // Configure the HTTP request pipeline. if (app.Environment.IsDevelopment()) { - //app.UseSwagger(); - //app.UseSwaggerUI(); + app.UseSwagger(); + app.UseSwaggerUI(); } app.UseAuthorization(); @@ -21,3 +24,4 @@ app.UseAuthorization(); app.MapControllers(); app.Run(); + diff --git a/CyberSystem/ApiServer/Properties/launchSettings.json b/CyberSystem/ApiServer/Properties/launchSettings.json index e1ba3c5..99277b1 100644 --- a/CyberSystem/ApiServer/Properties/launchSettings.json +++ b/CyberSystem/ApiServer/Properties/launchSettings.json @@ -14,7 +14,7 @@ "dotnetRunMessages": true, "launchBrowser": true, "launchUrl": "swagger", - "applicationUrl": "http://localhost:12345", + "applicationUrl": "http://localhost:12344", "environmentVariables": { "ASPNETCORE_ENVIRONMENT": "Development" } diff --git a/project1/project1.ino b/project1/project1.ino new file mode 100644 index 0000000..afb393a --- /dev/null +++ b/project1/project1.ino @@ -0,0 +1,20 @@ +const int digitalPin = 13; + +void setup() { + Serial.begin(9600); +} + +void loop() { + const int value = digitalRead(digitalPin); + + if (value == HIGH) + { + Serial.print(1); + } + else + { + Serial.print(0); + } + + delay(500); +} From 29b2991fc5e0d157f19e808a4666d1e294db019d Mon Sep 17 00:00:00 2001 From: Artyom Date: Mon, 29 Apr 2024 20:06:21 +0300 Subject: [PATCH 5/9] =?UTF-8?q?=D0=A0=D0=B5=D0=B0=D0=BB=D0=B8=D0=B7=D0=BE?= =?UTF-8?q?=D0=B2=D0=B0=D0=BD=20Slave=20=D0=BD=D0=B0=20Arduino=20=D1=81=20?= =?UTF-8?q?=D0=B8=D1=81=D0=BF=D0=BE=D0=BB=D1=8C=D0=B7=D0=BE=D0=B2=D0=B0?= =?UTF-8?q?=D0=BD=D0=B8=D0=B5=D0=BC=20Modbus.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sketch_apr29a/sketch_apr29a.ino | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) create mode 100644 sketch_apr29a/sketch_apr29a.ino diff --git a/sketch_apr29a/sketch_apr29a.ino b/sketch_apr29a/sketch_apr29a.ino new file mode 100644 index 0000000..f376a4a --- /dev/null +++ b/sketch_apr29a/sketch_apr29a.ino @@ -0,0 +1,18 @@ +#include +const int GPIOCoil = 0; + +bool coils[10]; +const int pinToRead = 2; + +ModbusSerial mb (Serial, 10); + +void setup() { + Serial.begin(9600); + pinMode(pinToRead, INPUT); + mb.addIsts(0); +} + +void loop() { + mb.setIsts(0 digitalRead(pinToRead)); + mb.task(); +} From 472932b54cc58d019f843639fa04490d503c1745 Mon Sep 17 00:00:00 2001 From: Artyom Date: Mon, 29 Apr 2024 20:07:27 +0300 Subject: [PATCH 6/9] =?UTF-8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB=D0=B5?= =?UTF-8?q?=D0=BD=20=D0=BF=D1=80=D0=BE=D0=B5=D0=BA=D1=82=20=D1=81=20=D0=B8?= =?UTF-8?q?=D1=81=D0=BF=D0=BE=D0=BB=D1=8C=D0=B7=D0=BE=D0=B2=D0=B0=D0=BD?= =?UTF-8?q?=D0=B8=D0=B5=D0=BC=20Modbus.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- CyberSystem/CyberSystem.sln | 8 +- CyberSystem/ModbusLearn/App.config | 6 + CyberSystem/ModbusLearn/ModbusLearn.csproj | 224 ++++++++++++++++++ CyberSystem/ModbusLearn/Program.cs | 40 ++++ .../ModbusLearn/Properties/AssemblyInfo.cs | 36 +++ CyberSystem/ModbusLearn/packages.config | 60 +++++ 6 files changed, 373 insertions(+), 1 deletion(-) create mode 100644 CyberSystem/ModbusLearn/App.config create mode 100644 CyberSystem/ModbusLearn/ModbusLearn.csproj create mode 100644 CyberSystem/ModbusLearn/Program.cs create mode 100644 CyberSystem/ModbusLearn/Properties/AssemblyInfo.cs create mode 100644 CyberSystem/ModbusLearn/packages.config diff --git a/CyberSystem/CyberSystem.sln b/CyberSystem/CyberSystem.sln index fce98b7..2ec6940 100644 --- a/CyberSystem/CyberSystem.sln +++ b/CyberSystem/CyberSystem.sln @@ -5,7 +5,9 @@ VisualStudioVersion = 17.9.34728.123 MinimumVisualStudioVersion = 10.0.40219.1 Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "BerklySocketServer", "CyberSystem\BerklySocketServer.csproj", "{732F06D2-F9CE-40A3-8281-48D7A41E0F79}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ApiServer", "ApiServer\ApiServer.csproj", "{7C72B3F0-8B39-4D48-8D9B-9A56046E5DA8}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ApiServer", "ApiServer\ApiServer.csproj", "{7C72B3F0-8B39-4D48-8D9B-9A56046E5DA8}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ModbusLearn", "ModbusLearn\ModbusLearn.csproj", "{40D2FA2B-4E68-47C8-881B-5733EC22CF47}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution @@ -21,6 +23,10 @@ Global {7C72B3F0-8B39-4D48-8D9B-9A56046E5DA8}.Debug|Any CPU.Build.0 = Debug|Any CPU {7C72B3F0-8B39-4D48-8D9B-9A56046E5DA8}.Release|Any CPU.ActiveCfg = Release|Any CPU {7C72B3F0-8B39-4D48-8D9B-9A56046E5DA8}.Release|Any CPU.Build.0 = Release|Any CPU + {40D2FA2B-4E68-47C8-881B-5733EC22CF47}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {40D2FA2B-4E68-47C8-881B-5733EC22CF47}.Debug|Any CPU.Build.0 = Debug|Any CPU + {40D2FA2B-4E68-47C8-881B-5733EC22CF47}.Release|Any CPU.ActiveCfg = Release|Any CPU + {40D2FA2B-4E68-47C8-881B-5733EC22CF47}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE diff --git a/CyberSystem/ModbusLearn/App.config b/CyberSystem/ModbusLearn/App.config new file mode 100644 index 0000000..193aecc --- /dev/null +++ b/CyberSystem/ModbusLearn/App.config @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/CyberSystem/ModbusLearn/ModbusLearn.csproj b/CyberSystem/ModbusLearn/ModbusLearn.csproj new file mode 100644 index 0000000..c946f88 --- /dev/null +++ b/CyberSystem/ModbusLearn/ModbusLearn.csproj @@ -0,0 +1,224 @@ + + + + + Debug + AnyCPU + {40D2FA2B-4E68-47C8-881B-5733EC22CF47} + Exe + ModbusLearn + ModbusLearn + v4.8 + 512 + true + true + + + AnyCPU + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + + + AnyCPU + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + + + + ..\packages\Microsoft.Win32.Primitives.4.0.1\lib\net46\Microsoft.Win32.Primitives.dll + True + True + + + ..\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\SerialPortStream.2.2.0\lib\net45\RJCP.SerialPortStream.dll + + + + ..\packages\System.AppContext.4.1.0\lib\net463\System.AppContext.dll + True + True + + + ..\packages\System.Collections.Specialized.4.3.0\lib\net46\System.Collections.Specialized.dll + True + True + + + + ..\packages\System.Console.4.0.0\lib\net46\System.Console.dll + True + True + + + + ..\packages\System.Diagnostics.DiagnosticSource.4.0.0\lib\net46\System.Diagnostics.DiagnosticSource.dll + + + ..\packages\System.Diagnostics.FileVersionInfo.4.3.0\lib\net46\System.Diagnostics.FileVersionInfo.dll + True + True + + + ..\packages\System.Diagnostics.TraceSource.4.3.0\lib\net46\System.Diagnostics.TraceSource.dll + True + True + + + ..\packages\System.Diagnostics.Tracing.4.1.0\lib\net462\System.Diagnostics.Tracing.dll + True + True + + + ..\packages\System.Globalization.Calendars.4.0.1\lib\net46\System.Globalization.Calendars.dll + True + True + + + ..\packages\System.IO.4.3.0\lib\net462\System.IO.dll + True + True + + + ..\packages\System.IO.Compression.4.1.0\lib\net46\System.IO.Compression.dll + True + True + + + + ..\packages\System.IO.Compression.ZipFile.4.0.1\lib\net46\System.IO.Compression.ZipFile.dll + True + True + + + ..\packages\System.IO.FileSystem.4.3.0\lib\net46\System.IO.FileSystem.dll + True + True + + + ..\packages\System.IO.FileSystem.Primitives.4.3.0\lib\net46\System.IO.FileSystem.Primitives.dll + True + True + + + ..\packages\System.Linq.4.1.0\lib\net463\System.Linq.dll + True + True + + + ..\packages\System.Linq.Expressions.4.1.0\lib\net463\System.Linq.Expressions.dll + True + True + + + ..\packages\System.Net.Http.4.1.0\lib\net46\System.Net.Http.dll + True + True + + + ..\packages\System.Net.Sockets.4.1.0\lib\net46\System.Net.Sockets.dll + True + True + + + + ..\packages\System.Reflection.4.1.0\lib\net462\System.Reflection.dll + True + True + + + ..\packages\System.Runtime.4.3.0\lib\net462\System.Runtime.dll + True + True + + + ..\packages\System.Runtime.Extensions.4.3.0\lib\net462\System.Runtime.Extensions.dll + True + True + + + ..\packages\System.Runtime.InteropServices.4.3.0\lib\net463\System.Runtime.InteropServices.dll + True + True + + + ..\packages\System.Runtime.InteropServices.RuntimeInformation.4.3.0\lib\net45\System.Runtime.InteropServices.RuntimeInformation.dll + True + True + + + ..\packages\System.Security.Cryptography.Algorithms.4.2.0\lib\net463\System.Security.Cryptography.Algorithms.dll + True + True + + + ..\packages\System.Security.Cryptography.Encoding.4.0.0\lib\net46\System.Security.Cryptography.Encoding.dll + True + True + + + ..\packages\System.Security.Cryptography.Primitives.4.0.0\lib\net46\System.Security.Cryptography.Primitives.dll + True + True + + + ..\packages\System.Security.Cryptography.X509Certificates.4.1.0\lib\net461\System.Security.Cryptography.X509Certificates.dll + True + True + + + ..\packages\System.Text.RegularExpressions.4.1.0\lib\net463\System.Text.RegularExpressions.dll + True + True + + + ..\packages\System.Threading.Overlapped.4.3.0\lib\net46\System.Threading.Overlapped.dll + True + True + + + ..\packages\System.Threading.Thread.4.3.0\lib\net46\System.Threading.Thread.dll + True + True + + + ..\packages\System.Threading.ThreadPool.4.3.0\lib\net46\System.Threading.ThreadPool.dll + True + True + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/CyberSystem/ModbusLearn/Program.cs b/CyberSystem/ModbusLearn/Program.cs new file mode 100644 index 0000000..23193d3 --- /dev/null +++ b/CyberSystem/ModbusLearn/Program.cs @@ -0,0 +1,40 @@ +using NModbus; +using NModbus.Extensions.Enron; +using NModbus.Serial; +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(); + + // Wrap the serial port + var adapter = new SerialPortAdapter(port); + + // 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); + } + } + } +} diff --git a/CyberSystem/ModbusLearn/Properties/AssemblyInfo.cs b/CyberSystem/ModbusLearn/Properties/AssemblyInfo.cs new file mode 100644 index 0000000..27503a4 --- /dev/null +++ b/CyberSystem/ModbusLearn/Properties/AssemblyInfo.cs @@ -0,0 +1,36 @@ +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("ModbusLearn")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("")] +[assembly: AssemblyProduct("ModbusLearn")] +[assembly: AssemblyCopyright("Copyright © 2024")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM components. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. +[assembly: ComVisible(false)] + +// The following GUID is for the ID of the typelib if this project is exposed to COM +[assembly: Guid("40d2fa2b-4e68-47c8-881b-5733ec22cf47")] + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// You can specify all the values or you can default the Build and Revision Numbers +// by using the '*' as shown below: +// [assembly: AssemblyVersion("1.0.*")] +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/CyberSystem/ModbusLearn/packages.config b/CyberSystem/ModbusLearn/packages.config new file mode 100644 index 0000000..18beadf --- /dev/null +++ b/CyberSystem/ModbusLearn/packages.config @@ -0,0 +1,60 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file From fdeeca4e799b5c55e5e362c063c2116db886ad38 Mon Sep 17 00:00:00 2001 From: Artyom Date: Mon, 6 May 2024 20:16:53 +0300 Subject: [PATCH 7/9] =?UTF-8?q?=D0=A0=D0=B5=D0=B0=D0=BB=D0=B8=D0=B7=D0=BE?= =?UTF-8?q?=D0=B2=D0=B0=D0=BD=D0=BE=20=D0=B2=D0=B7=D0=B0=D0=B8=D0=BC=D0=BE?= =?UTF-8?q?=D0=B4=D0=B5=D0=B9=D1=81=D1=82=D0=B2=D0=B8=D0=B5=20Master-Slave?= =?UTF-8?q?=20=D1=81=D0=B8=D1=81=D1=82=D0=B5=D0=BC=D1=8B=20=D1=87=D0=B5?= =?UTF-8?q?=D1=80=D0=B5=D0=B7=20Modbus.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- CyberSystem/ApiServer/ApiServer.csproj | 1 + .../ApiServer/Controllers/StateController.cs | 9 ++- .../GetActualStateFromComWithModbus.cs | 52 +++++++++++++ CyberSystem/ApiServer/Program.cs | 3 +- CyberSystem/ModbusLearn/ModbusLearn.csproj | 10 +-- CyberSystem/ModbusLearn/Program.cs | 75 ++++++++++++------- CyberSystem/ModbusLearn/packages.config | 4 +- sketch_apr29a/sketch_may6a/sketch_may6a.ino | 31 ++++++++ 8 files changed, 143 insertions(+), 42 deletions(-) create mode 100644 CyberSystem/ApiServer/GetActualStateFromComWithModbus.cs create mode 100644 sketch_apr29a/sketch_may6a/sketch_may6a.ino 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]); +} From 22aeb49964dde0dc31200d1b5ecd26f1d60ab7dd Mon Sep 17 00:00:00 2001 From: Artyom Date: Mon, 13 May 2024 18:39:07 +0300 Subject: [PATCH 8/9] =?UTF-8?q?=D0=94=D0=BE=D0=B4=D0=B5=D0=BB=D0=B0=D0=BD?= =?UTF-8?q?=D0=B0=20=D1=80=D0=B5=D0=B0=D0=BB=D0=B8=D0=B7=D0=B0=D1=86=D0=B8?= =?UTF-8?q?=D1=8F=20=D1=81=20Modbus.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ApiServer/Controllers/StateController.cs | 27 +++++++----- .../GetActualStateFromComWithModbus.cs | 43 ++++++------------- 2 files changed, 30 insertions(+), 40 deletions(-) diff --git a/CyberSystem/ApiServer/Controllers/StateController.cs b/CyberSystem/ApiServer/Controllers/StateController.cs index fcda4f0..7cf54ee 100644 --- a/CyberSystem/ApiServer/Controllers/StateController.cs +++ b/CyberSystem/ApiServer/Controllers/StateController.cs @@ -2,20 +2,25 @@ namespace ApiServer.Controllers { - [ApiController] - [Route("api/state")] - public class StateContoller - { - [HttpGet] - public byte GetActualState() - { - return GetActualStateFromCom.CurrentState; - } + [ApiController] + [Route("api/state")] + public class StateContoller + { + [HttpGet] + public byte GetActualState() + { + return GetActualStateFromCom.CurrentState; + } [HttpGet] - [Route("modbus")] - public bool GetActualState(int inputIndex) + [Route("modbus")] + public ActionResult GetActualState(int inputIndex) { + if (inputIndex > 1) + { + return new NotFoundResult(); + //throw new ArgumentOutOfRangeException(nameof(inputIndex), "Значение может быть от 0 до 1 включительно."); + } return GetActualStateFromComWithModbus.CurrentState[inputIndex]; } } diff --git a/CyberSystem/ApiServer/GetActualStateFromComWithModbus.cs b/CyberSystem/ApiServer/GetActualStateFromComWithModbus.cs index 99b00b6..9af4f41 100644 --- a/CyberSystem/ApiServer/GetActualStateFromComWithModbus.cs +++ b/CyberSystem/ApiServer/GetActualStateFromComWithModbus.cs @@ -1,31 +1,17 @@ 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 class GetActualStateFromComWithModbus : BackgroundService, IDisposable { public static bool[] CurrentState { get; set; } - static SerialPort _serialPort; - static ModbusSerialMaster _serialMaster; + private static SerialPort? _serialPort; + private 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) + protected override async Task ExecuteAsync(CancellationToken stoppingToken) { _serialPort = new SerialPort(); _serialPort.PortName = "COM5"; @@ -33,20 +19,19 @@ namespace ApiServer _serialPort.DataBits = 8; _serialPort.Parity = Parity.None; _serialPort.StopBits = StopBits.One; - _serialPort.DataReceived += new SerialDataReceivedEventHandler(DataReceivedHandler); _serialPort.Open(); - return Task.CompletedTask; - } + _serialMaster = ModbusSerialMaster.CreateRtu(_serialPort); + byte slaveID = 1; + ushort startAddress = 0; + ushort numOfPoints = 2; - public Task StopAsync(CancellationToken cancellationToken) - { - return Task.CompletedTask; - } - - public void Dispose() - { - _serialPort.Dispose(); + while (!stoppingToken.IsCancellationRequested) + { + CurrentState = _serialMaster.ReadInputs(slaveID, startAddress, numOfPoints); + await Task.Delay(100, stoppingToken); + } + await Task.CompletedTask; } } } From 718ac5621b08952f8614376f1d004cc0cc8db117 Mon Sep 17 00:00:00 2001 From: Artyom Date: Mon, 20 May 2024 19:57:01 +0300 Subject: [PATCH 9/9] =?UTF-8?q?=D0=A0=D0=B5=D0=B0=D0=BB=D0=B8=D0=B7=D0=BE?= =?UTF-8?q?=D0=B2=D0=B0=D0=BD=D0=BE=20=D0=B2=D0=B7=D0=B0=D0=B8=D0=BC=D0=BE?= =?UTF-8?q?=D0=B4=D0=B5=D0=B9=D1=81=D1=82=D0=B2=D0=B8=D0=B5=20=D1=81=D0=BE?= =?UTF-8?q?=20SCADA=20Fuxa?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ApiServer/Controllers/StateController.cs | 33 ++++++++++++------- .../ApiServer/Properties/launchSettings.json | 4 +-- CyberSystem/fuxa-project.json | 1 + 3 files changed, 24 insertions(+), 14 deletions(-) create mode 100644 CyberSystem/fuxa-project.json diff --git a/CyberSystem/ApiServer/Controllers/StateController.cs b/CyberSystem/ApiServer/Controllers/StateController.cs index 7cf54ee..6a4eafd 100644 --- a/CyberSystem/ApiServer/Controllers/StateController.cs +++ b/CyberSystem/ApiServer/Controllers/StateController.cs @@ -1,4 +1,5 @@ -using Microsoft.AspNetCore.Mvc; +using Microsoft.AspNetCore.Http.HttpResults; +using Microsoft.AspNetCore.Mvc; namespace ApiServer.Controllers { @@ -6,22 +7,30 @@ namespace ApiServer.Controllers [Route("api/state")] public class StateContoller { - [HttpGet] - public byte GetActualState() - { - return GetActualStateFromCom.CurrentState; - } + //[HttpGet] + //public byte GetActualState() + //{ + // return GetActualStateFromCom.CurrentState; + //} [HttpGet] [Route("modbus")] - public ActionResult GetActualState(int inputIndex) + [Produces("application/json")] + public JsonResult GetActualState() { - if (inputIndex > 1) - { - return new NotFoundResult(); + //if (inputIndex > 1) + //{ + //return new NotFoundResult(); //throw new ArgumentOutOfRangeException(nameof(inputIndex), "Значение может быть от 0 до 1 включительно."); - } - return GetActualStateFromComWithModbus.CurrentState[inputIndex]; + //} + var inputIndex = 1; + var result = GetActualStateFromComWithModbus.CurrentState[inputIndex] + ? 1 + : 0; + + var obj = new { CoilResult = result }; + + return new JsonResult(obj); } } } diff --git a/CyberSystem/ApiServer/Properties/launchSettings.json b/CyberSystem/ApiServer/Properties/launchSettings.json index 99277b1..3785afb 100644 --- a/CyberSystem/ApiServer/Properties/launchSettings.json +++ b/CyberSystem/ApiServer/Properties/launchSettings.json @@ -4,7 +4,7 @@ "windowsAuthentication": false, "anonymousAuthentication": true, "iisExpress": { - "applicationUrl": "http://localhost:3819", + "applicationUrl": "http://0.0.0.0:3819", "sslPort": 0 } }, @@ -14,7 +14,7 @@ "dotnetRunMessages": true, "launchBrowser": true, "launchUrl": "swagger", - "applicationUrl": "http://localhost:12344", + "applicationUrl": "http://0.0.0.0:12344", "environmentVariables": { "ASPNETCORE_ENVIRONMENT": "Development" } diff --git a/CyberSystem/fuxa-project.json b/CyberSystem/fuxa-project.json new file mode 100644 index 0000000..93c85a5 --- /dev/null +++ b/CyberSystem/fuxa-project.json @@ -0,0 +1 @@ +{"devices":{"0":{"id":"0","name":"FUXA Server","type":"FuxaServer","property":{},"enabled":true,"tags":{"t_f76a7b7e-ea8e4178":{"id":"t_f76a7b7e-ea8e4178","daq":{"restored":false,"enabled":false,"changed":false,"interval":60},"name":"Maser Connection Status","label":"Maser Connection Status","type":"number","memaddress":"d_cf82a6fa-17b24fab","sysType":1,"init":"","timestamp":1716223999827}},"polling":1000},"d_cf82a6fa-17b24fab":{"id":"d_cf82a6fa-17b24fab","property":{"address":"http://172.20.10.2:12344/api/state/modbus","port":null,"slot":null,"rack":null,"baudrate":9600,"databits":8,"stopbits":1,"parity":"None","method":"GET","format":"JSON"},"enabled":true,"tags":{"t_b5de94c1-5efd4df9":{"id":"t_b5de94c1-5efd4df9","daq":{"restored":false,"enabled":false,"changed":false,"interval":60},"name":"coilResult","label":"coilResult","type":"boolean","address":"coilResult","timestamp":1716223999840}},"name":"Master","type":"WebAPI","polling":1000}},"hmi":{"views":[{"id":"v_71057412b12-8119b","name":"MainView","profile":{"width":1024,"height":768,"bkcolor":"#ffffffff","margin":10},"items":{"HXT_94d610d6-0245443c":{"id":"HXT_94d610d6-0245443c","type":"svg-ext-html_switch","name":"switch_1","property":{"events":[],"actions":[],"variableId":"t_b5de94c1-5efd4df9","options":{"offValue":0,"onValue":1,"offBackground":"#ccc","onBackground":"#ccc","offText":"","onText":"","offSliderColor":"#fff","onSliderColor":"#0CC868","offTextColor":"#000","onTextColor":"#fff","fontSize":12,"fontFamily":"","radius":0,"height":22}},"label":"HtmlSwitch"}},"variables":{},"svgcontent":"\n \n \n \n \n Layer 1\n \n \n \n \n \n \n \n"}],"layout":{"autoresize":false,"start":"v_71057412b12-8119b","navigation":{"bkcolor":"#F4F5F7","fgcolor":"#1D1D1D","logo":false,"mode":"over","type":"block"},"header":{"bkcolor":"#ffffff","fgcolor":"#000000","fontSize":13,"itemsAnchor":"left"},"showdev":true,"inputdialog":"false","hidenavigation":false,"theme":"","loginonstart":false,"loginoverlaycolor":"none","show_connection_error":true}},"version":"1.00","server":{"id":"0","name":"FUXA Server","type":"FuxaServer","property":{}}} \ No newline at end of file