change-成品下线手动放行加密码校验,波特率放配置文件,条码绑定图表优化

dev
liuwf 1 year ago
parent b490218d75
commit 4dc99d0777

@ -39,7 +39,7 @@ namespace Admin.Core.Service
{
List<CodeBindCharts> list = null;
var _db = this.BaseDal.Db;
list = await _db.CopyNew().Ado.SqlQueryAsync<CodeBindCharts>("SELECT BOX_NAME as BoxName,COUNT(*) as Amount FROM CODE_BINDING WHERE PRODUCT_CODE IS NOT NULL GROUP BY BOX_NAME ");
list = await _db.CopyNew().Ado.SqlQueryAsync<CodeBindCharts>("SELECT BOX_NAME as BoxName, COUNT(*) as Amount FROM CODE_BINDING WHERE PRODUCT_CODE IS NOT NULL AND TRUNC(RECORD_TIME2) = TRUNC(SYSDATE) GROUP BY BOX_NAME");
list.OrderBy(x =>x.BoxName);
return list;
}

@ -1,4 +1,6 @@
using log4net;
using Admin.Core.Common;
using Aucma.Core.Scanner;
using log4net;
using System;
using System.Collections.Generic;
using System.IO.Ports;
@ -14,8 +16,33 @@ namespace Aucma.Core.CodeBinding.Business
/// </summary>
public class GunBusiness
{
private static SerialPort serialPort = new SerialPort();
private static List<ScannerModel> allScanners = Appsettings.app<ScannerModel>("ScannerServer").ToList();
// 内胆扫码器ip
private static string MesScannerIp = allScanners.First(x => x.Name == "mes扫码器").Ip;
// 箱壳扫码器ip
private static string SNScannerIp = allScanners.First(x => x.Name == "sn扫码器").Ip;
/// <summary>
/// code1扫码信息刷新
/// </summary>
/// <param name="Code1"></param>
public delegate void BindingReceiveCode(string code, string ip);
public static event BindingReceiveCode? BindingReceiveCodeEvent;
#region 单例实现
private static readonly GunBusiness lazy = new GunBusiness();
/// <summary>
/// 扫码委托
/// </summary>
/// <param name="materialCodeStr"></param>
/// <param name="ip"></param>
public delegate void RefreshMaterialCodeStr(string materialCodeStr, string ip);
public static event RefreshMaterialCodeStr RefreshMaterialCodeStrEvent;
public static GunBusiness Instance
{
get
@ -28,7 +55,7 @@ namespace Aucma.Core.CodeBinding.Business
private static readonly log4net.ILog logHelper = LogManager.GetLogger(typeof(GunBusiness));
//初始化串口并启动接收数据
public static void InstanceSerialPort3()
{
@ -36,11 +63,11 @@ namespace Aucma.Core.CodeBinding.Business
{
string port = System.IO.Ports.SerialPort.GetPortNames().FirstOrDefault();
//实例化串行端口
SerialPort serialPort = new SerialPort();
//端口名 注:因为使用的是USB转RS232 所以去设备管理器中查看一下虚拟com口的名字
serialPort.PortName = port;// portName;
//波特率
serialPort.BaudRate = 9600;
serialPort.BaudRate = 115200;
//奇偶校验
serialPort.Parity = Parity.None;
//停止位
@ -49,8 +76,10 @@ namespace Aucma.Core.CodeBinding.Business
serialPort.DataBits = 8;
//忽略null字节
serialPort.DiscardNull = true;
//接收事件
serialPort.DataReceived += new SerialDataReceivedEventHandler(serialPort_DataReceived);
serialPort.DataReceived += new System.IO.Ports.SerialDataReceivedEventHandler(serialPort1_DataReceived);
//开启串口
serialPort.Open();
}
@ -60,56 +89,30 @@ namespace Aucma.Core.CodeBinding.Business
}
}
/// <summary>
/// 接收数据
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
static void serialPort_DataReceived(object sender, SerialDataReceivedEventArgs e)
private static void serialPort1_DataReceived(object sender, System.IO.Ports.SerialDataReceivedEventArgs e)
{
try
{
SerialPort serialPort = (SerialPort)sender;
string code = serialPort.ReadExisting();
if (string.IsNullOrEmpty(code))
{
return;
}
//业务处理
Console.WriteLine("获取数据:" + code.Trim());
Thread.Sleep(50);
int nums = serialPort.BytesToRead;
byte[] receiveBytes = new byte[nums];
serialPort.Read(receiveBytes, 0, nums);
}
catch (Exception ex)
{
Console.Write(ex.ToString());
}
}
private static void ReceiveData(object serialPortobj)
{
try
{
SerialPort serialPort = (SerialPort)serialPortobj;
StringBuilder sb = new StringBuilder();
string code = serialPort.ReadExisting();
string str = Encoding.ASCII.GetString(receiveBytes);
if (string.IsNullOrEmpty(code))
{
return;
}
//业务处理
Console.WriteLine("获取数据:" + code.Trim());
if (str.Substring(0, 1) == "B")
{
// mes条码
RefreshMaterialCodeStrEvent?.Invoke(str, MesScannerIp);
}
catch (Exception ex)
else
{
logHelper.Error(ex.Message);
//SN码
RefreshMaterialCodeStrEvent?.Invoke(str,SNScannerIp);
}
sb.Clear();
}
}
}

