Compare commits

...

6 Commits

Author SHA1 Message Date
SoulStar 32b2acc58e Merge branch 'master' into dep_wangsr
# Conflicts:
#	SlnMesnac.Model/domain/AGVState.cs
#	SlnMesnac.Model/domain/AirportTask.cs
#	SlnMesnac.Quartz/QuartzSetUp.cs
#	SlnMesnac.Quartz/SlnMesnac.Quartz.csproj
#	SlnMesnac.Repository/service/IAirportTaskService.cs
#	SlnMesnac.Repository/service/Impl/AirportTaskServiceImpl.cs
#	SlnMesnac.WPF/MainWindow.xaml
#	SlnMesnac.WPF/appsettings.json
2 months ago
CaesarBao 63b59cca10 新增获取等待任务逻辑 2 months ago
wenjy d66333989c change - Index页面参数绑定 2 months ago
CaesarBao bd30cb1446 提交数据库 2 months ago
CaesarBao c2673fe083 新增任务查询业务 2 months ago
wenjy 4c4d214185 add - 监控界面 2 months ago

@ -1,4 +1,4 @@
<Project Sdk="Microsoft.NET.Sdk">
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>netstandard2.1</TargetFramework>

@ -0,0 +1,119 @@
using Microsoft.Extensions.Logging;
using SlnMesnac.Repository.service;
using System;
using System.Collections.Generic;
using SlnMesnac.Repository;
using SlnMesnac.Repository.service.Impl;
using TouchSocket.Sockets;
using SlnMesnac.Model.domain;
using SlnMesnac.TouchSocket;
using System.Timers;
namespace SlnMesnac.Business.@base
{
public class BaseTaskInfoBusiness
{
public Action<AirportTask> _Taskaction;
private static BaseTaskInfoBusiness instance;
private ILogger<BaseTaskInfoBusiness> _logger;
private IAirportTaskService _Taskservice;
private IAGVStateService _AGVStateService;
public BaseTaskInfoBusiness(ILogger<BaseTaskInfoBusiness> logger, IAirportTaskService Taskservice, IAGVStateService agvService)
{
_logger = logger;
_Taskservice = Taskservice;
_AGVStateService = agvService;
InitClearTimer();
}
public static BaseTaskInfoBusiness GetInstance(ILogger<BaseTaskInfoBusiness> logger, IAirportTaskService Taskservice, IAGVStateService agvService)
{
if (instance == null)
{
instance = new BaseTaskInfoBusiness(logger, Taskservice,agvService);
}
return instance;
}
private void InitClearTimer()
{
System.Timers.Timer timer = new System.Timers.Timer
{
Interval = 1000, // 每天执行一次
AutoReset = false,
};
timer.Elapsed += GetAGVTaskInfo;
timer.Start();
}
/// <summary>
/// 获取任务列表
/// </summary>
private void GetAGVTaskInfo(object source, ElapsedEventArgs e)
{
try
{
List<AirportTask> Task = _Taskservice.GetAGVTaskInfos();
if (Task.Count > 0 && Task != null)
{
foreach (var TaskItem in Task)
{
_logger.LogInformation($"获取任务信息列表");
//查询AGV设备状态及AMR设备状态
//这里要看AGV是否会立刻更新状态
List<AGVState> State = GetAgvState();
if (State != null && State.Count > 0)
{
foreach (var AgvItem in State)
{
//根据规则筛选最优AGV
if (AgvItem.agvworkstate == "任务空闲")
{
_logger.LogInformation($"获取空闲AGV列表");
//调用派发任务接口,向任务状态为任务空闲的AGV派发任务
AgvItem.taskno = TaskItem.taskno;
AgvItem.agvworkstate = "任务执行中";
AgvItem.refreshtime = DateTime.Now;
_AGVStateService.UpdateAsync(AgvItem);
//更新任务信息表状态为执行中
TaskItem.agvno = AgvItem.agvno;
TaskItem.taskstate = "执行中";
_Taskservice.UpdateAsync(TaskItem);
_Taskaction?.Invoke(TaskItem);
}
}
}
}
}
}
catch (Exception ex)
{
}
}
private List<AGVState> GetAgvState()
{
List<AGVState> State = null;
try
{
State = _AGVStateService.GetAgvState();
return State;
}
catch (Exception ex)
{
return State;
}
}
}
}

