liuwf 1 year ago
commit 60cd3e4a69

@ -852,6 +852,9 @@
},
"D:\\Project\\gitea\\AUCMA\\SCADA\\Aucma.Core.PLc\\Aucma.Core.PLc.csproj": {
"projectPath": "D:\\Project\\gitea\\AUCMA\\SCADA\\Aucma.Core.PLc\\Aucma.Core.PLc.csproj"
},
"D:\\Project\\gitea\\AUCMA\\SCADA\\Aucma.Core.Scanner\\Aucma.Core.Scanner.csproj": {
"projectPath": "D:\\Project\\gitea\\AUCMA\\SCADA\\Aucma.Core.Scanner\\Aucma.Core.Scanner.csproj"
}
}
}

@ -4158,6 +4158,7 @@
"Admin.Core.Model": "1.0.0",
"Admin.Core.Service": "1.0.0",
"Aucma.Core.PLc": "1.0.0",
"Aucma.Core.Scanner": "1.0.0",
"Quartz": "3.3.3"
},
"compile": {

@ -1,6 +1,6 @@
{
"version": 2,
"dgSpecHash": "lpAdUZlNwICgoI0zWeab6lGK6byqEln8T/RCXWsmZhSAVbwyy2BWnrJmPSJkkkJ4x1Ma6659From8jGreg2RJA==",
"dgSpecHash": "uEPuLSS/sVT2PWbiKIvEEH0CSwxk2oZpc/IrO17Q6Rf9Pipii14coKMF91zQ8TRFgG3IsJy413J+wCgHBjUbmQ==",
"success": true,
"projectFilePath": "D:\\Project\\gitea\\AUCMA\\SCADA\\Admin.Core.Api\\Admin.Core.Api.csproj",
"expectedPackageFiles": [

@ -14,9 +14,11 @@ namespace Admin.Core.Common
private DESProvider()
{
}
//默认的初始化密钥
private static string key = "Microsoft";
#region 对称加密解密的密钥
/// <summary>
/// 对称加密解密的密钥
/// </summary>
@ -31,6 +33,9 @@ namespace Admin.Core.Common
key = value;
}
}
#endregion
#region 加密
/// <summary>
/// 采用DES算法对字符串加密
@ -105,6 +110,7 @@ namespace Admin.Core.Common
}
}
#endregion
#region 解密
public static string DecryptString(string decryptString, string key)
{
@ -168,6 +174,8 @@ namespace Admin.Core.Common
}
}
#endregion
#region 检查密钥或初始化向量的长度如果不是8的倍数或长度大于64则截取前8个元素
/// <summary>
/// 检查密钥或初始化向量的长度如果不是8的倍数或长度大于64则截取前8个元素
/// </summary>
@ -192,6 +200,8 @@ namespace Admin.Core.Common
return byteArray;
}
}
}
#endregion
}
}

@ -52,7 +52,16 @@ namespace Admin.Core.Model.Model_New
/// </summary>
[SugarColumn(ColumnName = "COMPLETE_AMOUNT")]
public int CompleteAmount { get; set; }
/// <summary>
/// 前板数量
/// </summary>
[SugarColumn(ColumnName = "FRONTPLATE_AMOUNT")]
public int FrontPlateAmount { get; set; }
/// <summary>
/// 后板数量
/// </summary>
[SugarColumn(ColumnName = "REARPANEL_AMOUNT")]
public int RearPanelAmount { get; set; }
/// <summary>
/// 开始时间
/// </summary>
@ -71,7 +80,7 @@ namespace Admin.Core.Model.Model_New
[SugarColumn(ColumnName = "CREATE_TIME")]
public DateTime CreateTime { get; set; }
/// <summary>
/// 是否执行中
/// 是否执行中:1-执行2-完成
/// </summary>
[SugarColumn(ColumnName = "IS_EXEC")]
public int IsExec { get; set; }

@ -81,8 +81,7 @@ namespace Admin.Core.RealTimeService
{
// 使用静态文件
app.UseStaticFiles();
app.AucmaTaskMildds(aucamTaskService);
app.AucmaTaskMildds(aucamTaskService);
}
#region 注册服务