@ -134,7 +134,7 @@ namespace Aucma.Core.CodeBinding.Business
// Console.WriteLine("CodeNum[" + Convert.ToString(stBcrResult.nCodeNum) + "]");
if (stBcrResult.nCodeNum == 0)
{
NoReadEvent?.Invoke(ShellScannerIp);
NoReadEvent?.Invoke(LinerScannerIp);
Console.WriteLine(DateTime.Now + ":mes--->No Read 处理");
log.Info(DateTime.Now + ":mes--->No Read 处理");
// 更新存活时间

@ -37,6 +37,7 @@ using System.Windows.Documents;
using Admin.Core.Common;
using Aucma.Core.CodeBinding.Business;
using Aucma.Core.Scanner;
using LiveCharts.Defaults;
/*
*
*/
@ -70,26 +71,24 @@ namespace Aucma.Core.CodeBinding.ViewModels
_printBarCodeServices = App.ServiceProvider.GetService<IPrintBarCodeServices>();
_iMaterialCompletionServices = App.ServiceProvider.GetService<IMaterialCompletionServices>();
Business.MvCodeHelper.BindingReceiveCodeEvent += ReceiveCode;
GunBusiness.RefreshMaterialCodeStrEvent += ReceiveCode;
Business.MvCodeHelper.NoReadEvent += ReceiveNoRead;
LoadData();
//实时绑定条码和实时下发plc放行信号
realBindingAndSendPlc();
LoadCharts();
//Task.Run(() =>
//{
// while (true)
// {
// Random result = new Random();
// Thread.Sleep(20000);
// receiveCode1("B24010181060282920"+ result.Next(100,999));
// Thread.Sleep(1000);
// receiveCode2("16160030000000910"+ result.Next(100, 999));
// }
// Thread.Sleep(4000);
// LoadCharts();
// Thread.Sleep(3000);
// LoadCharts();
//});
}
catch (Exception ex)
@ -198,68 +197,80 @@ namespace Aucma.Core.CodeBinding.ViewModels
#region 加载DataGrid数据
private async void LoadData()
{
//try
//{
// ListItems.Clear();
// //// 赋值
// //Code1 = "B236000007811023002";
// //// Code1Time = "2023-10-23 16:05:23";
// //Code2 = "B236000007811023002";
// //// Code2Time = "2023-10-23 16:05:23";
// //BindingInfo = "条码[B236000007811023002]和SN条码[B236000007811023002]绑定成功!";
// LoadCharts();
try
{
// List<CodeBindingRecord> records = null;
// records = await _codeBindingRecordServices.QueryAsync(x => x.BoxCode != null, "RECORD_TIME2 desc");
// LoadCharts();
// if (records != null)
// {
// Application.Current.Dispatcher.Invoke(() =>
// {
// foreach (CodeBindingRecord record in records)
// {
// ListItems.Add(new ReaderInfo() { No = ListItems.Count + 1, BoxCode = record.BoxCode, ProductCode = record.ProductCode, BoxName = record.BoxName, BindingResult = record.BindingResult, IsPlcPass = record.isPlcPass == 2 ? "plc放行成功" : "待放行", RecordTime = record.RecordTime2.ToString() });
// }
// });
// }
//}
//catch (Exception)
//{
//}
List<CodeBindingRecord> records = null;
records = _codeBindingRecordServices.QueryAsync(x => x.BoxCode != null && x.RecordTime2 >= DateTime.Today && x.RecordTime2 < DateTime.Today.AddDays(1)).Result;
if (records != null && records.Count>0)
{
records = records.OrderBy(x => x.RecordTime2).ToList();
Application.Current.Dispatcher.Invoke(() =>
{
ListItems.Clear();
foreach (CodeBindingRecord record in records)
{
ListItems.Insert(0, new ReaderInfo()
{
No = ListItems.Count + 1,
BoxCode = record.BoxCode,
ProductCode = record.ProductCode,
BoxName = record.BoxName,
BindingResult = record.BindingResult,
RecordTime = record.RecordTime2.ToString()
});
}
});
}
}
catch (Exception)
{
}
}
// 修改为统计近一天白班或夜班
private async void LoadCharts()
{
try
{
App.Current.Dispatcher.Invoke( () =>
List<CodeBindCharts> list = _codeBindingRecordServices.QueryCharts().Result;
if (list == null || list.Count == 0) return;
App.Current.Dispatcher.Invoke(() =>
{
ProductionHourList = new List<string>();
// List<CodeBindCharts> list = _codeBindingRecordServices.QueryCharts().Result;
ProductionHourList.Clear();
ModelStatistics.Clear();
// 图表赋值
ChartValues<double> achievement = new ChartValues<double>();
List<string> chartList = new List<string>();
// if (list == null) return;
achievement.Add(74);
achievement.Add(78);
achievement.Add(69);
achievement.Add(43);
ProductionHourList.Add("SC-230,11W");
ProductionHourList.Add("SC-439箱体");
ProductionHourList.Add("SC-255,H");
ProductionHourList.Add("SC-317,箱体");
ChartValues<ObservablePoint> achievement = new ChartValues<ObservablePoint>();
int i = 0;
double total = 0;
foreach(var item in list)
{
ProductionHourList.Add(GetSubstringBetweenCommas(item.BoxName));
// achievement.Add(item.Amount);
achievement.Add(new ObservablePoint(i, item.Amount));
total += item.Amount;
i++;
}
//加一个汇总柱状图
ProductionHourList.Add("合计");
achievement.Add(new ObservablePoint(i, total));
var column = new ColumnSeries();
column.DataLabels = true;
column.Title = "型号";
column.Values = achievement;
column.Foreground = Brushes.White;
ModelStatistics.Add(column);
ModelStatistics.Add(column);
});
}
catch (Exception)
@ -267,22 +278,42 @@ namespace Aucma.Core.CodeBinding.ViewModels
throw;
}
}
// 测试方法
private async void add()
{
//DateTime startTime = DateTime.Now;
//Thread.Sleep(5000);
//TimeSpan elapsedTime = DateTime.Now - startTime;
//Console.WriteLine(elapsedTime.TotalSeconds);
/// <summary>
/// 截取两个逗号之间的字符串
/// </summary>
/// <param name="input"></param>
/// <returns></returns>
static string GetSubstringBetweenCommas(string input)
{
if (input == null) return null;
// 找到第一个逗号的位置
int firstCommaIndex = input.IndexOf(',');
if (firstCommaIndex != -1)
{
// 找到第二个逗号的位置
int secondCommaIndex = input.IndexOf(',', firstCommaIndex + 1);
if (secondCommaIndex != -1)
{
// 使用Substring截取第一个逗号和第二个逗号之间的字符
return input.Substring(firstCommaIndex + 1, secondCommaIndex - firstCommaIndex - 1);
}
else
{
return null;
}
}
else
{
return null;
}
}
#endregion
#region 参数定义
@ -359,7 +390,7 @@ namespace Aucma.Core.CodeBinding.ViewModels
/// <summary>
/// 日产量柱状图X轴日期
/// </summary>
private List<string> productionHourList;
private List<string> productionHourList =new List<string>();
public List<string> ProductionHourList
{
@ -409,14 +440,20 @@ namespace Aucma.Core.CodeBinding.ViewModels
// 全局变量赋值
code1Str = string.Empty ;
code2Str = string.Empty;
// 页面扫码信息清空
Code1 = code1Str;
Code2 = code2Str;
SendPlcStop();
RefreshAndWriteLog("MES条码NoRead,线体停止");
}
else
else if(model.Id == 2)
{
log.Info("MES条码NoRead,线体停止");
RefreshAndWriteLog("SN条码NoRead,线体停止");
code1Str = string.Empty;
code2Str = string.Empty;
// 页面扫码信息清空
Code1 = code1Str;
Code2 = code2Str;
SendPlcStop();
}
}
@ -429,8 +466,7 @@ namespace Aucma.Core.CodeBinding.ViewModels
private void ReceiveCode(string codeStr,string scannerIp)
{
Task.Run(() =>
{
ScannerModel model = allScanners.FirstOrDefault(x => x.Ip == scannerIp);
if (model.Id == 1)
{
@ -446,8 +482,8 @@ namespace Aucma.Core.CodeBinding.ViewModels
// 全局变量赋值,mes条码扫描后使用
code2Str = codeStr;
RefreshCode2(codeStr);
}
});
#region
// 2.创建任务更新数据库条码1
@ -483,22 +519,7 @@ namespace Aucma.Core.CodeBinding.ViewModels
DateTime time = System.DateTime.Now;
Code2 = code2;
Code2Time = time.ToString();
// Code2 = record.ProductCode;
//// Code2Time = record.RecordTime2.ToString();
// if (record.isPlcPass==2)
// {
// BindingInfo = "条码【" + record.BoxCode + "】与SN码【" + record.ProductCode + "】绑定成功,下发Plc放行成功";
// }
// else
// {
// BindingInfo = "条码【" + record.BoxCode + "】与SN码【" + record.ProductCode + "】下发Plc放行失败";
// }
// Application.Current.Dispatcher.Invoke(() =>
// {
// // ReaderInfo readerToUpdate = (ReaderInfo)ListItems.Select(item => item.No == 2);
// ListItems.Add(new ReaderInfo() { No = ListItems.Count+1, BoxCode = record.BoxCode, ProductCode = record.ProductCode, BoxName = record.BoxName,BindingResult = record.BindingResult, IsPlcPass = record.isPlcPass==2?"plc放行成功":"",RecordTime = record.RecordTime2.ToString() });
// });
}
@ -548,7 +569,7 @@ namespace Aucma.Core.CodeBinding.ViewModels
}
record.BoxCode = code1;
record.ProductCode = code2;
record.RecordTime1 = System.DateTime.Now;
//record.RecordTime1 = System.DateTime.Now;
record.RecordTime2 = System.DateTime.Now;
record.isPlcPass = 1;
record.BindingResult = "成功";
@ -581,6 +602,10 @@ namespace Aucma.Core.CodeBinding.ViewModels
#endregion
SendPlcPass();
//刷新页面
LoadData();
LoadCharts();
}
else
{

@ -8,7 +8,6 @@ using System.Diagnostics;
using System.Threading;
using NPOI.HSSF.Record;
using System.Threading.Tasks;
using Aucma.Core.PLc;
using System.Linq;
using Admin.Core.Common;
using Aucma.Core.Scanner;
@ -23,6 +22,7 @@ using static ICSharpCode.SharpZipLib.Zip.ExtendedUnixData;
using System.Windows.Threading;
using Aucma.Core.CodeBinding.Business;
using MvCodeHelper = Aucma.Core.CodeBinding.Business.MvCodeHelper;
using Aucma.Core.HwPLc;
namespace Aucma.Core.CodeBinding.ViewModels
{
@ -48,9 +48,9 @@ namespace Aucma.Core.CodeBinding.ViewModels
timer.Interval = TimeSpan.FromSeconds(1);
timer.Tick += Timer_Tick;
timer.Start();
GunBusiness.InstanceSerialPort3();
Job_AllState_Quartz.RefreshStateEvent += RefreshStatus;
// Job_AllState_Quartz.RefreshStateEvent += RefreshStatus;
MvCodeHelper.RefreshStateEvent += RefreshScanner;
InitHikRobot();
}
@ -63,16 +63,36 @@ namespace Aucma.Core.CodeBinding.ViewModels
Task.Run(() =>
{
Thread.Sleep(2000);
//MvCodeHelper1.DeviceListAcq();//获取创建设备
// MvCodeHelper1.StartGrab(); // 开启触发扫码接收数据
Business.MvCodeHelper.Shell();
});
Task.Run(() =>
{
Thread.Sleep(3000);
//MvCodeHelper1.DeviceListAcq();//获取创建设备
// MvCodeHelper1.StartGrab(); // 开启触发扫码接收数据
Thread.Sleep(4000);
try
{
var obj = PlcHelper.melsecList.FirstOrDefault(d => d.EquipName.Equals("条码绑定Plc"));
if (obj != null)
{
PlcState(true);
}
else
{
PlcState(false);
}
}catch (Exception ex)
{
PlcState(false);
}
GunBusiness.InstanceSerialPort3();
Business.MvCodeHelper.Liner();
});

@ -171,7 +171,7 @@
<lvc:CartesianChart.AxisY>
<lvc:Axis FontSize="18" Foreground="White" MinValue="0">
<lvc:Axis.Separator>
<lvc:Separator Step="10" Visibility="Hidden" StrokeThickness="1" StrokeDashArray="3" Stroke="#404F56" >
<lvc:Separator Step="50" Visibility="Hidden" StrokeThickness="1" StrokeDashArray="3" Stroke="#404F56" >
</lvc:Separator>
</lvc:Axis.Separator>
</lvc:Axis>
@ -214,7 +214,7 @@
<DataGridTextColumn Binding="{Binding ProductCode}" Header="成品条码" Width="4*" ElementStyle="{StaticResource DataGridTextColumnCenterSytle}"/>
<DataGridTextColumn Binding="{Binding BoxName}" Header="产品型号" Width="4*" ElementStyle="{StaticResource DataGridTextColumnCenterSytle}"/>
<DataGridTextColumn Binding="{Binding BindingResult}" Header="绑定结果" Width="2*" ElementStyle="{StaticResource DataGridTextColumnCenterSytle}"/>
<DataGridTextColumn Binding="{Binding IsPlcPass}" Header="plc下传结果" Width="2*" ElementStyle="{StaticResource DataGridTextColumnCenterSytle}"/>
<DataGridTextColumn Binding="{Binding RecordTime,StringFormat=\{0:yyyy-MM-dd HH:mm\}}" Header="记录时间" Width="4*" ElementStyle="{StaticResource DataGridTextColumnCenterSytle}"/>
</DataGrid.Columns>
</DataGrid>

@ -187,7 +187,7 @@
"Enabled": true
},
"QuartzNetJob": {
"Enabled": true
"Enabled": false
},
"Scanner": { //
"Enabled": false
@ -214,6 +214,8 @@
"EquipName": "条码绑定Plc",
"PlcType": "Melsec",
"Enabled": true,
//"IP": "127.0.0.1",
// "Port": 6000
"IP": "10.10.92.70",
"Port": 2014
}