@ -33,7 +33,7 @@ namespace SlnMesnac.Generate.Templates.Service
{
public class IServiceCreate
{
private static readonly string templateDir = @"E:\桌面\SlnMesnac\SlnMesnac.Generate\Templates\Service\";
private static readonly string templateDir = @"F:\Mesnac\2023部门项目\机场AGV调度\HightWay_AirPot_WCS\SlnMesnac.Generate\Templates\Service\";
public bool Create(string tableName, string NameSpace, string outdir)
{

@ -6,7 +6,7 @@ using System.Text;
namespace ${NameSpace}.service
{
public interface I${tableName}Services: IBaseService<${tableName}>
public interface I${tableName}Service: IBaseService<${tableName}>
{
}

@ -33,7 +33,7 @@ namespace SlnMesnac.Generate.Templates.Service.Impl
{
public class ServiceCreate
{
private static readonly string templateDir = @"E:\桌面\SlnMesnac\SlnMesnac.Generate\Templates\Service\Impl\";
private static readonly string templateDir = @"F:\Mesnac\2023部门项目\机场AGV调度\HightWay_AirPot_WCS\SlnMesnac.Generate\Templates\Service\Impl\";
public bool Create(string tableName, string NameSpace, string outdir)
{

@ -1,45 +1,75 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using SqlSugar;
namespace SlnMesnac.Model.domain
namespace SlnMesnac.Repository
{
public class AGVState
///<summary>
///
///</summary>
[SugarTable("AGVState")]
public partial class AGVState
{
public AGVState(){
}
/// <summary>
/// 自增编号
/// Desc:
/// Default:
/// Nullable:False
/// </summary>
[SqlSugar.SugarColumn(IsPrimaryKey = true, IsIdentity = true)]
public int ID { get; set; }
[SugarColumn(IsPrimaryKey=true,IsIdentity=true,ColumnName="ID")]
public int id {get;set;}
/// <summary>
/// AGV编号
/// Desc:
/// Default:
/// Nullable:False
/// </summary>
public string AGVNo { get; set; }
[SugarColumn(ColumnName="AGVNo")]
public string agvno {get;set;}
/// <summary>
/// AGV类型
/// Desc:
/// Default:
/// Nullable:False
/// </summary>
public string AGVType { get; set; }
[SugarColumn(ColumnName="AGVType")]
public string agvtype {get;set;}
/// <summary>
/// 任务编号
/// Desc:
/// Default:
/// Nullable:False
/// </summary>
public string ?TaskNo { get; set; }
[SugarColumn(ColumnName="TaskNo")]
public string taskno {get;set;}
/// <summary>
/// AGV报警状态1正常2故障
/// Desc:
/// Default:
/// Nullable:False
/// </summary>
public string AGVAlarmState { get; set; }
[SugarColumn(ColumnName="AGVAlarmState")]
public string agvalarmstate {get;set;}
/// <summary>
/// AGV工作状态1空闲2忙碌
/// Desc:
/// Default:
/// Nullable:False
/// </summary>
public string AGVWorkState { get; set; }
[SugarColumn(ColumnName="AGVWorkState")]
public string agvworkstate {get;set;}
/// <summary>
/// 刷新时间
/// Desc:
/// Default:
/// Nullable:False
/// </summary>
public DateTime RefreshTime { get; set; }
[SugarColumn(ColumnName="RefreshTime")]
public DateTime refreshtime {get;set;}
}
}

@ -1,75 +1,123 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using SqlSugar;
namespace SlnMesnac.Model.domain
namespace SlnMesnac.Repository
{
public class AirportTask
///<summary>
///
///</summary>
[SugarTable("AirportTask")]
public partial class AirportTask
{
public AirportTask(){
}
/// <summary>
/// 自增ID
/// Desc:
/// Default:
/// Nullable:False
/// </summary>
[SqlSugar.SugarColumn(IsPrimaryKey = true, IsIdentity = true)]
public int ID { get; set; }
[SugarColumn(IsPrimaryKey=true,IsIdentity=true,ColumnName="ID")]
public int id {get;set;}
/// <summary>
/// 任务编号
/// Desc:
/// Default:
/// Nullable:False
/// </summary>
public string TaskNo { get; set; }
[SugarColumn(ColumnName="TaskNo")]
public string taskno {get;set;}
/// <summary>
/// 传送带编号
/// Desc:
/// Default:
/// Nullable:True
/// </summary>
public string ConveyorNo { get; set; }
[SugarColumn(ColumnName="ConveyorNo")]
public string conveyorno {get;set;}
/// <summary>
/// 航班编号
/// Desc:
/// Default:
/// Nullable:True
/// </summary>
public string FlightNo { get; set; }
[SugarColumn(ColumnName="FlightNo")]
public string flightno {get;set;}
/// <summary>
/// 机械臂编号
/// Desc:
/// Default:
/// Nullable:True
/// </summary>
public string ManipulatorNo { get; set; }
[SugarColumn(ColumnName="ManipulatorNo")]
public string manipulatorno {get;set;}
/// <summary>
/// 机械臂小车是否到位
/// Desc:
/// Default:
/// Nullable:True
/// </summary>
public string ManipulatorAGVIsArrive { get; set; }
[SugarColumn(ColumnName="ManipulatorAGVIsArrive")]
public string manipulatoragvisarrive {get;set;}
/// <summary>
/// 运载小车编号
/// Desc:
/// Default:
/// Nullable:True
/// </summary>
public string AGVNo { get; set; }
[SugarColumn(ColumnName="AGVNo")]
public string agvno {get;set;}
/// <summary>
/// 运载小车是否到位
/// Desc:
/// Default:
/// Nullable:True
/// </summary>
public string AGVIsArrive { get; set; }
[SugarColumn(ColumnName="AGVIsArrive")]
public string agvisarrive {get;set;}
/// <summary>
/// 总行李框数量
/// Desc:
/// Default:
/// Nullable:True
/// </summary>
public int TotalCount { get; set; }
[SugarColumn(ColumnName="TotalCount")]
public int? totalcount {get;set;}
/// <summary>
/// 装载行李框数量
/// Desc:
/// Default:
/// Nullable:True
/// </summary>
public int LoadCount { get; set; }
[SugarColumn(ColumnName="LoadCount")]
public int? loadcount {get;set;}
/// <summary>
/// 任务状态
/// Desc:
/// Default:
/// Nullable:True
/// </summary>
public string TaskState { get; set; }
[SugarColumn(ColumnName="TaskState")]
public string taskstate {get;set;}
/// <summary>
/// 起始时间
/// Desc:
/// Default:
/// Nullable:True
/// </summary>
public DateTime StartTime { get; set; }
[SugarColumn(ColumnName="StartTime")]
public DateTime? starttime {get;set;}
/// <summary>
/// 结束时间
/// Desc:
/// Default:
/// Nullable:True
/// </summary>
public DateTime ?FinishTime { get; set; }
[SugarColumn(ColumnName="FinishTime")]
public DateTime? finishtime {get;set;}
}
}

@ -0,0 +1,27 @@
using Microsoft.Extensions.Logging;
using Quartz;
using System;
using System.Threading.Tasks;
namespace SlnMesnac.Quartz.Job
{
/// <summary>
/// 定时获取设备状态
/// </summary>
public class GetAgvState_Job : IJob
{
private readonly ILogger<GetAgvState_Job> _logger;
public GetAgvState_Job(ILogger<GetAgvState_Job> logger)
{
_logger = logger;
}
public Task Execute(IJobExecutionContext context)
{
_logger.LogInformation($"获取AGV状态{DateTime.Now.ToString("HH:mm:ss")}");
return Task.CompletedTask;
}
}
}

@ -0,0 +1,43 @@
using System;
using System.Collections.Generic;
using System.Threading.Tasks;
using Microsoft.Extensions.Logging;
using Quartz;
using SlnMesnac.Business.@base;
using SlnMesnac.Repository;
using SlnMesnac.Repository.service;
namespace SlnMesnac.Quartz.Job
{
public class GetTaskInfo_Job : IJob
{
private readonly ILogger<GetTaskInfo_Job> _logger;
private IAirportTaskService _service;
private BaseTaskInfoBusiness _taskInfoBusiness;
public GetTaskInfo_Job(ILogger<GetTaskInfo_Job> logger, IAirportTaskService service)
{
_logger = logger;
_service = service;
}
public Task Execute(IJobExecutionContext context)
{
return Task.CompletedTask;
}
/// <summary>
/// 获取任务列表
/// </summary>
private void GetAGVTaskInfo()
{
try
{
List<AirportTask> Task = _service.GetTaskInfos();
}
catch (Exception ex)
{
}
}
}
}

@ -45,7 +45,7 @@ namespace SlnMesnac.Quartz.Job
public Task Execute(IJobExecutionContext context)
{
_logger.LogInformation($"执行MyJob{DateTime.Now.ToString("HH:mm:ss")}");
_logger.LogInformation($"获取机械臂状态{DateTime.Now.ToString("HH:mm:ss")}");
return Task.CompletedTask;
}
}

@ -11,6 +11,7 @@
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\SlnMesnac.Business\SlnMesnac.Business.csproj" />
<ProjectReference Include="..\SlnMesnac.Repository\SlnMesnac.Repository.csproj" />
</ItemGroup>

@ -0,0 +1,26 @@
using SlnMesnac.Model.domain;
using SlnMesnac.Repository.service.@base;
using System;
using System.Collections.Generic;
using System.Text;
using System.Threading.Tasks;
namespace SlnMesnac.Repository.service
{
public interface IAGVStateService: IBaseService<AGVState>
{
/// <summary>
/// 查询AGV状态
/// </summary>
/// <returns></returns>
List<AGVState> GetAgvState();
/// <summary>
/// 更新AGV设备状态信息
/// </summary>
/// <param name="record"></param>
/// <returns></returns>
Task<bool> UpdateAsync(AGVState record);
}
}

@ -1,17 +1,30 @@
using SlnMesnac.Model.domain;
using SlnMesnac.Model.domain;
using SlnMesnac.Repository.service.@base;
using System;
using System.Collections.Generic;
using System.Text;
using System.Threading.Tasks;
namespace SlnMesnac.Repository.service
{
public interface IAirportTaskService : IBaseService<AirportTask>
{
/// <summary>
/// 建库
/// <EFBFBD><EFBFBD>ȡվ̨<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>б<EFBFBD>
/// </summary>
/// <returns>是否成功</returns>
bool CreateDataBase();
/// <returns></returns>
List<AirportTask> GetTaskInfos();
/// <summary>
/// <20><>ȡ<EFBFBD><C8A1>ִ<EFBFBD><D6B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>б<EFBFBD>
/// </summary>
/// <returns></returns>
List<AirportTask> GetAGVTaskInfos();
/// <summary>
/// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>б<EFBFBD>
/// </summary>
/// <param name="record"></param>
/// <returns></returns>
Task<bool> UpdateAsync(AirportTask record);
}
}

@ -0,0 +1,42 @@
using Microsoft.Extensions.Logging;
using SlnMesnac.Common;
using SlnMesnac.Model.domain;
using SlnMesnac.Repository.service.@base;
using System;
using System.Collections.Generic;
using System.Linq.Expressions;
using System.Threading.Tasks;
namespace SlnMesnac.Repository.service.Impl
{
public class AGVStateServiceImpl : BaseServiceImpl<AGVState>, IAGVStateService
{
private ILogger<AGVStateServiceImpl> _logger;
public AGVStateServiceImpl(Repository<AGVState> repository, ILogger<AGVStateServiceImpl> logger) :base(repository)
{
_logger = logger;
}
public List<AGVState> GetAgvState()
{
List<AGVState> agvStateInfoList = null;
try
{
Expression<Func<AGVState, bool>> exp = x => true;
exp = exp.And(x => x.agvno != "" && (x.taskno == null || x.taskno == "") && x.agvworkstate == "任务空闲");
agvStateInfoList = base._rep.GetList(exp);
}
catch (Exception ex)
{
_logger.LogError($"通过物料类型获取物料信息异常:{ex.Message}");
}
return agvStateInfoList;
}
public async Task<bool> UpdateAsync(AGVState record)
{
bool result = await _rep.UpdateAsync(record);
return result;
}
}
}

@ -1,41 +1,90 @@
using Microsoft.Extensions.Logging;
using SlnMesnac.Model.domain;
using SlnMesnac.Repository.service.@base;
using SlnMesnac.Common;
using System;
using System.Collections.Generic;
using System.Linq.Expressions;
using System.Text;
using SlnMesnac.Repository.service.@base;
using System.Threading.Tasks;
#region << 版 本 注 释 >>
/*--------------------------------------------------------------------
* (c) 2024 WenJY
* CLR4.0.30319.42000
* LAPTOP-E0N2L34V
* SlnMesnac.Repository.service.Impl
* 496f8d2b-70e3-4a05-ae18-a9b0fcd06b82
*
* WenJY
* wenjy@mesnac.com
* 2024-03-27 21:58:35
* V1.0.0
*
*
*--------------------------------------------------------------------
*
*
*
*
* V1.0.0
*--------------------------------------------------------------------*/
#endregion << 版 本 注 释 >>
namespace SlnMesnac.Repository.service.Impl
{
public class AirportTaskServiceImpl : BaseServiceImpl<AirportTask>, IAirportTaskService
{
private ILogger<AirportTask> _logger;
private ILogger<AirportTaskServiceImpl> _logger;
public AirportTaskServiceImpl(Repository<AirportTask> repository, ILogger<AirportTask> logger) : base(repository)
public AirportTaskServiceImpl(Repository<AirportTask> repository, ILogger<AirportTaskServiceImpl> logger):base(repository)
{
_logger = logger;
}
public bool CreateDataBase()
/// <summary>
/// 获取所有的任务信息
/// </summary>
/// <returns></returns>
public List<AirportTask> GetTaskInfos()
{
List<AirportTask> taskInfos = null;
try
{
String sql = "SELECT ConveyorNo,TaskNo,FlightNo,AGVNo,MAX(StartTime) as StartTime,TaskState, TotalCount ,LoadCount FROM AirportTask group by ConveyorNo ";
taskInfos = base._rep.AsTenant().GetConnection("AGV").Ado.SqlQuery<AirportTask>(sql);
}
catch (Exception ex)
{
_logger.LogError($"获取任务信息异常:{ex.Message}");
}
return taskInfos;
}
/// <summary>
/// 获取AGV任务信息
/// </summary>
/// <returns></returns>
public List<AirportTask> GetAGVTaskInfos()
{
List<AirportTask> taskInfos = null;
try
{
_rep.AsSugarClient().DbMaintenance.CreateDatabase();
_rep.AsSugarClient().CodeFirst.InitTables<AirportTask>();
_rep.AsSugarClient().CodeFirst.InitTables<AGVLog>();
_rep.AsSugarClient().CodeFirst.InitTables<AGVSetting>();
_rep.AsSugarClient().CodeFirst.InitTables<AGVState>();
_rep.AsSugarClient().CodeFirst.InitTables<ManipulatorLog>();
_rep.AsSugarClient().CodeFirst.InitTables<ManipulatorSetting>();
_rep.AsSugarClient().CodeFirst.InitTables<ManipulatorState>();
_logger.LogInformation("DataBaseCreateSuccess");
return true;
String sql = "SELECT id, ConveyorNo,TaskNo,FlightNo,AGVNo,MAX(StartTime) as StartTime,TaskState, TotalCount ,LoadCount FROM AirportTask WHERE AGVNo IS NULL and TaskState = '等待' group by ConveyorNo ";
taskInfos = base._rep.AsTenant().GetConnection("AGV").Ado.SqlQuery<AirportTask>(sql);
}
catch (Exception ex)
{
_logger.LogInformation("Error: " + ex);
return false;
_logger.LogError($"获取AGV任务信息异常:{ex.Message}");
}
return taskInfos;
}
public async Task<bool> UpdateAsync(AirportTask record)
{
bool result = await _rep.UpdateAsync(record);
return result;
}
}
}

@ -5,6 +5,7 @@ using System;
using System.Collections.Generic;
using System.Linq.Expressions;
using System.Text;
using System.Threading.Tasks;
#region << 版 本 注 释 >>
/*--------------------------------------------------------------------

@ -18,6 +18,7 @@
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="0.5*"/>
<RowDefinition Height="0.5*"/>
<RowDefinition Height="7*"/>
<RowDefinition Height="0.7*"/>
@ -48,12 +49,10 @@
</Grid>
</Border>
<Border Grid.Row="1" BorderBrush="Red" BorderThickness="0" CornerRadius="5" Background="Transparent" Margin="2,25,2,2">
<ContentControl>
<Button Content="Button" HorizontalAlignment="Left" Margin="33,65,0,0" VerticalAlignment="Top" Height="82" Width="212" Click="Button_Click"/>
</ContentControl>
<Border Grid.Row="2" BorderBrush="Red" BorderThickness="0" CornerRadius="5" Background="Transparent" Margin="2,5,2,2">
<ContentControl Content="{Binding UserContent}"/>
</Border>
<Border Grid.Row="2" BorderBrush="#1254AB" BorderThickness="2" CornerRadius="5" Background="Transparent" Margin="6,2,6,7">
<Border Grid.Row="3" BorderBrush="#1254AB" BorderThickness="0" CornerRadius="5" Background="Transparent" Margin="6,2,6,7">
<Border.Effect>
<DropShadowEffect Color="#1254AB" Direction="270" BlurRadius="10" ShadowDepth="5" Opacity="0.5"/>
</Border.Effect>
@ -158,7 +157,7 @@
</Grid>-->
<!--单行状态显示-->
<Grid>
<!--<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="*"/>
@ -257,7 +256,7 @@
</StackPanel>
</Grid>
</StackPanel>
</Grid>
</Grid>-->
</StackPanel>
</Grid>

@ -0,0 +1,225 @@
<UserControl x:Class="SlnMesnac.WPF.Page.IndexPage.IndexContent"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:local="clr-namespace:SlnMesnac.WPF.Page.IndexPage"
mc:Ignorable="d"
d:DesignHeight="750" d:DesignWidth="1920" Background="Transparent">
<UserControl.Resources>
<!-- 定义数据模板 -->
<DataTemplate x:Key="TaskTemplate">
<Border BorderBrush="#1254AB" BorderThickness="2" CornerRadius="5" Margin="2,5">
<StackPanel Margin="10,0,0,0">
<StackPanel Orientation="Horizontal">
<TextBlock Text="站台号:" FontSize="18" Foreground="White" Margin="0,10,0,0"/>
<TextBlock Text="{Binding conveyorno}" FontSize="18" Foreground="White" Margin="0,10,0,0"/>
</StackPanel>
<StackPanel Orientation="Horizontal">
<TextBlock Text="航班号:" FontSize="18" Foreground="White" Margin="0,10,0,0"/>
<TextBlock Text="{Binding flightno}" FontSize="18" Foreground="White" Margin="0,10,0,0"/>
</StackPanel>
<StackPanel Orientation="Horizontal">
<TextBlock Text="任务号:" FontSize="18" Foreground="White" Margin="0,10,0,0"/>
<TextBlock Text="{Binding taskno}" FontSize="18" Foreground="White" Margin="0,10,0,0"/>
</StackPanel>
<StackPanel Orientation="Horizontal">
<TextBlock Text="任务状态:" FontSize="18" Foreground="White" Margin="0,10,0,0"/>
<TextBlock Text="{Binding taskstate}" FontSize="18" Foreground="White" Margin="0,10,0,0"/>
</StackPanel>
<StackPanel Orientation="Horizontal">
<TextBlock Text="AGV编号" FontSize="18" Foreground="White" Margin="0,10,0,0"/>
<TextBlock Text="{Binding agvno}" FontSize="18" Foreground="White" Margin="0,10,0,0"/>
</StackPanel>
<StackPanel Orientation="Horizontal">
<TextBlock Text="总行李筐数量:" FontSize="18" Foreground="White" Margin="0,10,0,0"/>
<TextBlock Text="{Binding totalcount}" FontSize="18" Foreground="White" Margin="0,10,0,0"/>
</StackPanel>
<StackPanel Orientation="Horizontal">
<TextBlock Text="已装载筐数量:" FontSize="18" Foreground="White" Margin="0,10,0,0"/>
<TextBlock Text="{Binding loadcount}" FontSize="18" Foreground="White" Margin="0,10,0,0"/>
</StackPanel>
<StackPanel Orientation="Horizontal" VerticalAlignment="Center" Margin="0,10,0,10">
<Button Content="待处理任务" FontSize="14" Style="{StaticResource BUTTON_AGREE}"
Width="80" Height="30" Background="YellowGreen" BorderBrush="YellowGreen" Margin="40,0,0,0"
Command="{Binding DataContext.HandleTaskCommand, RelativeSource={RelativeSource AncestorType=ItemsControl}}"
CommandParameter="{Binding taskno}"/>
<Button Content="删除任务" FontSize="14" Style="{StaticResource BUTTON_AGREE}"
Width="80" Height="30" Background="Red" BorderBrush="Red" Margin="20,0,0,0"
Command="{Binding DataContext.DeleteTaskCommand, RelativeSource={RelativeSource AncestorType=ItemsControl}}"
CommandParameter="{Binding taskno}"/>
</StackPanel>
</StackPanel>
</Border>
</DataTemplate>
<DataTemplate x:Key="LogMsgTemplate">
<TextBlock Text="{Binding}" FontSize="16" Foreground="White" TextWrapping="Wrap" MaxWidth="300"/>
</DataTemplate>
<DataTemplate x:Key="FlightTemplate">
<Border BorderBrush="#1254AB" BorderThickness="2" CornerRadius="5" Margin="2,5">
<StackPanel Margin="10,0,0,0">
<TextBlock Text="{Binding flightNumber}" FontSize="18" Foreground="White" Margin="0,10,0,0"/>
<TextBlock Text="{Binding scheduledTime}" FontSize="18" Foreground="White" Margin="0,10,0,0"/>
<TextBlock Text="{Binding destination}" FontSize="18" Foreground="White" Margin="0,10,0,0"/>
<TextBlock Text="{Binding flightStatus}" FontSize="18" Foreground="White" Margin="0,10,0,0"/>
<TextBlock Text="{Binding baggageClaim}" FontSize="18" Foreground="White" Margin="0,10,0,10"/>
</StackPanel>
</Border>
</DataTemplate>
</UserControl.Resources>
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="2*"/>
<ColumnDefinition Width="6*"/>
<ColumnDefinition Width="2*"/>
</Grid.ColumnDefinitions>
<Border Grid.Column="0" BorderBrush="#1254AB" BorderThickness="0" CornerRadius="5" Background="Transparent">
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="1*"/>
<RowDefinition Height="9*"/>
<RowDefinition Height="4*"/>
</Grid.RowDefinitions>
<Border Grid.Row="0" BorderBrush="#1254AB" BorderThickness="2">
<StackPanel VerticalAlignment="Center" HorizontalAlignment="Left" Orientation="Horizontal">
<TextBlock Text="任务列表" FontSize="24" Foreground="White" Margin="20,0,0,0"/>
<Button Content="添加" Command="{Binding AddTaskCommand}" FontSize="14" Style="{StaticResource BUTTON_AGREE}" Width="80" Height="30" Background="YellowGreen" BorderBrush="YellowGreen" Margin="20,0,0,0"/>
</StackPanel>
</Border>
<Border Grid.Row="1">
<ScrollViewer HorizontalScrollBarVisibility="Hidden" VerticalScrollBarVisibility="Hidden">
<ItemsControl ItemsSource="{Binding TaskItems}" ItemTemplate="{StaticResource TaskTemplate}" />
</ScrollViewer>
</Border>
<Border Grid.Row="2" BorderBrush="#1254AB" BorderThickness="2" Margin="0,10,0,0">
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="2*"/>
<RowDefinition Height="9*"/>
</Grid.RowDefinitions>
<TextBlock Grid.Row="0" Text="日志信息" FontSize="18" Foreground="White" HorizontalAlignment="Center" VerticalAlignment="Center"/>
<ScrollViewer Grid.Row="1" HorizontalScrollBarVisibility="Hidden" VerticalScrollBarVisibility="Hidden">
<ItemsControl ItemsSource="{Binding LogMessages}" ItemTemplate="{StaticResource LogMsgTemplate}" />
</ScrollViewer>
</Grid>
</Border>
</Grid>
</Border>
<Border Grid.Column="1" BorderBrush="#1254AB" BorderThickness="0" CornerRadius="5" Margin="10,0,10,0">
<Border.Background>
<ImageBrush ImageSource="/Templates/image/between.png" Stretch="Uniform" />
</Border.Background>
<Grid Margin="15,0">
<Grid.RowDefinitions>
<RowDefinition Height="0.5*"/>
<RowDefinition Height="0.7*"/>
<RowDefinition Height="1*"/>
<RowDefinition Height="1*"/>
<RowDefinition Height="1*"/>
<RowDefinition Height="1*"/>
<RowDefinition Height="1*"/>
<RowDefinition Height="0.7*"/>
</Grid.RowDefinitions>
<Border Grid.Row="1">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="1.9*"/>
<ColumnDefinition Width="0.4*"/>
<ColumnDefinition Width="1.7*"/>
<ColumnDefinition Width="0.4*"/>
<ColumnDefinition Width="1.6*"/>
<ColumnDefinition Width="0.4*"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<Border Grid.Column="0" >
<Button Content="手动呼叫" Command="{Binding ManualCallCommand}" FontSize="16" Style="{StaticResource BUTTON_AGREE}" Width="120" Height="40" Background="YellowGreen" BorderBrush="YellowGreen"/>
</Border>
<Border Grid.Column="2">
<Button Content="手动终止" Command="{Binding ManualTerminateCommand}" FontSize="16" Style="{StaticResource BUTTON_AGREE}" Width="120" Height="40" Background="Red" BorderBrush="Red"/>
</Border>
<Border Grid.Column="4">
<Button Content="复 位" Command="{Binding ResetCommand}" FontSize="16" Style="{StaticResource BUTTON_AGREE}" Width="120" Height="40" Background="#FF9900" BorderBrush="#FF9900"/>
</Border>
</Grid>
</Border>
<Border Grid.Row="2">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="0.8*"/>
<ColumnDefinition Width="1.3*"/>
<ColumnDefinition Width="1.5*"/>
<ColumnDefinition Width="1.3*"/>
<ColumnDefinition Width="0.2*"/>
</Grid.ColumnDefinitions>
<Border Grid.Column="1" VerticalAlignment="Center" HorizontalAlignment="Center">
<TextBlock Text="1#站台" FontSize="18" Foreground="White"/>
</Border>
<Border Grid.Column="3" VerticalAlignment="Center" HorizontalAlignment="Center">
<TextBlock Text="4#站台" FontSize="18" Foreground="White"/>
</Border>
</Grid>
</Border>
<Border Grid.Row="4">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="0.8*"/>
<ColumnDefinition Width="1.3*"/>
<ColumnDefinition Width="1.5*"/>
<ColumnDefinition Width="1.3*"/>
<ColumnDefinition Width="0.2*"/>
</Grid.ColumnDefinitions>
<Border Grid.Column="1" VerticalAlignment="Center" HorizontalAlignment="Center">
<TextBlock Text="2#站台" FontSize="18" Foreground="White"/>
</Border>
<Border Grid.Column="3" VerticalAlignment="Center" HorizontalAlignment="Center">
<TextBlock Text="5#站台" FontSize="18" Foreground="White"/>
</Border>
</Grid>
</Border>
<Border Grid.Row="6">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="0.8*"/>
<ColumnDefinition Width="1.3*"/>
<ColumnDefinition Width="1.5*"/>
<ColumnDefinition Width="1.3*"/>
<ColumnDefinition Width="0.2*"/>
</Grid.ColumnDefinitions>
<Border Grid.Column="1" VerticalAlignment="Center" HorizontalAlignment="Center">
<TextBlock Text="3#站台" FontSize="18" Foreground="White"/>
</Border>
<Border Grid.Column="3" VerticalAlignment="Center" HorizontalAlignment="Center">
<TextBlock Text="6#站台" FontSize="18" Foreground="White"/>
</Border>
</Grid>
</Border>
</Grid>
</Border>
<Border Grid.Column="2" BorderBrush="#1254AB" BorderThickness="0" CornerRadius="5" Background="Transparent">
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="1*"/>
<RowDefinition Height="12*"/>
</Grid.RowDefinitions>
<Border Grid.Row="0" BorderBrush="#1254AB" BorderThickness="2">
<StackPanel VerticalAlignment="Center" HorizontalAlignment="Left" Orientation="Vertical">
<TextBlock Text="航班信息" FontSize="24" Foreground="White" Margin="20,0,0,0"/>
<TextBlock Text="{Binding CurrentDateTime, StringFormat={}{0:yyyy-MM-dd HH:mm:ss}}" FontSize="18" Foreground="White" Margin="20,0,0,0"/>
</StackPanel>
</Border>
<Border Grid.Row="1">
<ScrollViewer HorizontalScrollBarVisibility="Hidden" VerticalScrollBarVisibility="Hidden">
<ItemsControl ItemsSource="{Binding FlightItems}" ItemTemplate="{StaticResource FlightTemplate}" />
</ScrollViewer>
</Border>
</Grid>
</Border>
</Grid>
</UserControl>

@ -0,0 +1,31 @@
using SlnMesnac.WPF.ViewModel.IndexPage;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
namespace SlnMesnac.WPF.Page.IndexPage
{
/// <summary>
/// IndexContent.xaml 的交互逻辑
/// </summary>
public partial class IndexContent : UserControl
{
public IndexContent()
{
InitializeComponent();
this.DataContext = new IndexContentViewModel();
}
}
}

@ -10,6 +10,7 @@
<ItemGroup>
<None Remove="appsettings.json" />
<None Remove="Templates\image\background.jpg" />
<None Remove="Templates\image\between.png" />
</ItemGroup>
<ItemGroup>
@ -18,6 +19,10 @@
</Content>
</ItemGroup>
<ItemGroup>
<Resource Include="Templates\image\between.png" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\SlnMesnac.Business\SlnMesnac.Business.csproj" />
<ProjectReference Include="..\SlnMesnac.Common\SlnMesnac.Common.csproj" />
@ -37,6 +42,7 @@
<ItemGroup>
<PackageReference Include="Autofac.Extensions.DependencyInjection" Version="9.0.0" />
<PackageReference Include="CommunityToolkit.Mvvm" Version="8.2.2" />
<PackageReference Include="Lierda.WPFHelper" Version="1.0.3" />
<PackageReference Include="MvvmLightLibs" Version="5.4.1.1" />
<PackageReference Include="NVelocity" Version="1.2.0" />

@ -12,6 +12,7 @@ using SlnMesnac.Rfid;
using SlnMesnac.Ioc;
using SlnMesnac.Plc;
using SlnMesnac.Extensions;
using SlnMesnac.Quartz;
using SlnMesnac.TouchSocket;
namespace SlnMesnac.WPF
@ -49,6 +50,9 @@ namespace SlnMesnac.WPF
//注册RFID工厂
//services.AddRfidFactorySetup();
//注册任务调度
//services.AddQuartzSetUp();
}
/// <summary>

Binary file not shown.

After

Width:  |  Height:  |  Size: 43 KiB

@ -0,0 +1,45 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
#region << 版 本 注 释 >>
/*--------------------------------------------------------------------
* (c) 2024 WenJY
* CLR4.0.30319.42000
* T14-GEN3-7895
* SlnMesnac.WPF.ViewModel.IndexPage
* a6623b61-3574-44c2-a027-479fe9e639a2
*
* WenJY
*
* 2024-09-05 15:51:18
* V1.0.0
*
*
*--------------------------------------------------------------------
*
*
*
*
* V1.0.0
*--------------------------------------------------------------------*/
#endregion << 版 本 注 释 >>
namespace SlnMesnac.WPF.ViewModel.IndexPage
{
public class FlightItem
{
public string flightNumber { get; set; }
public string scheduledTime { get;set; }
public string destination { get;set; }
public string flightStatus { get;set; }
public string baggageClaim { get; set; }
}
}

@ -0,0 +1,245 @@
using CommunityToolkit.Mvvm.ComponentModel;
using CommunityToolkit.Mvvm.Input;
using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Threading;
using SlnMesnac.Business.@base;
using static Microsoft.WindowsAPICodePack.Shell.PropertySystem.SystemProperties.System;
using SlnMesnac.Repository.service;
using SlnMesnac.Repository;
using Microsoft.Extensions.Logging;
using Microsoft.Extensions.DependencyInjection;
#region << 版 本 注 释 >>
/*--------------------------------------------------------------------
* (c) 2024 WenJY
* CLR4.0.30319.42000
* T14-GEN3-7895
* SlnMesnac.WPF.ViewModel.IndexPage
* ffdc8ddd-928f-4910-b6ac-d6d6426c39d0
*
* WenJY
*
* 2024-09-05 15:05:57
* V1.0.0
*
*
*--------------------------------------------------------------------
*
*
*
*
* V1.0.0
*--------------------------------------------------------------------*/
#endregion << 版 本 注 释 >>
namespace SlnMesnac.WPF.ViewModel.IndexPage
{
public partial class IndexContentViewModel: ObservableObject
{
private ILogger<IndexContentViewModel> _logger;
private ILogger<BaseTaskInfoBusiness> _taskBusinessLogger;
private IAirportTaskService _taskservice;
private IAGVStateService _agvstateService;
private BaseTaskInfoBusiness _taskInfoBusiness;
private DispatcherTimer _timer;
public IndexContentViewModel()
{
LogMessages = new ObservableCollection<string>();
_taskBusinessLogger = App.ServiceProvider.GetService<ILogger<BaseTaskInfoBusiness>>();
_taskservice = App.ServiceProvider.GetService<IAirportTaskService>();
_agvstateService = App.ServiceProvider.GetService<IAGVStateService>();
_taskInfoBusiness = BaseTaskInfoBusiness.GetInstance(_taskBusinessLogger, _taskservice, _agvstateService);
_taskInfoBusiness._Taskaction += task =>
{
TaskItems = new ObservableCollection<AirportTask>
{
task
};
};
this.Init();
}
private void Init()
{
#region 测试数据
List<AirportTask> AirportTaskItem = _taskservice.GetTaskInfos();
TaskItems = new ObservableCollection<AirportTask>(AirportTaskItem);
// TaskItems = new ObservableCollection<AirportTask>
// {
// new AirportTask { TaskCode = "1", StationName = "1#站台", TaskDetails = "入库P04->C01", Status = "任务状态:执行中" },
// new TaskItem { TaskCode = "2", StationName = "2#站台", TaskDetails = "入库P04->C01", Status = "任务状态:执行中" },
// new TaskItem { TaskCode = "3", StationName = "3#站台", TaskDetails = "入库P04->C01", Status = "任务状态:执行中" },
// new TaskItem { TaskCode = "4", StationName = "4#站台", TaskDetails = "入库P04->C01", Status = "任务状态:执行中" },
// new TaskItem { TaskCode = "5", StationName = "5#站台", TaskDetails = "入库P04->C01", Status = "任务状态:执行中" },
// new TaskItem { TaskCode = "6", StationName = "6#站台", TaskDetails = "入库P04->C01", Status = "任务状态:执行中" },
// };
RefreshLogMessage($"1#站台任务下发站台任务下发站台任务下发站台任务下发站台任务下发站台任务下发");
RefreshLogMessage($"2#站台任务下发");
RefreshLogMessage($"3#站台任务下发");
RefreshLogMessage($"4#站台任务下发");
RefreshLogMessage($"5#站台任务下发");
RefreshLogMessage($"6#站台任务下发");
RefreshLogMessage($"7#站台任务下发");
RefreshLogMessage($"2#站台任务下发");
RefreshLogMessage($"3#站台任务下发");
RefreshLogMessage($"4#站台任务下发");
RefreshLogMessage($"5#站台任务下发");
RefreshLogMessage($"6#站台任务下发");
RefreshLogMessage($"7#站台任务下发");
FlightItems = new ObservableCollection<FlightItem>
{
new FlightItem { flightNumber = "航班号CZ3021", scheduledTime = "计划/变更11:28", destination = "经停/目的:深圳",flightStatus="状态:到达",baggageClaim="转盘1" },
new FlightItem { flightNumber = "航班号CZ3022", scheduledTime = "计划/变更11:28", destination = "经停/目的:深圳",flightStatus="状态:到达",baggageClaim="转盘1" },
new FlightItem { flightNumber = "航班号CZ3023", scheduledTime = "计划/变更11:28", destination = "经停/目的:深圳",flightStatus="状态:到达",baggageClaim="转盘1" },
new FlightItem { flightNumber = "航班号CZ3024", scheduledTime = "计划/变更11:28", destination = "经停/目的:深圳",flightStatus="状态:到达",baggageClaim="转盘1" },
new FlightItem { flightNumber = "航班号CZ3025", scheduledTime = "计划/变更11:28", destination = "经停/目的:深圳",flightStatus="状态:到达",baggageClaim="转盘1" },
new FlightItem { flightNumber = "航班号CZ3026", scheduledTime = "计划/变更11:28", destination = "经停/目的:深圳",flightStatus="状态:到达",baggageClaim="转盘1" },
new FlightItem { flightNumber = "航班号CZ3027", scheduledTime = "计划/变更11:28", destination = "经停/目的:深圳",flightStatus="状态:到达",baggageClaim="转盘1" },
};
#endregion
#region 更新时间显示
_currentDateTime = DateTime.Now;
_timer = new DispatcherTimer
{
Interval = TimeSpan.FromSeconds(1) // 每秒更新一次
};
_timer.Tick += (s, e) =>
{
CurrentDateTime = DateTime.Now;
};
_timer.Start();
#endregion
}
#region 参数定义
/// <summary>
/// 任务列表
/// </summary>
private ObservableCollection<AirportTask> _taskItems = new ObservableCollection<AirportTask>();
public ObservableCollection<AirportTask> TaskItems
{
get => _taskItems;
set => SetProperty(ref _taskItems, value);
}
/// <summary>
/// 日志信息
/// </summary>
private ObservableCollection<string> _logMessages = new ObservableCollection<string>();
public ObservableCollection<string> LogMessages
{
get => _logMessages;
set => SetProperty(ref _logMessages, value);
}
/// <summary>
/// 日期时间
/// </summary>
private DateTime _currentDateTime;
public DateTime CurrentDateTime
{
get => _currentDateTime;
set
{
if (_currentDateTime != value)
{
SetProperty(ref _currentDateTime, value);
}
}
}
/// <summary>
/// 航班信息
/// </summary>
private ObservableCollection<FlightItem> _flightItems = new ObservableCollection<FlightItem>();
public ObservableCollection<FlightItem> FlightItems
{
get => _flightItems;
set => SetProperty(ref _flightItems, value);
}
#endregion
/// <summary>
/// 刷新日志
/// </summary>
/// <param name="msg"></param>
private void RefreshLogMessage(string msg)
{
App.Current.Dispatcher.BeginInvoke((Action)(() =>
{
LogMessages.Add($"{DateTime.Now}: {msg}");
}));
}
/// <summary>
/// 添加任务
/// </summary>
[RelayCommand]
private void AddTask()
{
MessageBox.Show("添加任务");
}
/// <summary>
/// 处理任务
/// </summary>
/// <param name="taskCode"></param>
[RelayCommand]
private void HandleTask(string taskCode)
{
var info = taskCode;
}
/// <summary>
/// 删除任务
/// </summary>
/// <param name="taskCode"></param>
[RelayCommand]
private void DeleteTask(string taskCode)
{
var info = taskCode;
}
/// <summary>
/// 手动呼叫
/// </summary>
[RelayCommand]
private void ManualCall()
{
MessageBox.Show("手动呼叫");
}
/// <summary>
/// 手动终止
/// </summary>
[RelayCommand]
private void ManualTerminate()
{
MessageBox.Show("手动终止");
}
/// <summary>
/// 复位
/// </summary>
[RelayCommand]
private void Reset()
{
MessageBox.Show("复位");
}
}
}

@ -0,0 +1,39 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
#region << 版 本 注 释 >>
/*--------------------------------------------------------------------
* (c) 2024 WenJY
* CLR4.0.30319.42000
* T14-GEN3-7895
* SlnMesnac.WPF.ViewModel.IndexPage
* a576143f-3854-41bb-88d9-2b43962baed5
*
* WenJY
*
* 2024-09-05 15:14:04
* V1.0.0
*
*
*--------------------------------------------------------------------
*
*
*
*
* V1.0.0
*--------------------------------------------------------------------*/
#endregion << 版 本 注 释 >>
namespace SlnMesnac.WPF.ViewModel.IndexPage
{
public class TaskItem
{
public string TaskCode { get; set; }
public string StationName { get; set; }
public string TaskDetails { get; set; }
public string Status { get; set; }
}
}

@ -2,7 +2,11 @@
using GalaSoft.MvvmLight.Command;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Logging;
using SlnMesnac.Business.@base;
using SlnMesnac.Repository.service;
using SlnMesnac.TouchSocket;
using SlnMesnac.WPF.Page.Generate;
using SlnMesnac.WPF.Page.IndexPage;
using System;
using System.Windows;
@ -11,9 +15,13 @@ namespace SlnMesnac.WPF.ViewModel
public class MainWindowViewModel: ViewModelBase
{
private readonly ILogger<MainWindowViewModel> _logger;
private readonly ILogger<BaseTaskInfoBusiness> _BaseTaskInfoBusinesslogger;
private IAirportTaskService _Taskservice;
private IAGVStateService _AGVStateService;
//代码生成
private readonly GenerateControl generateControl = new GenerateControl();
private IndexContent indexContent = new IndexContent();
#region 参数定义
/// <summary>
@ -80,10 +88,15 @@ namespace SlnMesnac.WPF.ViewModel
{
_logger = App.ServiceProvider.GetService<ILogger<MainWindowViewModel>>();
_Taskservice = App.ServiceProvider.GetService<IAirportTaskService>();
_AGVStateService = App.ServiceProvider.GetService<IAGVStateService>();
_BaseTaskInfoBusinesslogger = App.ServiceProvider.GetService<ILogger<BaseTaskInfoBusiness>>();
BaseTaskInfoBusiness.GetInstance(_BaseTaskInfoBusinesslogger, _Taskservice, _AGVStateService);
ControlOnClickCommand = new RelayCommand<object>(obj => ControlOnClick(obj));
FormControlCommand = new RelayCommand<object>(x => FormControl(x));
UserContent = indexContent;
}
/// <summary>
@ -141,7 +154,13 @@ namespace SlnMesnac.WPF.ViewModel
try
{
string info = obj as string;
//UserContent = inStoreInfoControl;
switch (info)
{
case "Index":
UserContent = indexContent;
break;
default: break;
}
}
catch (Exception ex)
{

@ -10,20 +10,20 @@
"AppConfig": {
"logPath": "F:\\Mesnac\\2023部门项目\\机场AGV调度\\HightWay_AirPot_WCS\\SlnMesnac.WPF\\bin\\Debug\\net6.0-windows\\log",
"SqlConfig": [
//{
// "configId": "mes",
// "dbType": 1,
// "connStr": "server=.;uid=sa;pwd=123456;database=JiangYinMENS"
//},
//{
// "configId": "mcs",
// "dbType": 3,
// "connStr": "Data Source=175.27.215.92/helowin;User ID=aucma_scada;Password=aucma"
//},
{
"configId": "mes",
"dbType": 1,
"connStr": "server=.;uid=sa;pwd=123456;database=JiangYinMENS"
},
{
"configId": "mcs",
"dbType": 3,
"connStr": "Data Source=175.27.215.92/helowin;User ID=aucma_scada;Password=aucma"
},
{
"configId": "sqlite",
"configId": "AGV",
"dbType": 2,
"connStr": "Data Source=Airport.db;Version=3;"
"connStr": "Data Source=F:\\Mesnac\\2023部门项目\\机场AGV调度\\HightWay_AirPot_WCS\\SlnMesnac.WPF\\bin\\Debug\\net6.0-windows\\data\\Airport_db.sqlite;"
}
],
"PlcConfig": [

Loading…
Cancel
Save