You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

274 lines
12 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Authorization;
using System;
using VOL.Core.Filters;
using VOL.Data.IServices.modbus;
using VOL.Data.Services.modbus;
using Microsoft.Extensions.DependencyInjection;
using VOL.WebApi.Utils;
using VOL.Entity.DomainModels;
using System.Collections.Generic;
using Microsoft.Extensions.Primitives;
using OfficeOpenXml.FormulaParsing.Excel.Functions.Math;
/// <summary>
// 尼可尼数据采集
/// <summary>
namespace VOL.WebApi.Controllers.Data
{
/// <summary>
/// 数据采集API类
/// </summary>
[Route("api/NKNCapture")]
[AllowAnonymous]
public class NKNCaptureController : Controller
{
private ModbusTcpService _service; // 静态字段
private readonly IHttpContextAccessor _httpContextAccessor;
private readonly IDataProcessing _dataService; // 业务处理
[ActivatorUtilitiesConstructor]
public NKNCaptureController(
IDataProcessing dataService,
IHttpContextAccessor httpContextAccessor
)
{
_dataService = dataService;
_httpContextAccessor = httpContextAccessor;
}
/// <summary>
/// 采集西门子设备
/// </summary>
/// <returns>IActionResult</returns>
[ApiTask]
[HttpGet, HttpPost, Route("gatherSiemens")]
public IActionResult gatherSiemens()
{
var headers = _httpContextAccessor.HttpContext.Request.Headers;
headers.TryGetValue("USER-DEVICE-ID", out StringValues deviceIdStr);
if (1 == 1) {
try
{
_service = new ModbusTcpService("192.168.1.99", 502);
Console.WriteLine("siemens modbus tcp connected...");
}
catch (Exception)
{
Console.WriteLine("siemens modbus tcp connect failed");
return Content("siemens modbus tcp connect failed!");
}
if (!_service.isConnected)
{
Console.WriteLine("siemens modbus tcp disconnect!");
return Content("siemens modbus tcp disconnect!");
}
}
// 切削倍率 17136 1
//_service.readData(1, 6435, "int16"); // 运行时长 分钟
//_service.readData(1, 6436, "int16"); // 工单1产量 件
//_service.readData(1, 6437, "int16"); // 工单2产量 件
//_service.readData(1, 6438, "int16"); // 工单3产量 件
//_service.readData(1, 6439, "int16"); // 当班产量 件
//_service.readData(1, 6440, "int16"); // 运行状态 0:待机 1运行 2故障
//_service.readData(1, 1315, "single"); // 工单1任务进度 %
//_service.readData(1, 1317, "single"); // 工单2任务进度 %
//_service.readData(1, 1319, "single"); // 工单3任务进度 %
//_service.readData(1, 1321, "single"); // 工单1良品率 % 真实值 *= 100
//_service.readData(1, 1323, "single"); // 工单2良品率 % 真实值 *= 100
//_service.readData(1, 1325, "single"); // 工单3良品率 % 真实值 *= 100
//_service.readData(1, 1339, "single"); // 设备综合效率 % 真实值 *= 100
//dynamic d1 = _service.readData(1, 1201, "single"); // 电机温度 ℃
//dynamic d2 = _service.readData(1, 1203, "single"); // 母线电压 V
//dynamic d3 = _service.readData(1, 1205, "single"); // 实际电流 A
//dynamic d4 = _service.readData(1, 1215, "single"); // 累计加工次数
//dynamic d5 = _service.readData(1, 1225, "single"); // 切削倍率
//dynamic d6 = _service.readData(1, 1231, "single"); // 主轴倍率
//dynamic d7 = _service.readData(1, 6689, "string", 50); // 运行程序编号 length = 8
//dynamic d8 = _service.readData(1, 6435, "int16"); // 累计运行时长 分钟
string message = "";
bool success = int.TryParse(deviceIdStr, out int deviceId);
try
{
if (success)
{
Dictionary<string, Dictionary<string, object>> dataMap = new();
if (1 == 1)
{
dataMap = _dataService.readSiemensData(_service);
}
else {
dataMap.Add("produce", new Dictionary<string, object>());
dataMap.Add("machine", new Dictionary<string, object>());
}
message = saveSourceData(dataMap, deviceId);
}
else
{
message = "设备非法或已下线";
}
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
message = "read data error: " + ex.Message;
}
finally
{
if (_service != null)
{
_service.disConnent();
}
}
return Content(message);
}
/// <summary>
/// 采集广数设备
/// </summary>
/// <returns>IActionResult</returns>
[ApiTask]
[HttpGet, HttpPost, Route("gatherGSK")]
public IActionResult gatherGSK()
{
var headers = _httpContextAccessor.HttpContext.Request.Headers;
headers.TryGetValue("USER-DEVICE-ID", out StringValues deviceIdStr);
if (1 == 1)
{
try
{
_service = new ModbusTcpService("192.168.1.100", 502);
Console.WriteLine("GSK modbus tcp connected...");
}
catch (Exception)
{
Console.WriteLine("GSK modbus tcp connect failed");
return Content("GSK modbus tcp connect failed!");
}
if (!_service.isConnected)
{
Console.WriteLine("GSK modbus tcp disconnect!");
return Content("GSK modbus tcp disconnect!");
}
}
//_service.readData(1, 6429, "int16"); // 程序编号
//_service.readData(1, 6435, "int16"); // 通讯状态 5通讯正常 15通讯断线
//_service.readData(1, 6430, "int16");
//_service.readData(1, 6435, "int16"); // 运行时长 分钟
//_service.readData(1, 6436, "int16"); // 工单1产量 件
//_service.readData(1, 6437, "int16"); // 工单2产量 件
//_service.readData(1, 6438, "int16"); // 工单3产量 件
//_service.readData(1, 6439, "int16"); // 当班产量 件
//_service.readData(1, 6440, "int16"); // 运行状态 0:待机 1运行 2故障
//_service.readData(1, 1315, "single"); // 工单1任务进度 %
//_service.readData(1, 1317, "single"); // 工单2任务进度 %
//_service.readData(1, 1319, "single"); // 工单3任务进度 %
//_service.readData(1, 1321, "single"); // 工单1良品率 % 真实值 *= 100
//_service.readData(1, 1323, "single"); // 工单2良品率 % 真实值 *= 100
//_service.readData(1, 1325, "single"); // 工单3良品率 % 真实值 *= 100
//_service.readData(1, 1331, "single"); // 设备综合效率 % 真实值 *= 100
//_service.readData(1, 6430, "int16"); // 通讯状态 5通讯正常 15通讯断线
//_service.readData(1, 6099, "int16"); // 工作方式 0:编辑 1:自动 2:MDI 3:DNC 4:手动 5:手轮 6:回参考点
//_service.readData(1, 6100, "int16"); // 运行状态 0:复位 1:停止 2:运行 3:暂停
//dynamic d1 = _service.readData(1, 4117, "int32"); // 当天加工数量 次
//dynamic d2 = _service.readData(1, 1201, "int32"); // 开机时间 秒
//dynamic d3 = _service.readData(1, 1203, "int32"); // 运行时间 秒
//dynamic d4 = _service.readData(1, 1241, "single"); // 进给倍率
//dynamic d5 = _service.readData(1, 1247, "single"); // 主轴倍率
//dynamic d6 = _service.readData(1, 6299, "string", 8); // 运行程序编号 length = 8
//dynamic d7 = _service.readData(1, 4115, "int32"); // 累计运行时长 分钟
//dynamic d8 = _service.readData(1, 1199, "int32"); // 累计加工数 次
string message = "";
bool success = int.TryParse(deviceIdStr, out int deviceId);
try
{
if (success)
{
Dictionary<string, Dictionary<string, object>> dataMap = new();
if (1 == 1)
{
dataMap = _dataService.readGSKData(_service);
}
else
{
dataMap.Add("produce", new Dictionary<string, object>());
dataMap.Add("machine", new Dictionary<string, object>());
}
message = saveSourceData(dataMap, deviceId);
}
else
{
message = "设备非法或已下线";
}
}
catch (Exception ex)
{
Console.WriteLine(ex.StackTrace);
message = "read data error: " + ex.Message;
}
finally
{
if (_service != null)
{
_service.disConnent();
}
}
return Content(message);
}
[HttpGet, HttpPost, Route("testSave")]
public IActionResult testSave()
{
Dictionary<string, Dictionary<string, object>> dataMap = new();
dataMap.Add("machine", new Dictionary<string, object>() { { "config_id", 666 } });
dataMap.Add("produce", new Dictionary<string, object>() { { "config_id", 666 } });
string message = saveSourceData(dataMap, 1);
return Content(message);
}
/// <summary>
/// 保存采集数据
/// </summary>
/// <returns>IActionResult</returns>
private string saveSourceData(Dictionary<string, Dictionary<string, object>> dataMap, int deviceId)
{
// 获取当前系统时间, 保证插入时间一致
DateTime now = DateTime.Now;
// 设备关联的用户信息
Data_Config dataConfig = _dataService.GetDataConfig(deviceId);
if (dataConfig == null) {
return "设备不存在!";
}
int userId = dataConfig.CreateID ?? 1; // 默认超管
Dictionary<string, object> machineData = dataMap["machine"];
Data_Machine data_Machine = CommonUtil.ConvertToObject<Data_Machine>(machineData);
data_Machine.config_id = deviceId;
data_Machine.CreateDate = now;
data_Machine.CreateID = userId;
bool result1 = _dataService.saveMachineData(data_Machine, out string message1);
Dictionary<string, object> produceData = dataMap["produce"];
Data_Produce data_Produce = CommonUtil.ConvertToObject<Data_Produce>(produceData);
data_Produce.config_id = deviceId;
data_Produce.CreateDate = now;
data_Produce.CreateID = userId;
bool result2 = _dataService.saveProduceData(data_Produce, out string message2);
return (result1 && result2) ? "OK" : "save machine: " + message1 + "; save produce: " + message2 + ";";
}
}
}