@ -60,8 +60,8 @@ namespace Aucma.Core.ProductOffLine.Business
//端口名 注:因为使用的是USB转RS232 所以去设备管理器中查看一下虚拟com口的名字
serialPort.PortName = port;// portName;
//波特率
serialPort.BaudRate = 115200;
//波特率 霍尼威尔扫码枪115200,普通9600
serialPort.BaudRate = int.Parse(appConfig.BaudRate); ;
//奇偶校验
serialPort.Parity = Parity.None;
//停止位
@ -92,7 +92,7 @@ namespace Aucma.Core.ProductOffLine.Business
StringBuilder sb = new StringBuilder();
string str = Encoding.ASCII.GetString(receiveBytes);
string str = Encoding.ASCII.GetString(receiveBytes).Replace("\r\n", "");
string ip = DirectionToIP();
if (!string.IsNullOrEmpty(ip))
{

@ -110,7 +110,7 @@ namespace Aucma.Core.ProductOffLine.Business
{
MvCodeHelper.RefreshMaterialCodeStrEvent += MaterialBarScan;
GunBusiness.RefreshMaterialCodeStrEvent += MaterialBarScan;
ChooseDirectionWindow.SendPlcPassEvent += DownLoadPassFlag;
HandSendPlcWindow.SendPlcPassEvent += DownLoadPassFlag;
// test();
}

@ -61,5 +61,25 @@ namespace Aucma.Core.ProductOffLine.Config
get { return iniHelper.IniReadValue("system", "GunDirection"); }
set { iniHelper.IniWriteValue("system", "GunDirection", value); }
}
/// <summary>
/// 扫码枪波特率普通9600霍尼威尔115200
/// </summary>
public string BaudRate
{
get { return iniHelper.IniReadValue("system", "BaudRate"); }
set { iniHelper.IniWriteValue("system", "BaudRate", value); }
}
/// <summary>
/// 手动放行按钮密码
/// </summary>
public string PassWord
{
get { return iniHelper.IniReadValue("system", "PassWord"); }
set { iniHelper.IniWriteValue("system", "PassWord", value); }
}
}
}

