change - 添加入库库存告警

collectionStore
wenjy 6 months ago
parent d50dfd2b38
commit 1118273851

@ -102,7 +102,7 @@ namespace Aucma.Scada.Business
private string shell_materialCodeStr = string.Empty;
private string liner_materialCodeStr = string.Empty;
private string liner_materialCodeStr = string.Empty;
#endregion
private InStoreBusiness()
{
@ -117,7 +117,7 @@ namespace Aucma.Scada.Business
// taskHandle.InStoreFinsihEvent += InStoreFinish;
taskHandle.InStoreAnswerEvent += InStoreAnswer;
taskHandle.BareBoardHandleEvent += BareBoardInStore;
// MvCodeHelper.MessageNoReadEvent += MessageNoRead;
// MvCodeHelper.MessageNoReadEvent += MessageNoRead;
MvCodeHelper.RefreshMaterialCodeStrEvent += InStore;
MvCodeHelper.RefreshLogMessageEvent += PrintLogInfoMessage;
@ -144,11 +144,15 @@ namespace Aucma.Scada.Business
storeCode = appConfig.linerStoreCode;
}
taskHandle.ClearSpaceCode(storeCode);
Task.Run(() =>
{
Thread.Sleep(3000);
taskHandle.ClearSpaceCode(storeCode);
});
PrintLogInfoMessage($"扫码成功,物料码:{materialCode}");
if(storeCode == appConfig.shellStoreCode)
if (storeCode == appConfig.shellStoreCode)
{
shell_materialCodeStr = materialCode;
}
@ -172,6 +176,8 @@ namespace Aucma.Scada.Business
if (result)
{
taskHandle.ClearSpaceCode(storeCode);
#region 2023-12-15 更新过点数据,插入记录到MATERIAL_COMPLETION表
PrintBarCode print = _printBarCodeServices.query(materialCode);
@ -207,6 +213,7 @@ namespace Aucma.Scada.Business
{
//报警停线
PrintLogInfoMessage($"物料码:{materialCode};未匹配到可用货道");
BareBoardInStore(storeCode, false);
}
}
catch (Exception ex)
@ -227,6 +234,8 @@ namespace Aucma.Scada.Business
{
try
{
taskHandle.ClearSpaceCode(storeCode);
string typeStr = isFlag ? "空板入库请求" : "读取失败自动进入异常道";
@ -248,7 +257,7 @@ namespace Aucma.Scada.Business
else
{
string str = storeCode == appConfig.shellStoreCode ? "箱壳异常入库" : "内胆异常入库";
PrintLogInfoMessage(str+"; 未获取到可用的异常货道");
PrintLogInfoMessage(str + "; 未获取到可用的异常货道");
}
}
else
@ -559,7 +568,7 @@ namespace Aucma.Scada.Business
/// </summary>
/// <param name="info"></param>
/// <returns></returns>
private BaseSpaceInfo GetSpaceInfosByPlc(List<BaseSpaceInfo> info,bool isFlag = true)
private BaseSpaceInfo GetSpaceInfosByPlc(List<BaseSpaceInfo> info, bool isFlag = true)
{
BaseSpaceInfo result = null;
if (info != null)

@ -35,6 +35,8 @@ namespace Aucma.Scada.Business
private PlcConfig plcConfig = PlcConfig.Instance;
private JsonChange jsonChange = JsonChange.Instance;
private PlcPool _pool = PlcPool.Instance;
private PlcSpaceConfig spaceConfig = PlcSpaceConfig.Instance;
@ -89,6 +91,12 @@ namespace Aucma.Scada.Business
public delegate void RefreshLinerStock();
public event RefreshLinerStock RefreshLinerStockEvent;
/// <summary>
/// 库容告警
/// </summary>
public delegate void SpaceCapacityAlarm(string storeCode,string spaceName);
public event SpaceCapacityAlarm SpaceCapacityAlarmEvent;
/// <summary>
/// 入库完成
@ -106,7 +114,7 @@ namespace Aucma.Scada.Business
public delegate void InStoreAnswer(string storeCode, string taskCode);
public event InStoreAnswer InStoreAnswerEvent;
public delegate void BareBoardHandle(string storeCode,bool isFlag = true);
public delegate void BareBoardHandle(string storeCode, bool isFlag = true);
public event BareBoardHandle BareBoardHandleEvent;
#endregion
@ -130,12 +138,14 @@ namespace Aucma.Scada.Business
{
Task.Run(() =>
{
Thread.Sleep(2000);
while (true)
Thread.Sleep(2000);
while (true)
{
List<BaseSpaceInfo> spaceList = _spaceInfoService.GetSpaceInfosByStoreCode(appConfig.shellStoreCode, appConfig.linerStoreCode);
if (spaceList != null && spaceList.Count > 0)
{
List<BaseSpaceInfo> spaceList = _spaceInfoService.GetSpaceInfosByStoreCode(appConfig.shellStoreCode, appConfig.linerStoreCode);
if (spaceList != null && spaceList.Count > 0)
{
List<string> ShellAlarmSpaceName = new List<string>();
List<string> LinerAlarmSpaceName = new List<string>();
foreach (BaseSpaceInfo spaceInfo in spaceList)
{
int Stock = spaceInfo.spaceStock;
@ -147,14 +157,37 @@ namespace Aucma.Scada.Business
_spaceInfoService.UpdateSpaceInfo(spaceInfo);
RefreshShellStockEvent?.Invoke();
RefreshLinerStockEvent?.Invoke();
if((spaceInfo.spaceCapacity - spaceInfo.spaceStock) <= 5)
{
if(spaceInfo.storeCode == appConfig.shellStoreCode)
{
ShellAlarmSpaceName.Add(spaceInfo.spaceName);
}
else
{
LinerAlarmSpaceName.Add(spaceInfo.spaceName);
}
}
}
}
}
if (ShellAlarmSpaceName.Count > 0)
{
SpaceCapacityAlarmEvent?.Invoke(appConfig.shellStoreCode,jsonChange.ModeToJson(ShellAlarmSpaceName));
}
if(LinerAlarmSpaceName.Count > 0)
{
SpaceCapacityAlarmEvent?.Invoke(appConfig.linerStoreCode, jsonChange.ModeToJson(LinerAlarmSpaceName));
}
}
Thread.Sleep(3000);
}
});
}
@ -170,12 +203,13 @@ namespace Aucma.Scada.Business
try
{
IPlc _plc = null;
if(storeCode==appConfig.shellStoreCode)
if (storeCode == appConfig.shellStoreCode)
{
_plc = _plcDictionary[appConfig.shellStoreCode];
if (_plc != null)
{
result = _plc.writeInt32ByAddress(plcConfig.in_shell_spaceCode,0);
result = _plc.writeInt32ByAddress(plcConfig.in_shell_spaceCode, 0);
_plc.writeInt32ByAddress(plcConfig.in_shell_bare_board, 0);
}
}
else if (storeCode == appConfig.linerStoreCode)
@ -184,9 +218,10 @@ namespace Aucma.Scada.Business
if (_plc != null)
{
result = _plc.writeInt32ByAddress(plcConfig.in_liner_spaceCode, 0);
_plc.writeInt32ByAddress(plcConfig.in_liner_bare_board, 0);
}
}
}
catch (Exception ex)
{
@ -206,24 +241,24 @@ namespace Aucma.Scada.Business
if (_plc != null)
{
if (_plc.readInt32ByAddress(plcConfig.in_shell_answer) == 1)
{
if (_plc.readInt32ByAddress(plcConfig.in_shell_answer) == 1)
{
Console.WriteLine(plcConfig.in_shell_answer + " 应答字读 1");
logHelper.Info("箱壳入库应答字为1货道号:" + plcConfig.in_shell_spaceCode + ";写" + short.Parse(taskInfo.spaceCode.Substring(5, 1)));
//写入货道号
_plc.writeInt32ByAddress(plcConfig.in_shell_spaceCode, short.Parse(taskInfo.spaceCode.Substring(5, 1)));
Console.WriteLine(plcConfig.in_shell_spaceCode + " 货道号写 "+ short.Parse(taskInfo.spaceCode.Substring(5, 1)));
logHelper.Info("箱壳入库应答字为1货道号:" + plcConfig.in_shell_spaceCode + ";写" + short.Parse(taskInfo.spaceCode.Substring(5, 1)));
//写入货道号
_plc.writeInt32ByAddress(plcConfig.in_shell_spaceCode, short.Parse(taskInfo.spaceCode.Substring(5, 1)));
Console.WriteLine(plcConfig.in_shell_spaceCode + " 货道号写 " + short.Parse(taskInfo.spaceCode.Substring(5, 1)));
//写入完成后读取应答字进行复位
ReadShellAnswer_InStore(taskInfo);
result = 1;
}
else
{
result = 2;
logHelper.PlcLog("应答字为2下发新任务plc未就绪");
}
result = 1;
}
else
{
result = 2;
logHelper.PlcLog("应答字为2下发新任务plc未就绪");
}
}
else
{
@ -253,29 +288,30 @@ namespace Aucma.Scada.Business
{
if (_plc != null)
{
do
do
{
//读取PLC应答字为2时上位机清空写入的入库内容
if (_plc.readInt32ByAddress(plcConfig.in_shell_answer) == 2)
{
//读取PLC应答字为2时上位机清空写入的入库内容
if (_plc.readInt32ByAddress(plcConfig.in_shell_answer) == 2)
{
Console.WriteLine(plcConfig.in_shell_answer + " 应答字读 2" );
Console.WriteLine(plcConfig.in_shell_answer + " 应答字读 2");
logHelper.PlcLog("箱壳入库应答字为2货道号:" + plcConfig.in_shell_spaceCode + ";复位写0");
//写入货道号
_plc.writeInt32ByAddress(plcConfig.in_shell_spaceCode, 0);
//写入货道号
_plc.writeInt32ByAddress(plcConfig.in_shell_spaceCode, 0);
Console.WriteLine(plcConfig.in_shell_spaceCode + " 货道号写 0");
//写入应答字
// _plc.writeInt32ByAddress(plcConfig.in_foam_answer, 0);
_plc.writeInt32ByAddress(plcConfig.in_shell_bare_board, 0);
isFlag = false;
InStoreAnswerEvent?.Invoke(appConfig.shellStoreCode, taskInfo.taskCode);
InStoreAnswerEvent?.Invoke(appConfig.shellStoreCode, taskInfo.taskCode);
// shellTaskInfos.Add(taskInfo);
}
Thread.Sleep(500);
} while (isFlag);
}
Thread.Sleep(500);
} while (isFlag);
}
else
{
@ -305,29 +341,29 @@ namespace Aucma.Scada.Business
if (_plc != null)
{
if (_plc.readInt32ByAddress(plcConfig.in_liner_answer) == 1)
{
logHelper.PlcLog("内胆入库应答字为1货道号:" + plcConfig.in_liner_spaceCode + ";写" + short.Parse(taskInfo.spaceCode.Substring(5, 1)));
//写入货道号
_plc.writeInt32ByAddress(plcConfig.in_liner_spaceCode, short.Parse(taskInfo.spaceCode.Substring(5, 1)));
//写入应答字
// _plc.writeInt32ByAddress(plcConfig.in_foam_answer, 1);
//写入任务号
// _plc.writeStringByAddress(plcConfig.in_foam_task, taskInfo.taskCode);
//写入完成后读取应答字进行复位
ReadLinerAnswer_InStore(taskInfo);
result = 1;
}
else
{
result = 2;
logHelper.PlcLog("内胆应答字为2下发新任务plc未就绪");
}
if (_plc.readInt32ByAddress(plcConfig.in_liner_answer) == 1)
{
logHelper.PlcLog("内胆入库应答字为1货道号:" + plcConfig.in_liner_spaceCode + ";写" + short.Parse(taskInfo.spaceCode.Substring(5, 1)));
//写入货道号
_plc.writeInt32ByAddress(plcConfig.in_liner_spaceCode, short.Parse(taskInfo.spaceCode.Substring(5, 1)));
//写入应答字
// _plc.writeInt32ByAddress(plcConfig.in_foam_answer, 1);
//写入任务号
// _plc.writeStringByAddress(plcConfig.in_foam_task, taskInfo.taskCode);
//写入完成后读取应答字进行复位
ReadLinerAnswer_InStore(taskInfo);
result = 1;
}
else
{
result = 2;
logHelper.PlcLog("内胆应答字为2下发新任务plc未就绪");
}
}
else
{
@ -357,31 +393,32 @@ namespace Aucma.Scada.Business
if (_plc != null)
{
do
do
{
//读取PLC应答字为2时上位机清空写入的入库内容
if (_plc.readInt32ByAddress(plcConfig.in_liner_answer) == 2)
{
//读取PLC应答字为2时上位机清空写入的入库内容
if (_plc.readInt32ByAddress(plcConfig.in_liner_answer) == 2)
{
logHelper.PlcLog("内胆入库应答字为2货道号:" + plcConfig.in_liner_spaceCode + ";复位写0");
//写入货道号
_plc.writeInt32ByAddress(plcConfig.in_liner_spaceCode, 0);
//写入应答字
// _plc.writeInt32ByAddress(plcConfig.in_foam_answer, 0);
logHelper.PlcLog("内胆入库应答字为2货道号:" + plcConfig.in_liner_spaceCode + ";复位写0");
//写入货道号
_plc.writeInt32ByAddress(plcConfig.in_liner_spaceCode, 0);
//写入应答字
// _plc.writeInt32ByAddress(plcConfig.in_foam_answer, 0);
_plc.writeInt32ByAddress(plcConfig.in_liner_bare_board, 0);
isFlag = false;
InStoreAnswerEvent?.Invoke(appConfig.linerStoreCode, taskInfo.taskCode);
//ReadLinerFinish_InStore(taskCode);
// WritePlc(taskInfo.storeCode, taskInfo.spaceCode, false);
isFlag = false;
InStoreAnswerEvent?.Invoke(appConfig.linerStoreCode, taskInfo.taskCode);
//ReadLinerFinish_InStore(taskCode);
// WritePlc(taskInfo.storeCode, taskInfo.spaceCode, false);
// linerTaskInfos.Add(taskInfo);
}
// linerTaskInfos.Add(taskInfo);
}
Thread.Sleep(1000);
} while (isFlag);
Thread.Sleep(1000);
} while (isFlag);
}
else
{
@ -409,11 +446,23 @@ namespace Aucma.Scada.Business
{
if (_plc != null)
{
int i = 0;
while (true)
{
int isFlag = _plc.readInt32ByAddress(plcConfig.in_shell_bare_board);
if (isFlag == 2)
if (isFlag == 1)
{
i++;
if (i == 20)
{
_plc.writeInt32ByAddress(plcConfig.in_shell_bare_board, 0);
BareBoardHandleEvent?.Invoke(appConfig.shellStoreCode, false);
}
}
else if (isFlag == 2)
{
_plc.writeInt32ByAddress(plcConfig.in_shell_bare_board, 0);
@ -421,8 +470,12 @@ namespace Aucma.Scada.Business
Thread.Sleep(1000);
}
else if (isFlag == 0)
{
i = 0;
}
Thread.Sleep(200);
Thread.Sleep(500);
}
}
});
@ -443,11 +496,22 @@ namespace Aucma.Scada.Business
{
if (_plc != null)
{
int i = 0;
while (true)
{
int isFlag = _plc.readInt32ByAddress(plcConfig.in_liner_bare_board);
if (isFlag == 2)
if (isFlag == 1)
{
i++;
if (i == 30)
{
_plc.writeInt32ByAddress(plcConfig.in_liner_bare_board, 0);
BareBoardHandleEvent?.Invoke(appConfig.linerStoreCode, false);
}
}
else if (isFlag == 2)
{
_plc.writeInt32ByAddress(plcConfig.in_liner_bare_board, 0);
@ -455,8 +519,13 @@ namespace Aucma.Scada.Business
Thread.Sleep(1000);
}
Thread.Sleep(200);
else if (isFlag == 0)
{
i = 0;
}
Thread.Sleep(500);
}
}
});
@ -480,7 +549,7 @@ namespace Aucma.Scada.Business
var spaceAddress = spaceConfig.GetSpaceAddress(spaceInfo.storeCode, spaceInfo.spaceCode);
IPlc _plc = _plcDictionary[spaceInfo.storeCode];
// int i = _plc.readInt32ByAddress(plcConfig.in_shell_spaceCode);
if (_plc != null)
{

@ -68,19 +68,13 @@ namespace Aucma.Core.Scanner
{
//更新扫码器存活时间
ShellLiveTime = DateTime.Now;
//Console.WriteLine("箱壳No Read 处理");
Console.WriteLine("箱壳No Read 处理");
//MessageNoReadEvent(appConfig.shellStoreCode);
}
for (Int32 i = 0; i < stBcrResult.nCodeNum; i++)
else
{
bool bIsValidUTF8 = IsTextUTF8(stBcrResult.stBcrInfoEx2[i].chCode);
if (bIsValidUTF8)
{
string strCode = Encoding.UTF8.GetString(stBcrResult.stBcrInfoEx2[i].chCode);
//Console.WriteLine("Get CodeNum: " + "CodeNum[" + i.ToString() + "], CodeString[" + strCode.Trim().TrimEnd('\0') + "]");
}
else
for (Int32 i = 0; i < stBcrResult.nCodeNum; i++)
{
string strCode = Encoding.GetEncoding("GB2312").GetString(stBcrResult.stBcrInfoEx2[i].chCode);
//Console.WriteLine(DateTime.Now + ":箱壳扫码器==>Get CodeNum: " + "CodeNum[" + i.ToString() + "], CodeString[" + strCode.Trim().TrimEnd('\0') + "]");
@ -96,7 +90,7 @@ namespace Aucma.Core.Scanner
}
else
{
if (_realTaskInfoService == null)
{
@ -107,35 +101,27 @@ namespace Aucma.Core.Scanner
//获取当前条码是否存在入库任务
var taskInfo = _realTaskInfoService.GetTaskInfosForInstore(appConfig.shellStoreCode, 0, 1);
if(taskInfo != null)
if (taskInfo != null)
{
var infos = taskInfo.Where(x => x.materialCode == materialCode).ToList();
if (infos.Count > 0)
{
Console.WriteLine("箱壳和上次扫描结果一样,并已存在入库任务");
}
else
{
//更新扫码器存活时间
ShellLiveTime = DateTime.Now;
RefreshMaterialCodeStrEvent?.Invoke(strCode.Trim().TrimEnd('\0'), ShellScannerIp);
SheellLastCode = strCode.Trim().TrimEnd('\0');
}
if (infos.Count > 0)
{
Console.WriteLine("箱壳和上次扫描结果一样,并已存在入库任务");
}
else
{
//更新扫码器存活时间
ShellLiveTime = DateTime.Now;
RefreshMaterialCodeStrEvent?.Invoke(strCode.Trim().TrimEnd('\0'), ShellScannerIp);
SheellLastCode = strCode.Trim().TrimEnd('\0');
}
}
}
}
}
}
MvCodeReader.MV_CODEREADER_OCR_INFO_LIST stOcrInfo = (MvCodeReader.MV_CODEREADER_OCR_INFO_LIST)Marshal.PtrToStructure(stFrameInfo.UnparsedOcrList.pstOcrList, typeof(MvCodeReader.MV_CODEREADER_OCR_INFO_LIST));
for (int i = 0; i < stOcrInfo.nOCRAllNum; i++)
{
string strOcrCharCode = Encoding.UTF8.GetString(stOcrInfo.stOcrRowInfo[i].chOcr);
//Console.WriteLine("Get OcrInfo:" + "ocrNum[" + i.ToString() + "], ocrLen[" + Convert.ToString(stOcrInfo.stOcrRowInfo[i].nOcrLen) + "], ocrChar[" + strOcrCharCode.Trim().TrimEnd('\0') + "]");
}
}
@ -145,26 +131,18 @@ namespace Aucma.Core.Scanner
MvCodeReader.MV_CODEREADER_RESULT_BCR_EX2 stBcrResult = (MvCodeReader.MV_CODEREADER_RESULT_BCR_EX2)Marshal.PtrToStructure(stFrameInfo.UnparsedBcrList.pstCodeListEx2, typeof(MvCodeReader.MV_CODEREADER_RESULT_BCR_EX2));
// Console.WriteLine("CodeNum[" + Convert.ToString(stBcrResult.nCodeNum) + "]");
if (stBcrResult.nCodeNum == 0)
{
// 更新存活时间
LinerLiveTime = DateTime.Now;
// Console.WriteLine("内胆No Read 处理");
Console.WriteLine("内胆No Read 处理");
//MessageNoReadEvent(appConfig.linerStoreCode);
}
for (Int32 i = 0; i < stBcrResult.nCodeNum; i++)
else
{
bool bIsValidUTF8 = IsTextUTF8(stBcrResult.stBcrInfoEx2[i].chCode);
if (bIsValidUTF8)
{
string strCode = Encoding.UTF8.GetString(stBcrResult.stBcrInfoEx2[i].chCode);
// Console.WriteLine("Get CodeNum: " + "CodeNum[" + i.ToString() + "], CodeString[" + strCode.Trim().TrimEnd('\0') + "]");
}
else
for (Int32 i = 0; i < stBcrResult.nCodeNum; i++)
{
string strCode = Encoding.GetEncoding("GB2312").GetString(stBcrResult.stBcrInfoEx2[i].chCode);
//Console.WriteLine(DateTime.Now + ":内胆扫码器==>Get CodeNum: " + "CodeNum[" + i.ToString() + "], CodeString[" + strCode.Trim().TrimEnd('\0') + "]");
string materialCode = strCode.Trim().TrimEnd('\0');
Console.WriteLine($"{DateTime.Now}====>>>内胆扫码成功:{materialCode}");
if (string.IsNullOrEmpty(LinerLastCode) || LinerLastCode != strCode.Trim().TrimEnd('\0'))
@ -176,7 +154,7 @@ namespace Aucma.Core.Scanner
}
else
{
if (_realTaskInfoService == null)
{
Console.WriteLine("内胆和上次扫描结果一样,并且任务队列无法获取");
@ -186,7 +164,7 @@ namespace Aucma.Core.Scanner
//获取当前条码是否存在入库任务
var taskInfo = _realTaskInfoService.GetTaskInfosForInstore(appConfig.linerStoreCode, 0, 1);
if(taskInfo != null)
if (taskInfo != null)
{
var infos = taskInfo.Where(x => x.materialCode == materialCode).ToList();
@ -204,18 +182,9 @@ namespace Aucma.Core.Scanner
}
}
}
}
}
MvCodeReader.MV_CODEREADER_OCR_INFO_LIST stOcrInfo = (MvCodeReader.MV_CODEREADER_OCR_INFO_LIST)Marshal.PtrToStructure(stFrameInfo.UnparsedOcrList.pstOcrList, typeof(MvCodeReader.MV_CODEREADER_OCR_INFO_LIST));
//Console.WriteLine("ocrAllNum[" + Convert.ToString(stOcrInfo.nOCRAllNum) + "]");
for (int i = 0; i < stOcrInfo.nOCRAllNum; i++)
{
string strOcrCharCode = Encoding.UTF8.GetString(stOcrInfo.stOcrRowInfo[i].chOcr);
//Console.WriteLine("Get OcrInfo:" + "ocrNum[" + i.ToString() + "], ocrLen[" + Convert.ToString(stOcrInfo.stOcrRowInfo[i].nOcrLen) + "], ocrChar[" + strOcrCharCode.Trim().TrimEnd('\0') + "]");
}
}
public static void Shell()
@ -238,19 +207,14 @@ namespace Aucma.Core.Scanner
{
// 刷新扫码器状态
RefreshStateEvent?.Invoke("箱壳", false);
RefreshStateEvent?.Invoke("内胆", false);
Thread.Sleep(1000 * 10);
// Console.WriteLine("Enum device failed:{0:x8}", nRet);
break;
}
//Console.WriteLine("Enum device count : " + Convert.ToString(stDevList.nDeviceNum));
if (0 == stDevList.nDeviceNum)
{
// 刷新扫码器状态
RefreshStateEvent?.Invoke("箱壳", false);
RefreshStateEvent?.Invoke("内胆", false);
Thread.Sleep(1000 * 10);
break;
@ -270,8 +234,6 @@ namespace Aucma.Core.Scanner
uint nIp2 = ((stGigEDeviceInfo.nCurrentIp & 0x00ff0000) >> 16);
uint nIp3 = ((stGigEDeviceInfo.nCurrentIp & 0x0000ff00) >> 8);
uint nIp4 = (stGigEDeviceInfo.nCurrentIp & 0x000000ff);
// Console.WriteLine("\n" + i.ToString() + ": [GigE] User Define Name : " + stGigEDeviceInfo.chUserDefinedName);
// Console.WriteLine("device IP :" + nIp1 + "." + nIp2 + "." + nIp3 + "." + nIp4);
string ipStr = nIp1 + "." + nIp2 + "." + nIp3 + "." + nIp4;
if (ipStr == ShellScannerIp)
{
@ -295,7 +257,6 @@ namespace Aucma.Core.Scanner
nRet = device.MV_CODEREADER_CreateHandle_NET(ref stDevInfo);
if (MvCodeReader.MV_CODEREADER_OK != nRet)
{
// Console.WriteLine("Create device failed:{0:x8}", nRet);
// 刷新扫码器状态
RefreshStateEvent?.Invoke("箱壳", false);
break;
@ -306,7 +267,6 @@ namespace Aucma.Core.Scanner
if (MvCodeReader.MV_CODEREADER_OK != nRet)
{
//Console.WriteLine("Open device failed:{0:x8}", nRet);
// 刷新扫码器状态
RefreshStateEvent?.Invoke("箱壳", false);
break;
@ -319,7 +279,6 @@ namespace Aucma.Core.Scanner
nRet = device.MV_CODEREADER_RegisterImageCallBackEx2_NET(ImageCallback, IntPtr.Zero);
if (MvCodeReader.MV_CODEREADER_OK != nRet)
{
//Console.WriteLine("Register image callback failed!");
// 刷新扫码器状态
RefreshStateEvent?.Invoke("箱壳", false);
break;
@ -329,15 +288,11 @@ namespace Aucma.Core.Scanner
nRet = device.MV_CODEREADER_StartGrabbing_NET();
if (MvCodeReader.MV_CODEREADER_OK != nRet)
{
// Console.WriteLine("Start grabbing failed:{0:x8}", nRet);
// 刷新扫码器状态
RefreshStateEvent?.Invoke("箱壳", false);
break;
}
// Console.WriteLine("Press enter to exit");
// Console.WriteLine(DateTime.Now.ToString());
while (true)
{
Thread.Sleep(1000 * 60);
@ -359,7 +314,6 @@ namespace Aucma.Core.Scanner
nRet = device.MV_CODEREADER_StopGrabbing_NET();
if (MvCodeReader.MV_CODEREADER_OK != nRet)
{
// Console.WriteLine("Stop grabbing failed{0:x8}", nRet);
break;
}
@ -367,7 +321,6 @@ namespace Aucma.Core.Scanner
nRet = device.MV_CODEREADER_CloseDevice_NET();
if (MvCodeReader.MV_CODEREADER_OK != nRet)
{
// Console.WriteLine("Close device failed{0:x8}", nRet);
break;
}
@ -375,7 +328,6 @@ namespace Aucma.Core.Scanner
nRet = device.MV_CODEREADER_DestroyHandle_NET();
if (MvCodeReader.MV_CODEREADER_OK != nRet)
{
// Console.WriteLine("Destroy device failed:{0:x8}", nRet);
break;
}
}catch(Exception ex)
@ -409,19 +361,13 @@ namespace Aucma.Core.Scanner
if (MvCodeReader.MV_CODEREADER_OK != nRet)
{
// 刷新扫码器状态
RefreshStateEvent?.Invoke("箱壳", false);
RefreshStateEvent?.Invoke("内胆", false);
Thread.Sleep(1000 * 10);
// Console.WriteLine("Enum device failed:{0:x8}", nRet);
break;
}
// Console.WriteLine("Enum device count : " + Convert.ToString(stDevList.nDeviceNum));
if (0 == stDevList.nDeviceNum)
{
// 刷新扫码器状态
RefreshStateEvent?.Invoke("箱壳", false);
RefreshStateEvent?.Invoke("内胆", false);
Thread.Sleep(1000 * 10);
break;
@ -441,7 +387,6 @@ namespace Aucma.Core.Scanner
uint nIp2 = ((stGigEDeviceInfo.nCurrentIp & 0x00ff0000) >> 16);
uint nIp3 = ((stGigEDeviceInfo.nCurrentIp & 0x0000ff00) >> 8);
uint nIp4 = (stGigEDeviceInfo.nCurrentIp & 0x000000ff);
// Console.WriteLine("\n" + i.ToString() + ": [GigE] User Define Name : " + stGigEDeviceInfo.chUserDefinedName);
string ip = ((stGigEDeviceInfo.nCurrentIp & 0xff000000) >> 24) + "." + ((stGigEDeviceInfo.nCurrentIp & 0x00ff0000) >> 16) + "." + ((stGigEDeviceInfo.nCurrentIp & 0x0000ff00) >> 8) + "." + (stGigEDeviceInfo.nCurrentIp & 0x000000ff);
string ipStr = nIp1 + "." + nIp2 + "." + nIp3 + "." + nIp4;
if (ipStr == LinerScannerIp)
@ -466,7 +411,6 @@ namespace Aucma.Core.Scanner
nRet = device.MV_CODEREADER_CreateHandle_NET(ref stDevInfo);
if (MvCodeReader.MV_CODEREADER_OK != nRet)
{
// Console.WriteLine("Create device failed:{0:x8}", nRet);
break;
}
@ -474,7 +418,6 @@ namespace Aucma.Core.Scanner
nRet = device.MV_CODEREADER_OpenDevice_NET();
if (MvCodeReader.MV_CODEREADER_OK != nRet)
{
// Console.WriteLine("Open device failed:{0:x8}", nRet);
// 刷新扫码器状态
RefreshStateEvent?.Invoke("箱壳", false);
break;
@ -487,7 +430,6 @@ namespace Aucma.Core.Scanner
nRet = device.MV_CODEREADER_RegisterImageCallBackEx2_NET(ImageCallback, IntPtr.Zero);
if (MvCodeReader.MV_CODEREADER_OK != nRet)
{
// Console.WriteLine("Register image callback failed!");
break;
}
@ -495,12 +437,9 @@ namespace Aucma.Core.Scanner
nRet = device.MV_CODEREADER_StartGrabbing_NET();
if (MvCodeReader.MV_CODEREADER_OK != nRet)
{
//Console.WriteLine("Start grabbing failed:{0:x8}", nRet);
break;
}
// Console.WriteLine("Press enter to exit");
// Console.WriteLine(DateTime.Now.ToString());
while (true)
{
Thread.Sleep(1000 * 60);
@ -521,7 +460,6 @@ namespace Aucma.Core.Scanner
nRet = device.MV_CODEREADER_StopGrabbing_NET();
if (MvCodeReader.MV_CODEREADER_OK != nRet)
{
// Console.WriteLine("Stop grabbing failed{0:x8}", nRet);
break;
}
@ -529,7 +467,6 @@ namespace Aucma.Core.Scanner
nRet = device.MV_CODEREADER_CloseDevice_NET();
if (MvCodeReader.MV_CODEREADER_OK != nRet)
{
//Console.WriteLine("Close device failed{0:x8}", nRet);
break;
}
@ -537,7 +474,6 @@ namespace Aucma.Core.Scanner
nRet = device.MV_CODEREADER_DestroyHandle_NET();
if (MvCodeReader.MV_CODEREADER_OK != nRet)
{
//Console.WriteLine("Destroy device failed:{0:x8}", nRet);
break;
}
}catch(Exception ex)
@ -547,18 +483,102 @@ namespace Aucma.Core.Scanner
} while (false);
if (MvCodeReader.MV_CODEREADER_OK != nRet)
Thread.Sleep(1000);
Liner();
}
public static async Task LinerRobot()
{
try
{
// ch:销毁设备 | en:Destroy device
nRet = device.MV_CODEREADER_DestroyHandle_NET();
if (MvCodeReader.MV_CODEREADER_OK != nRet)
while (true)
{
// Console.WriteLine("Destroy device failed:{0:x8}", nRet);
// 枚举设备
MvCodeReader.MV_CODEREADER_DEVICE_INFO_LIST stDevList = new MvCodeReader.MV_CODEREADER_DEVICE_INFO_LIST();
var deviceList = await Task.Run(() => MvCodeReader.MV_CODEREADER_EnumDevices_NET(ref stDevList, MvCodeReader.MV_CODEREADER_GIGE_DEVICE));
if (stDevList.nDeviceNum == 0)
{
await Task.Delay(10000); // 10秒后重试
continue;
}
// 过滤设备
var linerDevice = stDevList.pDeviceInfo
.Select(ptr => (MvCodeReader.MV_CODEREADER_DEVICE_INFO)Marshal.PtrToStructure(ptr, typeof(MvCodeReader.MV_CODEREADER_DEVICE_INFO)))
.FirstOrDefault(info =>
{
if (info.nTLayerType != MvCodeReader.MV_CODEREADER_GIGE_DEVICE) return false;
var gigeDeviceInfo = (MvCodeReader.MV_CODEREADER_GIGE_DEVICE_INFO)MvCodeReader.ByteToStruct(info.SpecialInfo.stGigEInfo, typeof(MvCodeReader.MV_CODEREADER_GIGE_DEVICE_INFO));
return $"{(gigeDeviceInfo.nCurrentIp & 0xff000000) >> 24}.{(gigeDeviceInfo.nCurrentIp & 0x00ff0000) >> 16}.{(gigeDeviceInfo.nCurrentIp & 0x0000ff00) >> 8}.{gigeDeviceInfo.nCurrentIp & 0x000000ff}" == LinerScannerIp;
});
if (stDevList.nDeviceNum == 0)
{
Console.WriteLine("未找到内胆扫码器");
await Task.Delay(30000); // 30秒后重试
continue;
}
var device = new MvCodeReader();
// 创建设备
var handleResult = await Task.Run(() => device.MV_CODEREADER_CreateHandle_NET(ref linerDevice));
if (handleResult != MvCodeReader.MV_CODEREADER_OK)
continue;
// 打开设备
var openResult = await Task.Run(() => device.MV_CODEREADER_OpenDevice_NET());
if (openResult != MvCodeReader.MV_CODEREADER_OK)
{
RefreshStateEvent?.Invoke("箱壳", false);
continue;
}
// 注册回调函数
var imageCallback = new MvCodeReader.cbOutputEx2delegate(LinerImageCallbackFunc);
var registerResult = await Task.Run(() => device.MV_CODEREADER_RegisterImageCallBackEx2_NET(imageCallback, IntPtr.Zero));
if (registerResult != MvCodeReader.MV_CODEREADER_OK)
continue;
// 开启抓图
var startGrabbingResult = await Task.Run(() => device.MV_CODEREADER_StartGrabbing_NET());
if (startGrabbingResult != MvCodeReader.MV_CODEREADER_OK)
continue;
// 等待
while (true)
{
Thread.Sleep(1000 * 60);
DateTime dateTime = DateTime.Now;
TimeSpan timeSpan = dateTime.Subtract(LinerLiveTime);
if (timeSpan.TotalMinutes >= 10)
{
Console.WriteLine("内胆扫码器超时");
break;
}
}
// 停止抓图
var stopGrabbingResult = await Task.Run(() => device.MV_CODEREADER_StopGrabbing_NET());
if (stopGrabbingResult != MvCodeReader.MV_CODEREADER_OK)
continue;
// 关闭设备
var closeResult = await Task.Run(() => device.MV_CODEREADER_CloseDevice_NET());
if (closeResult != MvCodeReader.MV_CODEREADER_OK)
continue;
// 销毁设备
var destroyResult = await Task.Run(() => device.MV_CODEREADER_DestroyHandle_NET());
if (destroyResult != MvCodeReader.MV_CODEREADER_OK)
continue;
}
}
Thread.Sleep(1000);
Liner();
catch (Exception ex)
{
Console.WriteLine($"Liner扫码器异常:{ex.Message}");
}
}
#region 判断字符编码

@ -10,4 +10,16 @@
日志时间2024-03-17 13:45:12,551 [1]
日志级别INFO
日志内容根据产线工位编号1002获取到的执行计划信息[{"objId":583,"executePlanCode":"fcd131dab8a94017b04a2b804e3a87dd","productPlanCode":"2401109907","orderCode":"11239723","materialCode":"8302501428","materialName":"发泡箱体,BC/BD-310NF,预涂钢板,标准白,标准白,1156*570,…","productLineCode":"1002","planAmount":1,"completeAmount":2,"beginTime":"\/Date(1709187489000)\/","endTime":null,"isFlag":0,"executeOrder":2,"executeStatus":3,"createdTime":"\/Date(1709187484000)\/"},{"objId":586,"executePlanCode":"8d08eb9cfbde462f9de8c547607333fb","productPlanCode":"2401109907","orderCode":"11239723","materialCode":"8302501428","materialName":"发泡箱体,BC/BD-310NF,预涂钢板,标准白,标准白,1156*570,…","productLineCode":"1002","planAmount":1,"completeAmount":1,"beginTime":"\/Date(1709188628000)\/","endTime":null,"isFlag":0,"executeOrder":3,"executeStatus":3,"createdTime":"\/Date(1709188623000)\/"},{"objId":582,"executePlanCode":"dc0a98d18e2a4d4b913b70122717d91c","productPlanCode":"2401109907","orderCode":"11239723","materialCode":"8302501428","materialName":"发泡箱体,BC/BD-310NF,预涂钢板,标准白,标准白,1156*570,…","productLineCode":"1002","planAmount":1,"completeAmount":2,"beginTime":"\/Date(1709186992000)\/","endTime":null,"isFlag":0,"executeOrder":1,"executeStatus":3,"createdTime":"\/Date(1709186987000)\/"},{"objId":581,"executePlanCode":"6bdcb3c0fe2c4be797c7fdc4b65940b2","productPlanCode":"2401109907","orderCode":"11239723","materialCode":"8302501428","materialName":"发泡箱体,BC/BD-310NF,预涂钢板,标准白,标准白,1156*570,…","productLineCode":"1002","planAmount":1,"completeAmount":2,"beginTime":"\/Date(1709186966000)\/","endTime":null,"isFlag":0,"executeOrder":0,"executeStatus":3,"createdTime":"\/Date(1709186961000)\/"},{"objId":604,"executePlanCode":"364614ee3ec2476ebb2259fee1b8935c","productPlanCode":"2403069002","orderCode":"11258530","materialCode":"8302501421","materialName":"发泡箱体,BC/BD-208HNE,预涂钢板,黄灰色,标准白,812*535,…","productLineCode":"1002","planAmount":1,"completeAmount":1,"beginTime":"\/Date(1709977344000)\/","endTime":null,"isFlag":0,"executeOrder":5,"executeStatus":3,"createdTime":"\/Date(1709977340000)\/"},{"objId":603,"executePlanCode":"a60e196cc5624c1b81d4c98c8dcfd857","productPlanCode":"2403069002","orderCode":"11258530","materialCode":"8302501421","materialName":"发泡箱体,BC/BD-208HNE,预涂钢板,黄灰色,标准白,812*535,…","productLineCode":"1002","planAmount":1,"completeAmount":1,"beginTime":"\/Date(1709977309000)\/","endTime":null,"isFlag":0,"executeOrder":4,"executeStatus":3,"createdTime":"\/Date(1709977305000)\/"},{"objId":605,"executePlanCode":"f79d4399aac04433bdf898459a34f7d6","productPlanCode":"2403069002","orderCode":"11258530","materialCode":"8302501421","materialName":"发泡箱体,BC/BD-208HNE,预涂钢板,黄灰色,标准白,812*535,…","productLineCode":"1002","planAmount":1,"completeAmount":1,"beginTime":"\/Date(1709977408000)\/","endTime":null,"isFlag":0,"executeOrder":6,"executeStatus":3,"createdTime":"\/Date(1709977401000)\/"},{"objId":644,"executePlanCode":"cd10c0ded296492da7cc43562d856803","productPlanCode":"2402290009","orderCode":"11256193","materialCode":"8302502535","materialName":"?发泡箱体,BC/BD-100HT,预涂钢板,标准白,标准白,525*525,…","productLineCode":"1002","planAmount":1,"completeAmount":1,"beginTime":"\/Date(1710240364000)\/","endTime":null,"isFlag":0,"executeOrder":7,"executeStatus":3,"createdTime":"\/Date(1710240358000)\/"},{"objId":684,"executePlanCode":"7e0e6db87424450d875e3a1397971ac1","productPlanCode":"2402290017","orderCode":"11256191","materialCode":"8302502535","materialName":"?发泡箱体,BC/BD-100HT,预涂钢板,标准白,标准白,525*525,…","productLineCode":"1002","planAmount":1,"completeAmount":1,"beginTime":"\/Date(1710471884000)\/","endTime":null,"isFlag":0,"executeOrder":10,"executeStatus":3,"createdTime":"\/Date(1710471880000)\/"},{"objId":663,"executePlanCode":"e5a33a62aaaf467da83f738ba1da27e5","productPlanCode":"2402290017","orderCode":"11256191","materialCode":"8302502535","materialName":"?发泡箱体,BC/BD-100HT,预涂钢板,标准白,标准白,525*525,…","productLineCode":"1002","planAmount":2,"completeAmount":2,"beginTime":"\/Date(1710299602000)\/","endTime":null,"isFlag":0,"executeOrder":9,"executeStatus":3,"createdTime":"\/Date(1710299598000)\/"},{"objId":662,"executePlanCode":"6f1b32bc4550431f9572c2de5ef493db","productPlanCode":"2402290017","orderCode":"11256191","materialCode":"8302502535","materialName":"?发泡箱体,BC/BD-100HT,预涂钢板,标准白,标准白,525*525,…","productLineCode":"1002","planAmount":1,"completeAmount":1,"beginTime":"\/Date(1710299524000)\/","endTime":null,"isFlag":0,"executeOrder":8,"executeStatus":3,"createdTime":"\/Date(1710299520000)\/"}]
<-------------->
日志时间2024-03-17 18:07:43,261 [1]
日志级别INFO
日志内容HslCommunication 11.0.6.0激活成功
<-------------->
日志时间2024-03-17 18:07:43,306 [1]
日志级别INFO
日志内容HslCommunication 11.0.6.0激活成功
<-------------->
日志时间2024-03-17 18:07:46,016 [1]
日志级别INFO
日志内容根据产线工位编号1002获取到的执行计划信息[]

@ -22,4 +22,156 @@
日志时间2024-03-17 13:45:16,269 [11]
日志级别INFO
日志内容通过PLC地址D7007读取int32类型数据失败
<-------------->
日志时间2024-03-17 18:07:43,275 [1]
日志级别INFO
日志内容三菱Q系列PLC连接开始
<-------------->
日志时间2024-03-17 18:07:43,305 [1]
日志级别INFO
日志内容三菱Q系列PLC建立连接成功
<-------------->
日志时间2024-03-17 18:07:43,306 [1]
日志级别INFO
日志内容三菱Q系列PLC连接开始
<-------------->
日志时间2024-03-17 18:07:43,306 [1]
日志级别INFO
日志内容三菱Q系列PLC建立连接成功
<-------------->
日志时间2024-03-17 18:07:44,336 [12]
日志级别INFO
日志内容通过PLC地址D7007读取int32类型数据成功0
<-------------->
日志时间2024-03-17 18:07:44,336 [11]
日志级别INFO
日志内容通过PLC地址D7007读取int32类型数据成功0
<-------------->
日志时间2024-03-17 18:07:44,539 [12]
日志级别INFO
日志内容通过PLC地址D7007读取int32类型数据成功0
<-------------->
日志时间2024-03-17 18:07:44,539 [11]
日志级别INFO
日志内容通过PLC地址D7007读取int32类型数据成功0
<-------------->
日志时间2024-03-17 18:07:44,753 [11]
日志级别INFO
日志内容通过PLC地址D7007读取int32类型数据成功0
<-------------->
日志时间2024-03-17 18:07:44,753 [12]
日志级别INFO
日志内容通过PLC地址D7007读取int32类型数据成功0
<-------------->
日志时间2024-03-17 18:07:44,954 [12]
日志级别INFO
日志内容通过PLC地址D7007读取int32类型数据成功0
<-------------->
日志时间2024-03-17 18:07:44,954 [11]
日志级别INFO
日志内容通过PLC地址D7007读取int32类型数据成功0
<-------------->
日志时间2024-03-17 18:07:45,170 [12]
日志级别INFO
日志内容通过PLC地址D7007读取int32类型数据成功0
<-------------->
日志时间2024-03-17 18:07:45,171 [11]
日志级别INFO
日志内容通过PLC地址D7007读取int32类型数据成功0
<-------------->
日志时间2024-03-17 18:07:45,415 [11]
日志级别INFO
日志内容通过PLC地址D7007读取int32类型数据成功0
<-------------->
日志时间2024-03-17 18:07:45,415 [12]
日志级别INFO
日志内容通过PLC地址D7007读取int32类型数据成功0
<-------------->
日志时间2024-03-17 18:07:45,631 [12]
日志级别INFO
日志内容通过PLC地址D7007读取int32类型数据成功0
<-------------->
日志时间2024-03-17 18:07:45,631 [11]
日志级别INFO
日志内容通过PLC地址D7007读取int32类型数据成功0
<-------------->
日志时间2024-03-17 18:07:45,832 [12]
日志级别INFO
日志内容通过PLC地址D7007读取int32类型数据成功0
<-------------->
日志时间2024-03-17 18:07:45,832 [11]
日志级别INFO
日志内容通过PLC地址D7007读取int32类型数据成功0
<-------------->
日志时间2024-03-17 18:07:46,059 [12]
日志级别INFO
日志内容通过PLC地址D7007读取int32类型数据成功0
<-------------->
日志时间2024-03-17 18:07:46,059 [11]
日志级别INFO
日志内容通过PLC地址D7007读取int32类型数据成功0
<-------------->
日志时间2024-03-17 18:07:46,262 [11]
日志级别INFO
日志内容通过PLC地址D7007读取int32类型数据成功0
<-------------->
日志时间2024-03-17 18:07:46,262 [12]
日志级别INFO
日志内容通过PLC地址D7007读取int32类型数据成功0
<-------------->
日志时间2024-03-17 18:07:46,465 [11]
日志级别INFO
日志内容通过PLC地址D7007读取int32类型数据成功0
<-------------->
日志时间2024-03-17 18:07:46,465 [12]
日志级别INFO
日志内容通过PLC地址D7007读取int32类型数据成功0
<-------------->
日志时间2024-03-17 18:07:46,670 [12]
日志级别INFO
日志内容通过PLC地址D7007读取int32类型数据成功0
<-------------->
日志时间2024-03-17 18:07:46,670 [11]
日志级别INFO
日志内容通过PLC地址D7007读取int32类型数据成功0
<-------------->
日志时间2024-03-17 18:07:46,873 [11]
日志级别INFO
日志内容通过PLC地址D7007读取int32类型数据成功0
<-------------->
日志时间2024-03-17 18:07:46,873 [12]
日志级别INFO
日志内容通过PLC地址D7007读取int32类型数据成功0
<-------------->
日志时间2024-03-17 18:07:47,075 [11]
日志级别INFO
日志内容通过PLC地址D7007读取int32类型数据成功0
<-------------->
日志时间2024-03-17 18:07:47,075 [12]
日志级别INFO
日志内容通过PLC地址D7007读取int32类型数据成功0
<-------------->
日志时间2024-03-17 18:07:47,276 [12]
日志级别INFO
日志内容通过PLC地址D7007读取int32类型数据成功0
<-------------->
日志时间2024-03-17 18:07:47,276 [11]
日志级别INFO
日志内容通过PLC地址D7007读取int32类型数据成功0
<-------------->
日志时间2024-03-17 18:07:54,785 [12]
日志级别INFO
日志内容通过PLC地址D7007读取int32类型数据成功0
<-------------->
日志时间2024-03-17 18:07:54,785 [11]
日志级别INFO
日志内容通过PLC地址D7007读取int32类型数据成功0
<-------------->
日志时间2024-03-17 18:07:56,098 [12]
日志级别INFO
日志内容通过PLC地址D7007读取int32类型数据成功0
<-------------->
日志时间2024-03-17 18:07:56,098 [11]
日志级别INFO
日志内容通过PLC地址D7007读取int32类型数据成功0

@ -30,4 +30,36 @@
日志时间2024-03-17 13:45:12,640 [1]
日志级别INFO
日志内容SELECT "OBJ_ID","SPACE_CODE","SPACE_NAME","SPACE_CAPACITY","SPACE_STOCK","SPACE_STATUS","SPACE_TYPE","MATERIAL_TYPE","STORE_CODE","IS_FLAG","ONROUTE_AMOUNT","OUTROUTE_AMOUNT","INSTORE_FLAG","OUTSTORE_FLAG","UNUSUAL_FLAG","TYPE_CODE_B","TYPE_CODE_C","TYPE_NAME_A","TYPE_NAME_B","TYPE_NAME_C" FROM "BASE_SPACEINFO" WHERE ( "STORE_CODE" = :storeCode0 );参数:[{"_Size":4000,"IsRefCursor":false,"IsClob":false,"IsNvarchar2":false,"DbType":16,"Direction":0,"IsNullable":false,"ParameterName":":storeCode0","Size":4000,"SourceColumn":null,"SourceColumnNullMapping":false,"UdtTypeName":null,"Value":"NDK-001","TempDate":null,"SourceVersion":0,"TypeName":null,"IsJson":false,"IsArray":false,"CustomDbType":null,"Precision":0,"Scale":0}]
<-------------->
日志时间2024-03-17 18:07:45,449 [1]
日志级别INFO
日志内容SELECT "OBJID","TASK_CODE","TASK_TYPE","TASK_STATUS","TASK_MODEL","PLAN_CODE","MATERIAL_CODE","MATERIAL_TYPE","SPACE_CODE","SPACE_NAME","PLAN_AMOUNT","COMPLETE_AMOUNT","BEGIN_TIME","END_TIME","IS_FLAG","STORE_CODE","CREATED_TIME","DETAIL_CODE" FROM "REAL_TASKINFO" WHERE (( 1 = 1 ) AND((( "TASK_TYPE" = :taskType1 ) AND ( "TASK_STATUS" <> :taskStatus2 )) AND ("STORE_CODE" IN ('XKK-001','NDK-001')) ));参数:[{"_Size":4000,"IsRefCursor":false,"IsClob":false,"IsNvarchar2":false,"DbType":11,"Direction":0,"IsNullable":false,"ParameterName":":taskType1","Size":4000,"SourceColumn":null,"SourceColumnNullMapping":false,"UdtTypeName":null,"Value":1,"TempDate":null,"SourceVersion":0,"TypeName":null,"IsJson":false,"IsArray":false,"CustomDbType":null,"Precision":0,"Scale":0},{"_Size":4000,"IsRefCursor":false,"IsClob":false,"IsNvarchar2":false,"DbType":11,"Direction":0,"IsNullable":false,"ParameterName":":taskStatus2","Size":4000,"SourceColumn":null,"SourceColumnNullMapping":false,"UdtTypeName":null,"Value":3,"TempDate":null,"SourceVersion":0,"TypeName":null,"IsJson":false,"IsArray":false,"CustomDbType":null,"Precision":0,"Scale":0}]
<-------------->
日志时间2024-03-17 18:07:45,487 [1]
日志级别INFO
日志内容SELECT "OBJ_ID","SPACE_CODE","SPACE_NAME","SPACE_CAPACITY","SPACE_STOCK","SPACE_STATUS","SPACE_TYPE","MATERIAL_TYPE","STORE_CODE","IS_FLAG","ONROUTE_AMOUNT","OUTROUTE_AMOUNT","INSTORE_FLAG","OUTSTORE_FLAG","UNUSUAL_FLAG","TYPE_CODE_B","TYPE_CODE_C","TYPE_NAME_A","TYPE_NAME_B","TYPE_NAME_C" FROM "BASE_SPACEINFO" WHERE ((( "STORE_CODE" = :storeCode0 ) OR ( "STORE_CODE" = :storeCode1 )) AND ( "SPACE_STOCK" > :spaceStock2 ));参数:[{"_Size":4000,"IsRefCursor":false,"IsClob":false,"IsNvarchar2":false,"DbType":16,"Direction":0,"IsNullable":false,"ParameterName":":storeCode0","Size":4000,"SourceColumn":null,"SourceColumnNullMapping":false,"UdtTypeName":null,"Value":"XKK-001","TempDate":null,"SourceVersion":0,"TypeName":null,"IsJson":false,"IsArray":false,"CustomDbType":null,"Precision":0,"Scale":0},{"_Size":4000,"IsRefCursor":false,"IsClob":false,"IsNvarchar2":false,"DbType":16,"Direction":0,"IsNullable":false,"ParameterName":":storeCode1","Size":4000,"SourceColumn":null,"SourceColumnNullMapping":false,"UdtTypeName":null,"Value":"NDK-001","TempDate":null,"SourceVersion":0,"TypeName":null,"IsJson":false,"IsArray":false,"CustomDbType":null,"Precision":0,"Scale":0},{"_Size":4000,"IsRefCursor":false,"IsClob":false,"IsNvarchar2":false,"DbType":11,"Direction":0,"IsNullable":false,"ParameterName":":spaceStock2","Size":4000,"SourceColumn":null,"SourceColumnNullMapping":false,"UdtTypeName":null,"Value":0,"TempDate":null,"SourceVersion":0,"TypeName":null,"IsJson":false,"IsArray":false,"CustomDbType":null,"Precision":0,"Scale":0}]
<-------------->
日志时间2024-03-17 18:07:45,554 [1]
日志级别INFO
日志内容SELECT "OBJID","TASK_CODE","TASK_TYPE","TASK_STATUS","TASK_MODEL","PLAN_CODE","MATERIAL_CODE","MATERIAL_TYPE","SPACE_CODE","SPACE_NAME","PLAN_AMOUNT","COMPLETE_AMOUNT","BEGIN_TIME","END_TIME","IS_FLAG","STORE_CODE","CREATED_TIME","DETAIL_CODE" FROM "REAL_TASKINFO" WHERE (( 1 = 1 ) AND((( "TASK_TYPE" = :taskType1 ) AND ( "TASK_STATUS" <> :taskStatus2 )) AND ("STORE_CODE" IN ('XKK-001','NDK-001')) ));参数:[{"_Size":4000,"IsRefCursor":false,"IsClob":false,"IsNvarchar2":false,"DbType":11,"Direction":0,"IsNullable":false,"ParameterName":":taskType1","Size":4000,"SourceColumn":null,"SourceColumnNullMapping":false,"UdtTypeName":null,"Value":2,"TempDate":null,"SourceVersion":0,"TypeName":null,"IsJson":false,"IsArray":false,"CustomDbType":null,"Precision":0,"Scale":0},{"_Size":4000,"IsRefCursor":false,"IsClob":false,"IsNvarchar2":false,"DbType":11,"Direction":0,"IsNullable":false,"ParameterName":":taskStatus2","Size":4000,"SourceColumn":null,"SourceColumnNullMapping":false,"UdtTypeName":null,"Value":3,"TempDate":null,"SourceVersion":0,"TypeName":null,"IsJson":false,"IsArray":false,"CustomDbType":null,"Precision":0,"Scale":0}]
<-------------->
日志时间2024-03-17 18:07:45,595 [1]
日志级别INFO
日志内容SELECT "OBJID","TASK_CODE","TASK_TYPE","TASK_STATUS","TASK_MODEL","PLAN_CODE","MATERIAL_CODE","MATERIAL_TYPE","SPACE_CODE","SPACE_NAME","PLAN_AMOUNT","COMPLETE_AMOUNT","BEGIN_TIME","END_TIME","IS_FLAG","STORE_CODE","CREATED_TIME","DETAIL_CODE" FROM "REAL_TASKINFO" WHERE (( 1 = 1 ) AND(( "TASK_TYPE" = :taskType1 ) AND ("STORE_CODE" IN ('XKK-001','NDK-001')) ));参数:[{"_Size":4000,"IsRefCursor":false,"IsClob":false,"IsNvarchar2":false,"DbType":11,"Direction":0,"IsNullable":false,"ParameterName":":taskType1","Size":4000,"SourceColumn":null,"SourceColumnNullMapping":false,"UdtTypeName":null,"Value":1,"TempDate":null,"SourceVersion":0,"TypeName":null,"IsJson":false,"IsArray":false,"CustomDbType":null,"Precision":0,"Scale":0}]
<-------------->
日志时间2024-03-17 18:07:45,647 [1]
日志级别INFO
日志内容SELECT "OBJ_ID","SPACE_CODE","SPACE_NAME","SPACE_CAPACITY","SPACE_STOCK","SPACE_STATUS","SPACE_TYPE","MATERIAL_TYPE","STORE_CODE","IS_FLAG","ONROUTE_AMOUNT","OUTROUTE_AMOUNT","INSTORE_FLAG","OUTSTORE_FLAG","UNUSUAL_FLAG","TYPE_CODE_B","TYPE_CODE_C","TYPE_NAME_A","TYPE_NAME_B","TYPE_NAME_C" FROM "BASE_SPACEINFO" WHERE ( "STORE_CODE" = :storeCode0 );参数:[{"_Size":4000,"IsRefCursor":false,"IsClob":false,"IsNvarchar2":false,"DbType":16,"Direction":0,"IsNullable":false,"ParameterName":":storeCode0","Size":4000,"SourceColumn":null,"SourceColumnNullMapping":false,"UdtTypeName":null,"Value":"XKK-001","TempDate":null,"SourceVersion":0,"TypeName":null,"IsJson":false,"IsArray":false,"CustomDbType":null,"Precision":0,"Scale":0}]
<-------------->
日志时间2024-03-17 18:07:46,023 [1]
日志级别INFO
日志内容SELECT * FROM "GET_STATION_MATERIALSTATS" WHERE PRODUCTLINE_CODE = :stationCode ;参数:[{"_Size":0,"IsRefCursor":false,"IsClob":false,"IsNvarchar2":false,"DbType":16,"Direction":0,"IsNullable":false,"ParameterName":":stationCode","Size":4000,"SourceColumn":null,"SourceColumnNullMapping":false,"UdtTypeName":null,"Value":"1002","TempDate":null,"SourceVersion":0,"TypeName":null,"IsJson":false,"IsArray":false,"CustomDbType":null,"Precision":0,"Scale":0}]
<-------------->
日志时间2024-03-17 18:07:46,095 [1]
日志级别INFO
日志内容SELECT * FROM "GET_STATION_HOURAMOUNT" WHERE PRODUCTLINE_CODE = :stationCode ;参数:[{"_Size":0,"IsRefCursor":false,"IsClob":false,"IsNvarchar2":false,"DbType":16,"Direction":0,"IsNullable":false,"ParameterName":":stationCode","Size":4000,"SourceColumn":null,"SourceColumnNullMapping":false,"UdtTypeName":null,"Value":"1002","TempDate":null,"SourceVersion":0,"TypeName":null,"IsJson":false,"IsArray":false,"CustomDbType":null,"Precision":0,"Scale":0}]
<-------------->
日志时间2024-03-17 18:07:46,133 [1]
日志级别INFO
日志内容SELECT "OBJ_ID","SPACE_CODE","SPACE_NAME","SPACE_CAPACITY","SPACE_STOCK","SPACE_STATUS","SPACE_TYPE","MATERIAL_TYPE","STORE_CODE","IS_FLAG","ONROUTE_AMOUNT","OUTROUTE_AMOUNT","INSTORE_FLAG","OUTSTORE_FLAG","UNUSUAL_FLAG","TYPE_CODE_B","TYPE_CODE_C","TYPE_NAME_A","TYPE_NAME_B","TYPE_NAME_C" FROM "BASE_SPACEINFO" WHERE ( "STORE_CODE" = :storeCode0 );参数:[{"_Size":4000,"IsRefCursor":false,"IsClob":false,"IsNvarchar2":false,"DbType":16,"Direction":0,"IsNullable":false,"ParameterName":":storeCode0","Size":4000,"SourceColumn":null,"SourceColumnNullMapping":false,"UdtTypeName":null,"Value":"NDK-001","TempDate":null,"SourceVersion":0,"TypeName":null,"IsJson":false,"IsArray":false,"CustomDbType":null,"Precision":0,"Scale":0}]

@ -1,7 +1,7 @@
[system]
#数据库连接
mesConnStr=Data Source=10.100.72.20/ORCLCDB;User ID=c##aucma_mes;Password=aucma
scadaConnStr=Data Source=10.100.72.20/ORCLCDB;User ID=c##aucma_scada;Password=aucma
mesConnStr=Data Source=175.27.215.92/helowin;User ID=aucma_mes;Password=aucma
scadaConnStr=Data Source=175.27.215.92/helowin;User ID=aucma_scada;Password=aucma
#工位编号
stationCode=1002

@ -1,8 +1,8 @@
[plcSystem]
دل؟اPLCIP=10.10.92.22
دل؟اPLCIP=127.0.0.1
箱壳PLC端口=2015
ؤغ<EFBFBD><EFBFBD>PLCIP=10.10.92.29
ؤغ<EFBFBD><EFBFBD>PLC<EFBFBD>ث؟غ=2015
ؤغ<EFBFBD><EFBFBD>PLCIP=127.0.0.1
ؤغ<EFBFBD><EFBFBD>PLC<EFBFBD>ث؟غ=2016
#箱壳空板处理按钮
[shell_null_address]

@ -15,6 +15,7 @@ using System.Collections;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.Runtime.InteropServices;
using System.Runtime.InteropServices.WindowsRuntime;
using System.Windows.Media;
@ -22,12 +23,16 @@ namespace Aucma.Scada.UI.viewModel.InStoreInfo
{
public class InStoreInfoViewModel : ViewModelBase
{
[DllImport("user32.dll")]
public static extern int MessageBoxTimeoutA(IntPtr hWnd, string msg, string Caps, int type, int Id, int time);
private LogHelper logHelper = LogHelper.Instance;
private ObservableCollection<dynamic> listItems = new ObservableCollection<dynamic>();
private ObservableCollection<RealTaskInfo> taskItems = new ObservableCollection<RealTaskInfo>();
private InStoreBusiness inStoreBusiness = InStoreBusiness.Instance;
private OutStoreBusiness outStoreBusiness = OutStoreBusiness.Instance;
private InStoreTaskHandle inStoreTaskHandle = InStoreTaskHandle.Instance;
private AppConfig appConfig = AppConfig.Instance;
public InStoreInfoViewModel()
@ -36,6 +41,17 @@ namespace Aucma.Scada.UI.viewModel.InStoreInfo
inStoreBusiness.RefreshScanMateriaCodeEvent += RefreshScanInfo;
inStoreBusiness.RefreshLogMessageEvent += PrintMessageToListBox;
outStoreBusiness.RefreshStoreStockEvent += Init;
inStoreTaskHandle.SpaceCapacityAlarmEvent += (storeCode, spaceName) =>
{
if(storeCode == appConfig.shellStoreCode)
{
MessageBoxTimeoutA((IntPtr)0, $"箱壳库货道预警:{spaceName}库存即将放满请尽快清理库存3秒后关闭提示", "告警提示", 0, 0, 3000);
}
else
{
MessageBoxTimeoutA((IntPtr)0, $"箱壳库货道预警:{spaceName}库存即将放满请尽快清理库存3秒后关闭提示", "告警提示", 0, 0, 3000);
}
};
QueryCommand = new RelayCommand(Query);

Loading…
Cancel
Save