@ -228,6 +228,5 @@ namespace Admin.Core.Tasks
return await Task.FromResult(item);
}
#endregion
}
}

@ -33,6 +33,7 @@ namespace Aucma.Core.BoxFoam.ViewModels
string storeCode = Appsettings.app("StoreInfo", "AfterStoreCode");//泡前库code
var baseSpaceInfolist = await _baseSpaceInfoServices.QueryAsync(d => d.StoreCode.Equals(storeCode));//仓库
if (baseSpaceInfolist == null) return;
foreach (var item in baseSpaceInfolist)
{

@ -42,6 +42,8 @@ namespace Aucma.Core.BoxFoam.ViewModels
string storeCode = Appsettings.app("StoreInfo", "BeforeStoreCode");//泡前库code
var baseSpaceInfolist = await _baseSpaceInfoServices.QueryAsync(d => d.StoreCode.Equals(storeCode));//仓库
if (baseSpaceInfolist == null) return;
Shapes.Clear();
foreach (var item in baseSpaceInfolist)
{

@ -32,6 +32,7 @@ namespace Aucma.Core.BoxFoam.ViewModels
int i = 1;
var list = await _boxLastShotRecordServices.QueryAsync();
if (list == null) return;
list.OrderByDescending(d => d.LastTime);
foreach (var item in list.Take(50))
{

@ -267,6 +267,7 @@ namespace Aucma.Core.BoxFoam.ViewModels
{
int total = 0;
var list = await _boxFoamDataServices.QueryAsync();
if (list == null) return;
foreach (var item in list)
{
if (item.BoxFixturestatus == 1) StatusColor.Add("Green");

@ -32,6 +32,7 @@ namespace Aucma.Core.BoxFoam.ViewModels
public async void InitData()
{
var task =await _boxFoamPlanServices.QueryAsync();
if (task == null) return;
task.OrderBy(d=>d.ObjId);
foreach (var item in task)
{

@ -28,9 +28,9 @@ namespace Aucma.Core.DoorFoam.ViewModels
_doorFoamRecordServices = App.ServiceProvider.GetService<IDoorFoamRecordServices>();
//var state = _doorFoamRecordServices.GetConnectionState();
StationName = "门体发泡";
MaterialName = "SC-AUCMA-农夫山泉SC 门体";
OrderNo = "8512365486";
BeginTime = DateTime.Now.ToString("yyyy-mm-dd HH:mm:ss");
//MaterialName = "";
//OrderNo = "";
//BeginTime = DateTime.Now.ToString("yyyy-mm-dd HH:mm:ss");
_=InitEveryDayMethodAsync();
}

@ -1,6 +1,9 @@

namespace Aucma.Core.PLc
{
/// <summary>
/// PLC
/// </summary>
public class PlcModel
{
/// <summary>
@ -10,7 +13,7 @@ namespace Aucma.Core.PLc
/// <summary>
/// 设备名称
/// </summary>
public string? EquipName { get; set; }
public string EquipName { get; set; }
/// <summary>
/// 设备IP
/// </summary>

@ -26,14 +26,14 @@
<SolidColorBrush x:Key="PrimaryHueDarkForegroundBrush" Color="#0288d1" />
<!--字体大小设置-->
<Style TargetType="TextBlock">
<Setter Property="FontSize" Value="16"/>
<!--<Setter Property="FontWeight" Value="Bold"/>-->
<Setter Property="FontFamily" Value="Microsoft YaHei"/>
</Style>
<!--<Style TargetType="TextBox">
<Setter Property="FontSize" Value="18"/>
<Setter Property="FontWeight" Value="Bold"/>
</Style>-->
<Setter Property="FontFamily" Value="Microsoft YaHei"/>
<!--<Setter Property="FontSize" Value="15" />-->
</Style>
<Style TargetType="{x:Type Window}">
<Setter Property="FontSize" Value="18" />
<Setter Property="FontFamily" Value="Microsoft YaHei"/>
</Style>
</ResourceDictionary>
</Application.Resources>
</Application>

@ -60,12 +60,12 @@
<Grid>
<StackPanel Grid.Row="1" Height="50" Orientation="Horizontal" Margin="5 0" HorizontalAlignment="Left">
<Button Content="实时监控" x:Name="FirstPage" Command="{Binding SwitchPagesCommand}" CommandParameter="{Binding Name,ElementName=FirstPage}" Margin="5 0" />
<Button Content="扫描记录" x:Name="RecordPage" Margin="5 0" Command="{Binding SwitchPagesCommand}" CommandParameter="{Binding Name,ElementName=RecordPage}" />
<Button Content="分垛库设置" x:Name="PalletizPage" Margin="5 0" Command="{Binding SwitchPagesCommand}" CommandParameter="{Binding Name,ElementName=PalletizPage}" />
<Button Content="键 盘" x:Name="TabTip" Margin="5 0" Command="{Binding FormControlCommand}" CommandParameter="{Binding Name,ElementName=TabTip}" />
<Button Content="最小化" x:Name="Minimized" Command="{Binding FormControlCommand}" CommandParameter="{Binding Name,ElementName=Minimized}" Width="100" Background="#FF9900" BorderBrush="#FF9900" Margin="0,0,10,0"/>
<Button Content="退 出" x:Name="Exit" Command="{Binding FormControlCommand}" CommandParameter="{Binding Name,ElementName=Exit}" Width="100" Background="#FF0033" BorderBrush="#FF0033" Margin="0,0,10,0"/>
<Button Content="实时监控" x:Name="FirstPage" FontSize="20" Height="40" Command="{Binding SwitchPagesCommand}" CommandParameter="{Binding Name,ElementName=FirstPage}" Margin="5 0" />
<Button Content="扫描记录" x:Name="RecordPage" FontSize="20" Height="40" Margin="5 0" Command="{Binding SwitchPagesCommand}" CommandParameter="{Binding Name,ElementName=RecordPage}" />
<Button Content="分垛库设置" x:Name="PalletizPage" FontSize="20" Height="40" Margin="5 0" Command="{Binding SwitchPagesCommand}" CommandParameter="{Binding Name,ElementName=PalletizPage}" />
<Button Content="键 盘" x:Name="TabTip" FontSize="20" Height="40" Margin="5 0" Command="{Binding FormControlCommand}" CommandParameter="{Binding Name,ElementName=TabTip}" />
<Button Content="最小化" x:Name="Minimized" FontSize="20" Height="40" Command="{Binding FormControlCommand}" CommandParameter="{Binding Name,ElementName=Minimized}" Width="100" Background="#FF9900" BorderBrush="#FF9900" Margin="0,0,10,0"/>
<Button Content="退 出" x:Name="Exit" FontSize="20" Height="40" Command="{Binding FormControlCommand}" CommandParameter="{Binding Name,ElementName=Exit}" Width="100" Background="#FF0033" BorderBrush="#FF0033" Margin="0,0,10,0"/>
</StackPanel>
<StackPanel Height="50" Orientation="Horizontal" HorizontalAlignment="Right">
<Border Width="30" Height="30" CornerRadius="15">

@ -48,8 +48,8 @@ namespace Aucma.Core.SheetMetal.ViewModels
{
_taskExecutionPlanInfoServices = App.ServiceProvider.GetService<IExecutePlanInfoServices>();
StationName = Appsettings.app("StoreInfo", "StationName");
Job_SheetMetalTask_Quartz.SmEverDayDelegateEvent += InitEveryDayMethod;
Job_SheetMetalTask_Quartz.SmTaskDelegateEvent += UpdatePlanSHow;//计划内容展示
Job_SheetMetalTask_Quartz.SmEverDayDelegateEvent += InitEveryDayMethod;
Job_SheetMetalTask_Quartz.SmTaskDelegateEvent += UpdatePlanSHow;//计划内容展示
WeakReferenceMessenger.Default.Register<string>(this, Recive);
Task.WaitAll(LoadData(), InitExecMethod());
@ -180,9 +180,11 @@ namespace Aucma.Core.SheetMetal.ViewModels
{
string productLineCode = Appsettings.app("StoreInfo", "ProductLineCode");
var list = await _taskExecutionPlanInfoServices.QueryAsync(d => d.ProductLineCode.Contains(productLineCode));
if (list == null) return;
var execList = list.OrderBy(d => d.ExecuteOrder);
int i = 1;
string planType = string.Empty;
foreach (var item in execList)
{
TaskExecModel task = new TaskExecModel();
@ -209,7 +211,7 @@ namespace Aucma.Core.SheetMetal.ViewModels
}
task.PlanType = planType;
task.TaskCode = item.TaskCode;
task.ExecuteStatus= item.ExecuteStatus;//执行状态
task.ExecuteStatus = item.ExecuteStatus;//执行状态
PlanInfoDataGrid.Add(task);
i++;

@ -1,4 +1,7 @@
using Admin.Core.Common;
using Admin.Core.IService;
using Admin.Core.Model;
using Admin.Core.Model.Model_New;
using Aucma.Core.PLc;
using log4net;
using System.Timers;
@ -6,18 +9,42 @@ using System.Timers;
namespace Aucma.Core.Tasks
{
/// <summary>
/// 钣金实时任务列表
/// 钣金任务列表
/// </summary>
public class AucamTaskService : IAucamTaskService
{
//private static readonly log4net.ILog log = LogManager.GetLogger(typeof(AucamTaskService));
System.Timers.Timer timer1 = new System.Timers.Timer(1000);
System.Timers.Timer timer2 = new System.Timers.Timer(1000);
System.Timers.Timer timer3 = new System.Timers.Timer(1000);
bool qFlay=true;
bool hFlay = true;
public Task AucamTaskAsync()
#region 钣金任务
/// <summary>
/// 实时任务信息-每日产量
/// </summary>
public delegate Task SmEverDayDelegate();
public static event SmEverDayDelegate SmEverDayDelegateEvent;
/// <summary>
/// 实时任务信息-展示
/// </summary>
public delegate Task SmShowDelegate(ExecutePlanInfo info);
public static event SmShowDelegate SmShowDelegateEvent;
#endregion
private static readonly log4net.ILog log = LogManager.GetLogger(typeof(AucamTaskService));
private readonly ISmTaskExecutionServices _smTaskExecutionServices;
private readonly ISMProductionCompletionRecordServices _smProductionCompletionRecordServices;
public AucamTaskService(ISmTaskExecutionServices smTaskExecutionServices, ISMProductionCompletionRecordServices smProductionCompletionRecordServices)
{
_smTaskExecutionServices= smTaskExecutionServices;
_smProductionCompletionRecordServices = smProductionCompletionRecordServices;
}
System.Timers.Timer timer1 = new System.Timers.Timer(2000);
System.Timers.Timer timer2 = new System.Timers.Timer(2000);
System.Timers.Timer timer3 = new System.Timers.Timer(2000);
bool qFlay=true;//前板标识
bool hFlay = true;//后板标识
public void AucamTaskAsync()
{
timer1.Elapsed += new System.Timers.ElapsedEventHandler(Run1); //到达时间的时候执行事件;
timer1.AutoReset = true;//设置是执行一次false还是一直执行(true)
@ -25,16 +52,18 @@ namespace Aucma.Core.Tasks
timer1.Start();//timer.Start()的内部原理还是设置timer.Enabled = true;
timer2.Elapsed += new System.Timers.ElapsedEventHandler(Run2); //到达时间的时候执行事件;
timer2.AutoReset = true;//设置是执行一次false还是一直执行(true)
timer2.Enabled = true;//需要调用 timer.Start()或者timer.Enabled = true来启动它
timer2.Start();//timer.Start()的内部原理还是设置timer.Enabled = true;
timer3.Elapsed += new System.Timers.ElapsedEventHandler(Run3); //到达时间的时候执行事件;
timer3.AutoReset = true;//设置是执行一次false还是一直执行(true)
timer3.Enabled = true;//需要调用 timer.Start()或者timer.Enabled = true来启动它
timer3.Start();//timer.Start()的内部原理还是设置timer.Enabled = true;
return Task.CompletedTask;
timer2.AutoReset = true;
timer2.Enabled = true;
timer2.Start();
timer3.Elapsed += new System.Timers.ElapsedEventHandler(RealTimeTask);
timer3.AutoReset = true;
timer3.Enabled = true;
timer3.Start();
}
#region 钣金——前板
/// <summary>
/// 钣金——前板
/// </summary>
@ -44,17 +73,50 @@ namespace Aucma.Core.Tasks
{
if (qFlay)
{
qFlay=false;
//执行存盘操作
//计划编号
//物料编号
//计划完成数
//计划下线数
//设备状态
//生产节拍
qFlay = true;
var obj = PlcHelper.melsecList.FirstOrDefault(d => d.EquipName.Equals("前板Plc"));
if (obj.plc.IsConnected)
{
var val = obj.plc.ReadInt16("M110");//任务结束信号存盘
if (val == 1)
{
SmTaskExecution smTask = _smTaskExecutionServices.FirstAsync(d=>d.IsExec==1).Result;
SMProductionCompletionRecord sm=new SMProductionCompletionRecord();
sm.SmPlanid = smTask.TaskCode;
sm.SmProductcode = smTask.MaterialCode;
sm.SmProductname = smTask.MaterialName;
sm.SmProductiontype = 0;
sm.SmProductivetime =DateTime.Now;
int result = _smProductionCompletionRecordServices.AddAsync(sm).Result;
if (result>0)
{
bool saveDb = obj.plc.WriteInt16("M111", "1");//存盘完成信号
if (saveDb)
{
Console.WriteLine("前板完成");
qFlay = true;
//刷新计划数、小时数据、型号统计数据
Console.WriteLine("执行刷新任务执行界面");
Console.WriteLine("执行每日刷新界面");
Console.WriteLine("执行型号刷新界面");
Console.WriteLine("执行实时任务刷新界面");
}
}
else
{
qFlay = true;
}
}
}
}
Console.WriteLine("前板");
}
#endregion
#region 钣金——后板
/// <summary>
/// 钣金——后板
/// </summary>
@ -64,27 +126,114 @@ namespace Aucma.Core.Tasks
{
if (hFlay)
{
hFlay = false;
//执行存盘操作
//计划编号
//物料编号
//计划完成数
//计划下线数
//设备状态
//生产节拍
hFlay = true;
var obj = PlcHelper.melsecList.FirstOrDefault(d => d.EquipName.Equals("后板Plc"));
if (obj.plc.IsConnected)
{
var val = obj.plc.ReadInt16("M101");//任务结束信号存盘
if (val == 1)
{
SmTaskExecution smTask = _smTaskExecutionServices.FirstAsync(d => d.IsExec == 1).Result;
SMProductionCompletionRecord sm = new SMProductionCompletionRecord();
sm.SmPlanid = smTask.TaskCode;
sm.SmProductcode = smTask.MaterialCode;
sm.SmProductname = smTask.MaterialName;
sm.SmProductiontype = 0;
sm.SmProductivetime = DateTime.Now;
int result = _smProductionCompletionRecordServices.AddAsync(sm).Result;
if (result > 0)
{
bool saveDb = obj.plc.WriteInt16("M102", "1");//存盘完成信号
if (saveDb)
{
Console.WriteLine("后板完成");
hFlay = true;
//刷新计划数、小时数据、型号统计数据
Console.WriteLine("执行刷新任务执行界面");
Console.WriteLine("执行每日刷新界面");
Console.WriteLine("执行型号刷新界面");
Console.WriteLine("执行实时任务刷新界面");
}
}
else
{
hFlay = true;
}
}
}
}
Console.WriteLine("后板");
}
#endregion
#region 钣金—实时任务列表
/// <summary>
/// 钣金—实时任务列表
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void Run3(object? sender, ElapsedEventArgs e)
private void RealTimeTask(object? sender, ElapsedEventArgs e)
{
var execTask = _smTaskExecutionServices.FirstAsync(d => d.IsExec == 0&&d.TaskSort==d.TaskSort).Result;
if (execTask.FrontPlateAmount == execTask.RearPanelAmount)
{
execTask.IsExec = 2;
execTask.CompleteAmount = execTask.FrontPlateAmount;
bool r= _smTaskExecutionServices.UpdateAsync(execTask).Result;
if (r)
{
var obj = _smTaskExecutionServices.QueryAsync(d => d.IsExec == 0).Result;
int maxId = obj.Max(d => d.TaskSort);
var task = obj.SingleOrDefault(d => d.IsExec == 0 && d.TaskSort == maxId);
if (task == null) return;
task.IsExec=1;
bool exec= _smTaskExecutionServices.UpdateAsync(task).Result;
//执行刷新任务执行界面
Console.WriteLine("执行刷新任务执行界面");
Console.WriteLine("执行每日刷新界面");
Console.WriteLine("执行型号刷新界面");
Console.WriteLine("执行实时任务刷新界面");
}
}
Console.WriteLine("实时任务列表");
}
#endregion
#region 实施当日产量和型号统计
public void Run()
{
//SmEverDayDelegateEvent?.Invoke();
}
#endregion
#region 实时计划显示
public void RealTimePlanRun()
{
var model = _taskExecutionServices.FirstAsync(d => d.ExecuteStatus == 2).Result;
SmShowDelegateEvent?.Invoke(model);
}
#endregion
#region 任务完成
public void CompleteRun()
{
var obj = PlcHelper.melsecList.FirstOrDefault(d => d.EquipName.Equals("后板Plc"));
if (obj == null) return;
var val = obj.plc.ReadInt32("M100");//任务结束信号存盘
if (val == 1)
{
//1、存储当日完成记录表、计算节拍信息
//2、更新界面计划执行、当日产量、型号统计、计划列表
//3、更新日志记录
//4、更新数据统计列表
}
}
#endregion
}
}

@ -14,68 +14,10 @@ using Admin.Core.Model;
/// </summary>
namespace Aucma.Core.Tasks
{
public class Job_SheetMetalTask
public class JobSheetMetalTask
{
#region 钣金任务
/// <summary>
/// 实时任务信息-每日产量
/// </summary>
public delegate Task SmEverDayDelegate();
public static event SmEverDayDelegate SmEverDayDelegateEvent;
/// <summary>
/// 实时任务信息-展示
/// </summary>
public delegate Task SmShowDelegate(ExecutePlanInfo info);
public static event SmShowDelegate SmShowDelegateEvent;
#endregion
private readonly ISmTaskExecutionServices _smTaskExecutionServices;
private readonly IExecutePlanInfoServices _taskExecutionServices;
public Job_SheetMetalTask(ISmTaskExecutionServices smTaskExecutionServices, IExecutePlanInfoServices taskExecutionServices)
{
_smTaskExecutionServices = smTaskExecutionServices;
_taskExecutionServices = taskExecutionServices;
}
public async Task Execute()
{
await ShowRun();
await CompleteRun();
}
#region 实施当日产量和型号统计
public Task Run()
{
SmEverDayDelegateEvent?.Invoke();
return Task.CompletedTask;
}
#endregion
#region 实时计划显示
public async Task ShowRun()
{
var model = await _taskExecutionServices.FirstAsync(d => d.ExecuteStatus == 2);
SmShowDelegateEvent?.Invoke(model);
}
#endregion
#region 任务完成
public Task CompleteRun()
{
var obj = PlcHelper.melsecList.FirstOrDefault(d => d.EquipName.Equals("后板Plc"));
var val = obj.plc.ReadInt32("M100");//任务结束信号存盘
if (val == 1)
{
//1、存储当日完成记录表、计算节拍信息
//2、更新界面计划执行、当日产量、型号统计、计划列表
//3、更新日志记录
//4、更新数据统计列表
}
return Task.CompletedTask;
}
#endregion
}
}

@ -3,6 +3,6 @@ namespace Aucma.Core.Tasks
{
public interface IAucamTaskService
{
Task AucamTaskAsync();
void AucamTaskAsync();
}
}

Loading…
Cancel
Save