@ -15,19 +15,26 @@
<Grid Grid.Row="0">
<Label Content="扫码枪扫描位置" FontSize="20" Foreground="White" HorizontalAlignment="Left" Margin="122,120,0,0" VerticalAlignment="Top" Height="50" Width="148"/>
<Label Content="扫码枪扫描位置:" FontSize="20" Foreground="White" HorizontalAlignment="Left" Margin="108,131,0,0" VerticalAlignment="Top" Height="50" Width="161"/>
<ComboBox Name="SelectedMaterialType" Margin="290,120,167,0" FontSize="30" Foreground="White" VerticalAlignment="Top">
<ComboBoxItem Content="外侧提升机" Foreground="Blue"/>
<ComboBoxItem Content="内侧提升机" Foreground="Blue" />
</ComboBox>
</Grid>
<Grid Grid.Row="1">
<Button Content="外侧提升机" Click="LeftButton_Click" Height="50" Width="130" Margin="162,66,210,126" Background="Green"/>
<Button Content="内侧提升机" Click="RightButton_Click" Height="50" Width="130" Margin="310,66,60,126" Background="Green" />
<Label Content="放行方向:" FontSize="20" Foreground="White" HorizontalAlignment="Left" Margin="125,66,0,0" VerticalAlignment="Top" Height="50" Width="97"/>
<Button Content="保存" FontSize="20" HorizontalAlignment="Left" Margin="554,178,0,0" VerticalAlignment="Top" Width="100" Height="45" Click="Button_Click"/>
<Button Content="操作手册" FontSize="20" HorizontalAlignment="Left" Margin="36,178,0,0" VerticalAlignment="Top" Height="45" Width="116" Background="#FF9900" BorderBrush="#FF9900" Click="Button_Click_1" />
<!--<Button Content="外侧提升机" Click="LeftButton_Click" Height="50" Width="130" Margin="162,66,210,126" Background="Green"/>
<Button Content="内侧提升机" Click="RightButton_Click" Height="50" Width="130" Margin="310,66,60,126" Background="Green" />-->
<Label Content="手动放行密码:" FontSize="20" Foreground="White" HorizontalAlignment="Left" Margin="121,64,0,0" VerticalAlignment="Top" Height="50" Width="143"/>
<TextBox x:Name="PassWord" FontSize="20" Foreground="White" HorizontalAlignment="Left" Margin="286,59,0,0" TextWrapping="Wrap" VerticalAlignment="Top" Width="166" Height="45"/>
<Button Content="登录" FontSize="20" HorizontalAlignment="Left" Background="Green" Margin="484,66,0,0" VerticalAlignment="Top" Width="110" Height="46" RenderTransformOrigin="-0.28,0.623" Click="Button_Click_2"/>
<Button Content="保 存" FontSize="20" HorizontalAlignment="Left" Margin="539,153,0,0" VerticalAlignment="Top" Width="130" Height="50" Click="Button_Click"/>
<Button Content="操作手册" FontSize="20" HorizontalAlignment="Left" Margin="25,153,0,0" VerticalAlignment="Top" Height="50" Width="130" Click="Button_Click_1" RenderTransformOrigin="0.304,0.639" />
</Grid>
<!--</StackPanel>-->
</Grid>
</Window>

@ -27,13 +27,7 @@ namespace Aucma.Core.ProductOffLine.Views
private AppConfig appConfig = AppConfig.Instance;
/// <summary>
/// 下发plc放行信号,传进来扫码器编号分垛方向A或者B,返回plc反馈结果
/// scannerNo == 1内侧scannerNo == 2外侧
/// strDirection "A" ? 1 : 2;入库方向A,B
/// </summary>
public delegate bool SendPlcPass(int scannerNo, string strDirection);
public static event SendPlcPass? SendPlcPassEvent;
private bool directionSelected = false; // 用来标识是否已经选择了方向
@ -53,42 +47,42 @@ namespace Aucma.Core.ProductOffLine.Views
}
}
private void LeftButton_Click(object sender, RoutedEventArgs e)
{
ShowConfirmationAndClose("外侧提升机箱体");
}
//private void LeftButton_Click(object sender, RoutedEventArgs e)
//{
// ShowConfirmationAndClose("外侧提升机箱体");
//}
private void RightButton_Click(object sender, RoutedEventArgs e)
{
ShowConfirmationAndClose("内侧提升机箱体");
}
//private void RightButton_Click(object sender, RoutedEventArgs e)
//{
// ShowConfirmationAndClose("内侧提升机箱体");
//}
/// <summary>
/// 默认放行A库
/// </summary>
/// <param name="direction"></param>
private void ShowConfirmationAndClose(string direction)
{
if (!directionSelected)
{
MessageBoxResult result = MessageBox.Show("确认放行 " + direction + " 吗?", "确认", MessageBoxButton.YesNo, MessageBoxImage.Question);
if (result == MessageBoxResult.Yes)
{
directionSelected = true;
this.Close();
if (direction== "外侧提升机箱体")
{
SendPlcPassEvent?.Invoke(2,"A");
}
else
{
SendPlcPassEvent?.Invoke(1,"A");
}
///// <summary>
///// 默认放行A库
///// </summary>
///// <param name="direction"></param>
//private void ShowConfirmationAndClose(string direction)
//{
// if (!directionSelected)
// {
// MessageBoxResult result = MessageBox.Show("确认放行 " + direction + " 吗?", "确认", MessageBoxButton.YesNo, MessageBoxImage.Question);
// if (result == MessageBoxResult.Yes)
// {
// directionSelected = true;
// this.Close();
// if (direction== "外侧提升机箱体")
// {
// SendPlcPassEvent?.Invoke(2,"A");
// }
// else
// {
// SendPlcPassEvent?.Invoke(1,"A");
// }
}
}
}
// }
// }
//}
private void Button_Click(object sender, RoutedEventArgs e)
@ -107,5 +101,21 @@ namespace Aucma.Core.ProductOffLine.Views
WordWindow window = new WordWindow();
window.Show();
}
private void Button_Click_2(object sender, RoutedEventArgs e)
{
if(appConfig.PassWord == PassWord.Text.ToString())
{
MessageBox.Show("密码正确");
PassWord.Text = "";
HandSendPlcWindow window = new HandSendPlcWindow();
window.Show();
}
else
{
MessageBox.Show("密码错误");
PassWord.Text = "";
}
}
}
}

@ -0,0 +1,17 @@
<Window x:Class="Aucma.Core.ProductOffLine.Views.HandSendPlcWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:Aucma.Core.ProductOffLine.Views"
mc:Ignorable="d" FontFamily="Microsoft YaHei" WindowStartupLocation="CenterScreen"
Title="手动放行" Height="280" Width="400">
<Grid Background="#1152AC" >
<Button Content="外侧提升机" Click="LeftButton_Click" Height="70" Background="Green" Width="130" Margin="49,107,221,88" />
<Button Content="内侧提升机" Click="RightButton_Click" Height="70" Background="Green" Width="130" Margin="220,107,50,88" />
</Grid>
</Window>

@ -0,0 +1,79 @@
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.Shapes;
namespace Aucma.Core.ProductOffLine.Views
{
/// <summary>
/// HandSendPlcWindow.xaml 的交互逻辑
/// </summary>
public partial class HandSendPlcWindow : Window
{
private bool directionSelected = false; // 用来标识是否已经选择了方向
/// <summary>
/// 下发plc放行信号,传进来扫码器编号分垛方向A或者B,返回plc反馈结果
/// scannerNo == 1内侧scannerNo == 2外侧
/// strDirection "A" ? 1 : 2;入库方向A,B
/// </summary>
public delegate bool SendPlcPass(int scannerNo, string strDirection);
public static event SendPlcPass? SendPlcPassEvent;
public HandSendPlcWindow()
{
InitializeComponent();
}
private void LeftButton_Click(object sender, RoutedEventArgs e)
{
ShowConfirmationAndClose("外侧提升机箱体");
}
private void RightButton_Click(object sender, RoutedEventArgs e)
{
ShowConfirmationAndClose("内侧提升机箱体");
}
/// <summary>
/// 默认放行A库
/// </summary>
/// <param name="direction"></param>
private void ShowConfirmationAndClose(string direction)
{
if (!directionSelected)
{
MessageBoxResult result = MessageBox.Show("确认放行 " + direction + " 吗?", "确认", MessageBoxButton.YesNo, MessageBoxImage.Question);
if (result == MessageBoxResult.Yes)
{
directionSelected = true;
this.Close();
if (direction == "外侧提升机箱体")
{
SendPlcPassEvent?.Invoke(2, "A");
}
else
{
SendPlcPassEvent?.Invoke(1, "A");
}
}
}
}
}
}
Loading…
Cancel
Save