1365 lines
61 KiB
C#
1365 lines
61 KiB
C#
|
|
using JJServer;
|
|||
|
|
using log4net;
|
|||
|
|
using System;
|
|||
|
|
using System.Collections.Generic;
|
|||
|
|
using System.Drawing;
|
|||
|
|
using System.Linq;
|
|||
|
|
using System.Runtime.InteropServices;
|
|||
|
|
using System.Text;
|
|||
|
|
using System.Threading;
|
|||
|
|
using System.Threading.Tasks;
|
|||
|
|
using System.Xml;
|
|||
|
|
using static JJServer.MyServer;
|
|||
|
|
using static JJMediSys.AlertForm;
|
|||
|
|
using JJMediSys.cs;
|
|||
|
|
|
|||
|
|
namespace JJMediSys
|
|||
|
|
{
|
|||
|
|
public class TubeLabelTool
|
|||
|
|
{
|
|||
|
|
public static ILog logger = LogManager.GetLogger("WebLogger");
|
|||
|
|
private static Mutex mutex = new Mutex(false, "Com");
|
|||
|
|
public bool DevConnect;
|
|||
|
|
public ComTool comTool;
|
|||
|
|
public RecpCreate recpCreate;
|
|||
|
|
public byte[] RecvData;
|
|||
|
|
public DEVSTATUS stat = new DEVSTATUS();
|
|||
|
|
bool SystemInYJmode = false; //是否应急模式
|
|||
|
|
public string ShowComLog;
|
|||
|
|
public int PerSGMaxNum = 9;
|
|||
|
|
public bool IsDevFree = true;
|
|||
|
|
public string BleBarcodeStr = "";
|
|||
|
|
public struct SgSetting
|
|||
|
|
{
|
|||
|
|
public int No { get; set; }
|
|||
|
|
public string[] NameList { get; set; }
|
|||
|
|
public bool InUse { get; set; }
|
|||
|
|
public string Model { get; set; }
|
|||
|
|
public string Recp { get; set; }
|
|||
|
|
public Color color { get; set; }
|
|||
|
|
public string Sgctrol { get; set; }
|
|||
|
|
public bool LJErr { get; set; } //逻辑故障
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
public List<SgSetting> listSgSetting = new List<SgSetting>();
|
|||
|
|
public List<string> canDispenseTubles = new List<string>();
|
|||
|
|
public string EventMsgInfo = "";
|
|||
|
|
|
|||
|
|
|
|||
|
|
[DllImport("kernel32.dll", CharSet = CharSet.Auto, CallingConvention = CallingConvention.StdCall)]
|
|||
|
|
public static extern long GetLastError();
|
|||
|
|
|
|||
|
|
public void LoadSginfo()
|
|||
|
|
{
|
|||
|
|
ShowComLog = ConfigFileReader.GetValue("/configuration/appSettings/add[@key='ShowComLog']");
|
|||
|
|
listSgSetting.Clear();
|
|||
|
|
canDispenseTubles.Clear();
|
|||
|
|
for (int i = 1; i <= 7; i++)
|
|||
|
|
{
|
|||
|
|
string[] Sginfo = ConfigFileReader.GetValue("/configuration/GROUP/SGINFO/add[@key='G" + i.ToString() + "']").Split('|');
|
|||
|
|
if (Sginfo.Length == 6)
|
|||
|
|
{
|
|||
|
|
SgSetting temp = new SgSetting();
|
|||
|
|
temp.InUse = false;
|
|||
|
|
|
|||
|
|
temp.Recp = Sginfo[1];
|
|||
|
|
temp.color = Color.FromName(Sginfo[2]);
|
|||
|
|
temp.No = i;
|
|||
|
|
temp.Model = Sginfo[3];
|
|||
|
|
temp.NameList = Sginfo[4].Split(';').ToArray() ;
|
|||
|
|
if (Sginfo[0] == "1")
|
|||
|
|
{
|
|||
|
|
temp.InUse = true;
|
|||
|
|
foreach(string str in temp.NameList)
|
|||
|
|
{
|
|||
|
|
canDispenseTubles.Add(str);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
}
|
|||
|
|
temp.Sgctrol = Sginfo[5];
|
|||
|
|
temp.LJErr = false;
|
|||
|
|
listSgSetting.Add(temp);
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
public bool Open()
|
|||
|
|
{
|
|||
|
|
try
|
|||
|
|
{
|
|||
|
|
LoadSginfo();
|
|||
|
|
recpCreate = new RecpCreate();
|
|||
|
|
if(comTool!=null && comTool.isOpen())
|
|||
|
|
{
|
|||
|
|
comTool.CloseCom();
|
|||
|
|
}
|
|||
|
|
comTool = new ComTool();
|
|||
|
|
string ComPort = ConfigFileReader.GetValue("/configuration/appSettings/add[@key='ComPort']");
|
|||
|
|
int baudRate = int.Parse(ConfigFileReader.GetValue("/configuration/appSettings/add[@key='baudRate']"));
|
|||
|
|
int dataBit = int.Parse(ConfigFileReader.GetValue("/configuration/appSettings/add[@key='dataBit']"));
|
|||
|
|
float stopBits = float.Parse(ConfigFileReader.GetValue("/configuration/appSettings/add[@key='stopBits']"));
|
|||
|
|
int parity = int.Parse(ConfigFileReader.GetValue("/configuration/appSettings/add[@key='parity']"));
|
|||
|
|
bool DevConnect = comTool.OpenCom(ComPort, baudRate, dataBit, stopBits, parity);
|
|||
|
|
if (DevConnect)
|
|||
|
|
{
|
|||
|
|
logger.Info(string.Format("打开设备串口成功[{0}][{1}][{2}][{3}][{4}]", ComPort, baudRate, dataBit, stopBits, parity));
|
|||
|
|
string[] Arr = SetSgCtrol().Split('|');
|
|||
|
|
if (Arr[0] != "0")
|
|||
|
|
{
|
|||
|
|
logger.Info("设置试管参数失败");
|
|||
|
|
MainForm.DevStat = -1;
|
|||
|
|
return false;
|
|||
|
|
}
|
|||
|
|
logger.Info("设置试管参数成功");
|
|||
|
|
MainForm.DevStat = 0;
|
|||
|
|
|
|||
|
|
}
|
|||
|
|
else
|
|||
|
|
{
|
|||
|
|
long aa = GetLastError();
|
|||
|
|
logger.Error(string.Format("打开设备串口失败[{0}][{1}][{2}][{3}][{4}] Error[{5}]", ComPort, baudRate, dataBit, stopBits, parity, GetLastError()));
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
MainForm.DevStat = -1;
|
|||
|
|
return DevConnect;
|
|||
|
|
|
|||
|
|
}
|
|||
|
|
catch (Exception e)
|
|||
|
|
{
|
|||
|
|
logger.Error(string.Format("打开设备串口异常[{0}]", e.Message));
|
|||
|
|
MainForm.DevStat = -1;
|
|||
|
|
return false;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
public string SetSgCtrol()
|
|||
|
|
{
|
|||
|
|
if (!SystemSet.mTubeLabelTool.IsDevFree)
|
|||
|
|
{
|
|||
|
|
AlertForm.ShowAlert("设备正忙,请稍后", AlertType.Warning, 3);
|
|||
|
|
return "-1|设备正忙,请稍后再试";
|
|||
|
|
}
|
|||
|
|
Byte[] SetInfo = new Byte[43];
|
|||
|
|
SetInfo[0] = 0x71;
|
|||
|
|
int setp = 1;
|
|||
|
|
foreach (var t in listSgSetting)
|
|||
|
|
{
|
|||
|
|
string[] Detail = t.Sgctrol.Split(';');
|
|||
|
|
if (Detail.Length != 3)
|
|||
|
|
return "-1|设置试管参数异常:" + t.Sgctrol;
|
|||
|
|
SetInfo[setp] = (byte)(int.Parse(Detail[0]) / 256);
|
|||
|
|
setp++;
|
|||
|
|
SetInfo[setp] = (byte)(int.Parse(Detail[0]) % 256);
|
|||
|
|
setp++;
|
|||
|
|
SetInfo[setp] = (byte)(int.Parse(Detail[1]) / 256);
|
|||
|
|
setp++;
|
|||
|
|
SetInfo[setp] = (byte)(int.Parse(Detail[1]) % 256);
|
|||
|
|
setp++;
|
|||
|
|
SetInfo[setp] = (byte)(int.Parse(Detail[2]) / 256);
|
|||
|
|
setp++;
|
|||
|
|
SetInfo[setp] = (byte)(int.Parse(Detail[2]) % 256);
|
|||
|
|
setp++;
|
|||
|
|
}
|
|||
|
|
if (!MechineCtrol("SetSysTemInfo", SetInfo, ref RecvData))
|
|||
|
|
return "-1|设置试管参数失败";
|
|||
|
|
return "0|";
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
|
|||
|
|
public string formatbcr(string Barcode)
|
|||
|
|
{
|
|||
|
|
for(int i=0;i<(12- Barcode.Length);i++)
|
|||
|
|
{
|
|||
|
|
Barcode = "0" + Barcode;
|
|||
|
|
}
|
|||
|
|
string Outr = Barcode.Substring(0, 2) + "-" + Barcode.Substring(2, 6) + "-" + Barcode.Substring(8, 4);
|
|||
|
|
return Outr;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
public string formatBqstr(string itemname,string count)
|
|||
|
|
{
|
|||
|
|
int Namelen = 18;
|
|||
|
|
int countlen = 2;
|
|||
|
|
byte[] bytes = Encoding.Unicode.GetBytes(itemname);
|
|||
|
|
|
|||
|
|
// 获取字节数组的长度
|
|||
|
|
int length = bytes.Length;
|
|||
|
|
for (int i = length; i< Namelen;i++)
|
|||
|
|
{
|
|||
|
|
itemname = itemname + " ";
|
|||
|
|
}
|
|||
|
|
for (int i = count.Length; i < countlen; i++)
|
|||
|
|
{
|
|||
|
|
count = count + " ";
|
|||
|
|
}
|
|||
|
|
return itemname + count;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
public bool CheckSystemStatus(ref string msg)
|
|||
|
|
{
|
|||
|
|
string status = GetDevStatus();
|
|||
|
|
string[] Arr = status.Split('|');
|
|||
|
|
if (Arr[0] != "0")
|
|||
|
|
{
|
|||
|
|
msg = "查询设备状态失败,请检查设备连接是否正常";
|
|||
|
|
logger.Info(msg);
|
|||
|
|
return false;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
if (stat.TubeState != 0x50 || stat.PrintState != 0x50 || stat.StickState != 0x50 || stat.BackPrintState != 0x50)
|
|||
|
|
{
|
|||
|
|
if (!MechineCtrol("DevReset", null, ref RecvData))
|
|||
|
|
{
|
|||
|
|
msg = "设备状态异常,复位失败,请检查设备";
|
|||
|
|
logger.Info(msg);
|
|||
|
|
return false;
|
|||
|
|
}
|
|||
|
|
GetDevStatus();
|
|||
|
|
if ((stat.TubeState != 0x50 || stat.PrintState != 0x50 || stat.StickState != 0x50))
|
|||
|
|
{
|
|||
|
|
if (stat.BackPrintState == 0x50)
|
|||
|
|
{
|
|||
|
|
msg = "设备状态异常,进入应急模式";
|
|||
|
|
logger.Info(msg);
|
|||
|
|
SystemInYJmode = true;
|
|||
|
|
return true;
|
|||
|
|
}
|
|||
|
|
else
|
|||
|
|
{
|
|||
|
|
msg = "设备状态异常,请检查设备";
|
|||
|
|
logger.Info(msg);
|
|||
|
|
return false;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
}
|
|||
|
|
else if (stat.BackPrintState != 0x50)
|
|||
|
|
{
|
|||
|
|
msg = "回执打印机故障,请检查设备";
|
|||
|
|
logger.Info(msg);
|
|||
|
|
return false;
|
|||
|
|
}
|
|||
|
|
else
|
|||
|
|
{
|
|||
|
|
SystemInYJmode = false;
|
|||
|
|
return true;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
}
|
|||
|
|
else
|
|||
|
|
{
|
|||
|
|
SystemInYJmode = false;
|
|||
|
|
return true;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
public string GetSGName(string SGxx)
|
|||
|
|
{
|
|||
|
|
//06 紫帽-EDTA抗凝管
|
|||
|
|
//01 蓝帽管,周1-5最迟15:00前送达
|
|||
|
|
//2ml注射器-套洗涤真空管帽
|
|||
|
|
string[] Arr = SGxx.Split(' ');
|
|||
|
|
if (Arr.Length == 1)
|
|||
|
|
return SGxx;
|
|||
|
|
string[] Arr2 = Arr[1].Split(',');
|
|||
|
|
return Arr2[0];
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
public string SetResult(string Msg)
|
|||
|
|
{
|
|||
|
|
EventMsgInfo += $"\r\n发管失败:{Msg}";
|
|||
|
|
Task.Run(() => PublicStatic.EventMgr.ExcuteCmd($"insert into EVENTINFOLIST(Msg,Details,Time) Values('{"发管过程失败"}','{EventMsgInfo}','{DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")}')"));
|
|||
|
|
return "-1|" + Msg;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
|
|||
|
|
public string Dispense(PatientDatail labinfoList)
|
|||
|
|
{
|
|||
|
|
string msg = "";
|
|||
|
|
EventMsgInfo = "";
|
|||
|
|
if (!CheckSystemStatus(ref msg))
|
|||
|
|
{
|
|||
|
|
return "-1|" + msg;
|
|||
|
|
}
|
|||
|
|
string LogStrSGAll = "";
|
|||
|
|
string LogStrSGDisp = "";
|
|||
|
|
string LogStrBQ = "";
|
|||
|
|
RecvData = new byte[1024];
|
|||
|
|
Byte[] DispenseData = new Byte[30];
|
|||
|
|
List<byte[]> BarcodeLsit = new List<byte[]>(); // 条码信息
|
|||
|
|
List<byte[]> SendImageListSG = new List<byte[]>(); //试管便签打印机
|
|||
|
|
List<byte[]> SendImageListHZ = new List<byte[]>(); //副打印机
|
|||
|
|
List<byte[]> SendImageListSGSave = new List<byte[]>(); //试管便签打印机 不带位置信息
|
|||
|
|
int Count = 0;
|
|||
|
|
//DispenseData[0] = 0x70;
|
|||
|
|
string UndisSGInfo = "";
|
|||
|
|
int[] JyOrderID = new int [30];
|
|||
|
|
int OrderID = 0;
|
|||
|
|
bool DispenseFailed = false; //是否有出管失败的情况 如果有则不再重新出管,因为打印头有废标签
|
|||
|
|
foreach (jyData labinfo in labinfoList.jyDatas)
|
|||
|
|
{
|
|||
|
|
logger.Info("dis1: " + labinfo.sgname);
|
|||
|
|
if (labinfo.bqtype == 1) //试管
|
|||
|
|
{
|
|||
|
|
bool Candispense = false;
|
|||
|
|
logger.Info("dis: " + labinfo.sgname);
|
|||
|
|
LogStrSGAll += $"[{labinfo.sgname}] ";
|
|||
|
|
foreach (var t in listSgSetting)
|
|||
|
|
{
|
|||
|
|
if (t.NameList.Contains(labinfo.sgname) && t.InUse && stat.PreSaveTubeSensor[t.No - 1] != 0x00&&!t.LJErr)
|
|||
|
|
{
|
|||
|
|
LogStrSGDisp += $"[{labinfo.sgname}] ";
|
|||
|
|
DispenseData[Count] = (byte)((t.No) | 0xA0);
|
|||
|
|
JyOrderID[Count] = OrderID;
|
|||
|
|
//labinfo.Barcode = labinfo.Barcode + "11";
|
|||
|
|
byte[] PerBarcode = new byte[labinfo.Barcode.Length + 1];
|
|||
|
|
PerBarcode[0] = DispenseData[Count];
|
|||
|
|
Buffer.BlockCopy(System.Text.Encoding.UTF8.GetBytes(labinfo.Barcode), 0, PerBarcode, 1, labinfo.Barcode.Length);
|
|||
|
|
BarcodeLsit.Add(PerBarcode);
|
|||
|
|
|
|||
|
|
byte[] ImageDataSG = new byte[SystemSet.RecpImageSize];
|
|||
|
|
recpCreate.CreateImage(labinfo.sgxx, ref ImageDataSG);
|
|||
|
|
byte[] SendImageData = new byte[SystemSet.RecpImageSize + 2];
|
|||
|
|
SendImageData[0] = (byte)((Count) | 0xB0);
|
|||
|
|
Buffer.BlockCopy(ImageDataSG, 0, SendImageData, 1, SystemSet.RecpImageSize);
|
|||
|
|
byte temp = 0x00;
|
|||
|
|
for (int i = 0; i < SystemSet.RecpImageSize; i++)
|
|||
|
|
{
|
|||
|
|
temp = (byte)(temp + ImageDataSG[i]);
|
|||
|
|
}
|
|||
|
|
SendImageData[SystemSet.RecpImageSize + 1] = temp;
|
|||
|
|
SendImageListSG.Add(SendImageData);
|
|||
|
|
SendImageListSGSave.Add(ImageDataSG);
|
|||
|
|
Count++;
|
|||
|
|
Candispense = true;
|
|||
|
|
break;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
if (!Candispense)
|
|||
|
|
{
|
|||
|
|
LogStrBQ += $"[{labinfo.sgname}] ";
|
|||
|
|
byte[] ImageDataSG = new byte[SystemSet.RecpImageSize];
|
|||
|
|
recpCreate.CreateImage(labinfo.sgxx, ref ImageDataSG);
|
|||
|
|
SendImageListHZ.Add(ImageDataSG);
|
|||
|
|
UndisSGInfo = UndisSGInfo + labinfo.sgname + "@";
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
else
|
|||
|
|
{
|
|||
|
|
LogStrBQ += $"[{labinfo.sgname}] ";
|
|||
|
|
byte[] ImageDataSG = new byte[SystemSet.RecpImageSize];
|
|||
|
|
recpCreate.CreateImage(labinfo.sgxx, ref ImageDataSG);
|
|||
|
|
SendImageListHZ.Add(ImageDataSG);
|
|||
|
|
}
|
|||
|
|
OrderID++;
|
|||
|
|
}
|
|||
|
|
logger.Info("UndisSGInfo: " + UndisSGInfo);
|
|||
|
|
EventMsgInfo += $"准备出管:\r\n所有试管信息:{LogStrSGAll}\r\n尝试出管列表:{LogStrSGDisp}\r\n标签打印列表:{LogStrBQ}";
|
|||
|
|
if (SystemInYJmode)
|
|||
|
|
{
|
|||
|
|
foreach (byte[] image in SendImageListSGSave)
|
|||
|
|
{
|
|||
|
|
SendImageListHZ.Add(image);
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
else
|
|||
|
|
{
|
|||
|
|
if (SendImageListHZ.Count > 0)//先打不能出管的标签及回执标签
|
|||
|
|
{
|
|||
|
|
int TotalCout = SendImageListHZ.Count;
|
|||
|
|
//int PerSend = 0;
|
|||
|
|
int SendedCount = 0;
|
|||
|
|
foreach (byte[] ImageData in SendImageListHZ)
|
|||
|
|
{
|
|||
|
|
if (SendedCount % 10 == 0)
|
|||
|
|
{
|
|||
|
|
byte[] SendLen = { 0x00, 0x00 };
|
|||
|
|
if (TotalCout - SendedCount > 10)
|
|||
|
|
{
|
|||
|
|
SendLen[0] = 0x0A;
|
|||
|
|
}
|
|||
|
|
else
|
|||
|
|
{
|
|||
|
|
SendLen[0] = (byte)(TotalCout - SendedCount);
|
|||
|
|
}
|
|||
|
|
if (!WaitMechinePrepare(ref msg))
|
|||
|
|
{
|
|||
|
|
return SetResult(msg);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
|
|||
|
|
if (!MechineCtrol("GetPrint2Status", SendLen, ref RecvData)) //
|
|||
|
|
{
|
|||
|
|
return SetResult("发送副打印机标签数量失败");
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
byte[] SendImageData = new byte[SystemSet.RecpImageSize + 2];
|
|||
|
|
SendImageData[0] = (byte)((SendedCount % 10) | 0xC0);
|
|||
|
|
Buffer.BlockCopy(ImageData, 0, SendImageData, 1, SystemSet.RecpImageSize);
|
|||
|
|
byte temp = 0x00;
|
|||
|
|
for (int i = 0; i < SystemSet.RecpImageSize; i++)
|
|||
|
|
{
|
|||
|
|
temp = (byte)(temp + ImageData[i]);
|
|||
|
|
}
|
|||
|
|
SendImageData[SystemSet.RecpImageSize + 1] = temp;
|
|||
|
|
if (SystemSet.CancelDispensing) { return SetResult("用户取消"); }
|
|||
|
|
if (!MechineCtrol("SendRecp", SendImageData, ref RecvData)|| RecvData[3]!=0xAA) //发送标签数据
|
|||
|
|
{
|
|||
|
|
return SetResult("发送标签数据失败");
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
SendedCount++;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
if (!WaitMechinePrepare(ref msg))
|
|||
|
|
{
|
|||
|
|
return SetResult(msg);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
SendImageListHZ.Clear();
|
|||
|
|
|
|||
|
|
if (SendImageListSG.Count > 0)//打印试管标签
|
|||
|
|
{
|
|||
|
|
int DispensedCount = 0;
|
|||
|
|
bool NeedDispenseAgain = false; //是否再次出管
|
|||
|
|
List<byte[]> ReSendImageListSG = new List<byte[]>(); //二次出管试管标签 如果不出管 直接发到回执
|
|||
|
|
List<int> ReSendOrderID = new List<int>();
|
|||
|
|
|
|||
|
|
while (DispensedCount< Count)
|
|||
|
|
{
|
|||
|
|
if (SystemSet.CancelDispensing) { return SetResult("用户取消"); }
|
|||
|
|
Byte[] CmdData;
|
|||
|
|
Byte[] CmdBarcodeData;
|
|||
|
|
|
|||
|
|
int StartPoint = DispensedCount;
|
|||
|
|
int CurDispenseCount = 0;
|
|||
|
|
if ((Count- DispensedCount)>= PerSGMaxNum)
|
|||
|
|
{
|
|||
|
|
CmdData = new byte[PerSGMaxNum+1];
|
|||
|
|
CmdData[0] = 0x70;
|
|||
|
|
Buffer.BlockCopy(DispenseData, DispensedCount, CmdData, 1, PerSGMaxNum);
|
|||
|
|
CurDispenseCount = PerSGMaxNum;
|
|||
|
|
|
|||
|
|
Byte[] TempData = new byte[1024];
|
|||
|
|
int CurTempLen = 0;
|
|||
|
|
for (int i = DispensedCount; i < DispensedCount+CurDispenseCount; i++)
|
|||
|
|
{
|
|||
|
|
Buffer.BlockCopy(BarcodeLsit[i], 0, TempData, CurTempLen, BarcodeLsit[i].Length);
|
|||
|
|
CurTempLen += BarcodeLsit[i].Length;
|
|||
|
|
}
|
|||
|
|
CmdBarcodeData = new byte[CurTempLen + 1];
|
|||
|
|
CmdBarcodeData[0] = 0x9B;
|
|||
|
|
Buffer.BlockCopy(TempData, 0, CmdBarcodeData, 1, CurTempLen);
|
|||
|
|
DispensedCount += PerSGMaxNum;
|
|||
|
|
|
|||
|
|
}
|
|||
|
|
else
|
|||
|
|
{
|
|||
|
|
CmdData = new byte[Count - DispensedCount+1];
|
|||
|
|
CmdData[0] = 0x70;
|
|||
|
|
Buffer.BlockCopy(DispenseData, DispensedCount, CmdData, 1, Count - DispensedCount);
|
|||
|
|
CurDispenseCount = Count - DispensedCount;
|
|||
|
|
|
|||
|
|
Byte[] TempData = new byte[1024];
|
|||
|
|
int CurTempLen = 0;
|
|||
|
|
for (int i = DispensedCount; i < DispensedCount+CurDispenseCount; i++)
|
|||
|
|
{
|
|||
|
|
Buffer.BlockCopy(BarcodeLsit[i], 0, TempData, CurTempLen, BarcodeLsit[i].Length);
|
|||
|
|
CurTempLen += BarcodeLsit[i].Length;
|
|||
|
|
}
|
|||
|
|
CmdBarcodeData = new byte[CurTempLen + 1];
|
|||
|
|
CmdBarcodeData[0] = 0x9B;
|
|||
|
|
Buffer.BlockCopy(TempData, 0, CmdBarcodeData, 1, CurTempLen);
|
|||
|
|
|
|||
|
|
DispensedCount = Count;
|
|||
|
|
|
|||
|
|
}
|
|||
|
|
EventMsgInfo = $"{EventMsgInfo}\r\n发管参数:{BitConverter.ToString(CmdData).Replace("-", " ")}";
|
|||
|
|
if (!MechineCtrol("DispenseMult", CmdData, ref RecvData)) //发试管列表
|
|||
|
|
{
|
|||
|
|
return SetResult("发送发管列表失败,请重试");
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
//if (!MechineCtrol("SendBarcodeInfo", CmdBarcodeData, ref RecvData)) //发送条码列表
|
|||
|
|
//return "-1|发送条码列表失败,请重试";
|
|||
|
|
|
|||
|
|
for (int i =0; i< CurDispenseCount; i++) //发标签数据
|
|||
|
|
{
|
|||
|
|
if (SystemSet.CancelDispensing) { return SetResult("用户取消"); }
|
|||
|
|
SendImageListSG[i + StartPoint][0]= (byte)((i) | 0xB0);
|
|||
|
|
if (!MechineCtrol("SendRecp", SendImageListSG[i+StartPoint], ref RecvData) || RecvData[3] != 0xAA)
|
|||
|
|
return SetResult("发送标签数据失败,请重试");
|
|||
|
|
// Thread.Sleep(500);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
if (!WaitMechineDispenseEnd(ref msg)) //等待发管完成
|
|||
|
|
return SetResult(msg);
|
|||
|
|
|
|||
|
|
if (MechineCtrol("GetLastDispenseStatus", null, ref RecvData)) //获取上次试管出管状态
|
|||
|
|
{
|
|||
|
|
byte[] DisPenseStatus = new byte[RecvData.Length - 4];
|
|||
|
|
Buffer.BlockCopy(RecvData, 3, DisPenseStatus, 0, RecvData.Length - 4);
|
|||
|
|
int i = 0;
|
|||
|
|
// DispenseFailed = DispenseFailed|(DisPenseStatus.Any(b => b == 0x02)); //如果有出管失败的记录 就不出管 因为有废标签
|
|||
|
|
EventMsgInfo += $"\r\n出管状态:{BitConverter.ToString(DisPenseStatus).Replace("-", " ")}";
|
|||
|
|
foreach (byte b in DisPenseStatus)
|
|||
|
|
{
|
|||
|
|
if (b != 0x00)//0x01 没管 0x02 出管失败 0x03未操作
|
|||
|
|
{
|
|||
|
|
//if(DispenseFailed)
|
|||
|
|
//{
|
|||
|
|
// if(ReSendImageListSG.Count>0)
|
|||
|
|
// {
|
|||
|
|
// foreach(byte[] ImageData in ReSendImageListSG)
|
|||
|
|
// {
|
|||
|
|
// SendImageListHZ.Add(ImageData);
|
|||
|
|
// }
|
|||
|
|
// ReSendImageListSG.Clear();
|
|||
|
|
// }
|
|||
|
|
// SendImageListHZ.Add(SendImageListSGSave[i + StartPoint]);
|
|||
|
|
// NeedDispenseAgain = false;
|
|||
|
|
//}
|
|||
|
|
//else
|
|||
|
|
//{
|
|||
|
|
if(b==0x02) //设置管仓状态为逻辑错误
|
|||
|
|
{
|
|||
|
|
EventMsgInfo += $"\r\n管仓空管,调整管仓逻辑状态为逻辑空管";
|
|||
|
|
setLJError(CmdData[i + 1]);
|
|||
|
|
MechineCtrol("CarReset", null, ref RecvData); //复位小车 等待小车复位完成
|
|||
|
|
Thread.Sleep(500);
|
|||
|
|
MechineCtrol("LabelReset", null, ref RecvData); //复位小车 等待小车复位完成
|
|||
|
|
if (!WaitMechinePrepare(ref msg))
|
|||
|
|
return SetResult(msg);
|
|||
|
|
|
|||
|
|
}
|
|||
|
|
ReSendOrderID.Add(JyOrderID[i + StartPoint]);
|
|||
|
|
ReSendImageListSG.Add(SendImageListSGSave[i + StartPoint]);
|
|||
|
|
NeedDispenseAgain = true;
|
|||
|
|
//}
|
|||
|
|
}
|
|||
|
|
/*if (b != 0x00)//0x01 没管 0x02 出管失败 0x03未操作
|
|||
|
|
{
|
|||
|
|
SendImageListHZ.Add(SendImageListSGSave[i+ StartPoint]);
|
|||
|
|
}*/
|
|||
|
|
i++;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
else
|
|||
|
|
{
|
|||
|
|
logger.Info("-1|获取试管发管状态失败");
|
|||
|
|
EventMsgInfo += $"\r\n获取试管发管状态失败";
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
if(NeedDispenseAgain)
|
|||
|
|
{
|
|||
|
|
|
|||
|
|
List<byte[]> SendImageListBD = new List<byte[]>();
|
|||
|
|
string Result = DispenseAgain(labinfoList, ReSendOrderID,ref SendImageListBD); //补打标签
|
|||
|
|
string[] Arr = Result.Split('|');
|
|||
|
|
if(Arr[0]!="0")
|
|||
|
|
{
|
|||
|
|
return SetResult(Arr[1]);
|
|||
|
|
}
|
|||
|
|
foreach (byte[] imgedata in SendImageListBD)
|
|||
|
|
{
|
|||
|
|
SendImageListHZ.Add(imgedata);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
if (SendImageListHZ.Count > 0)//补打因为出管失败需要补打的标签
|
|||
|
|
{
|
|||
|
|
EventMsgInfo += $"\r\n补打标签";
|
|||
|
|
int TotalCout = SendImageListHZ.Count;
|
|||
|
|
//int PerSend = 0;
|
|||
|
|
int SendedCount = 0;
|
|||
|
|
foreach (byte[] ImageData in SendImageListHZ)
|
|||
|
|
{
|
|||
|
|
if (SendedCount % 10 == 0)
|
|||
|
|
{
|
|||
|
|
byte[] SendLen = { 0x00, 0x00 };
|
|||
|
|
if (TotalCout - SendedCount > 10)
|
|||
|
|
{
|
|||
|
|
SendLen[0] = 0x0A;
|
|||
|
|
}
|
|||
|
|
else
|
|||
|
|
{
|
|||
|
|
SendLen[0] = (byte)(TotalCout - SendedCount);
|
|||
|
|
}
|
|||
|
|
if (!WaitMechinePrepare(ref msg))
|
|||
|
|
return SetResult(msg);
|
|||
|
|
if (!MechineCtrol("GetPrint2Status", SendLen, ref RecvData)) //
|
|||
|
|
{
|
|||
|
|
return SetResult("发送副打印机标签数量失败");
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
}
|
|||
|
|
byte[] SendImageData = new byte[SystemSet.RecpImageSize + 2];
|
|||
|
|
SendImageData[0] = (byte)((SendedCount % 10) | 0xC0);
|
|||
|
|
Buffer.BlockCopy(ImageData, 0, SendImageData, 1, SystemSet.RecpImageSize);
|
|||
|
|
byte temp = 0x00;
|
|||
|
|
for (int i = 0; i < SystemSet.RecpImageSize; i++)
|
|||
|
|
{
|
|||
|
|
temp = (byte)(temp + ImageData[i]);
|
|||
|
|
}
|
|||
|
|
SendImageData[SystemSet.RecpImageSize + 1] = temp;
|
|||
|
|
if (SystemSet.CancelDispensing) { return SetResult("用户取消"); }
|
|||
|
|
if (!MechineCtrol("SendRecp", SendImageData, ref RecvData) || RecvData[3] != 0xAA) //发送标签数据
|
|||
|
|
return SetResult("发送标签数据失败");
|
|||
|
|
SendedCount++;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
//if(DispenseFailed)
|
|||
|
|
//{
|
|||
|
|
// return "-1|出管异常,请清理主打印头标签" ;
|
|||
|
|
//}
|
|||
|
|
if (!WaitMechinePrepare(ref msg))
|
|||
|
|
return SetResult(msg);
|
|||
|
|
else
|
|||
|
|
{
|
|||
|
|
EventMsgInfo += $"\r\n发管完成";
|
|||
|
|
Task.Run(() => PublicStatic.EventMgr.ExcuteCmd($"insert into EVENTINFOLIST(Msg,Details,Time) Values('{"发管过程成功"}','{EventMsgInfo}','{DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")}')"));
|
|||
|
|
return "0|";
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
public string DispenseAgain(PatientDatail labinfoList, List<int> ReSendOrderID, ref List<byte[]> SendImageListHZ)
|
|||
|
|
{
|
|||
|
|
|
|||
|
|
logger.Info("进入二次打印流程:");
|
|||
|
|
EventMsgInfo += $"\r\n进入二次打印流程";
|
|||
|
|
string msg1 = "" ;
|
|||
|
|
List<byte[]> BarcodeLsit = new List<byte[]>(); // 条码信息
|
|||
|
|
List<byte[]> SendImageListBD = new List<byte[]>(); //副打印机
|
|||
|
|
RecvData = new byte[1024];
|
|||
|
|
Byte[] DispenseData = new Byte[30];
|
|||
|
|
List<byte[]> SendImageListSG = new List<byte[]>(); //试管便签打印机
|
|||
|
|
List<byte[]> SendImageListSGSave = new List<byte[]>(); //试管便签打印机 不带位置信息
|
|||
|
|
int Count = 0;
|
|||
|
|
string UndisSGInfo = "";
|
|||
|
|
int OrderID = 0;
|
|||
|
|
string LogStrSGAll = "";
|
|||
|
|
string LogStrSGDisp = "";
|
|||
|
|
string LogStrBQ = "";
|
|||
|
|
foreach (jyData labinfo in labinfoList.jyDatas)
|
|||
|
|
{
|
|||
|
|
if(!ReSendOrderID.Contains(OrderID))
|
|||
|
|
{
|
|||
|
|
OrderID++;
|
|||
|
|
continue;
|
|||
|
|
}
|
|||
|
|
LogStrSGAll += $"[{labinfo.sgname}] ";
|
|||
|
|
if (labinfo.bqtype == 1) //试管
|
|||
|
|
{
|
|||
|
|
bool Candispense = false;
|
|||
|
|
logger.Info("dis: " + labinfo.sgname);
|
|||
|
|
foreach (var t in listSgSetting)
|
|||
|
|
{
|
|||
|
|
if (t.NameList.Contains(labinfo.sgname) && t.InUse && stat.PreSaveTubeSensor[t.No - 1] != 0x00&&!t.LJErr)
|
|||
|
|
{
|
|||
|
|
LogStrSGDisp += $"[{labinfo.sgname}] ";
|
|||
|
|
DispenseData[Count] = (byte)((t.No) | 0xA0);
|
|||
|
|
byte[] PerBarcode = new byte[labinfo.Barcode.Length + 1];
|
|||
|
|
PerBarcode[0] = DispenseData[Count];
|
|||
|
|
Buffer.BlockCopy(System.Text.Encoding.UTF8.GetBytes(labinfo.Barcode), 0, PerBarcode, 1, labinfo.Barcode.Length);
|
|||
|
|
BarcodeLsit.Add(PerBarcode);
|
|||
|
|
|
|||
|
|
byte[] ImageDataSG = new byte[SystemSet.RecpImageSize];
|
|||
|
|
recpCreate.CreateImage(labinfo.sgxx, ref ImageDataSG);
|
|||
|
|
byte[] SendImageData = new byte[SystemSet.RecpImageSize + 2];
|
|||
|
|
SendImageData[0] = (byte)((Count) | 0xB0);
|
|||
|
|
Buffer.BlockCopy(ImageDataSG, 0, SendImageData, 1, SystemSet.RecpImageSize);
|
|||
|
|
byte temp = 0x00;
|
|||
|
|
for (int i = 0; i < SystemSet.RecpImageSize; i++)
|
|||
|
|
{
|
|||
|
|
temp = (byte)(temp + ImageDataSG[i]);
|
|||
|
|
}
|
|||
|
|
SendImageData[SystemSet.RecpImageSize + 1] = temp;
|
|||
|
|
SendImageListSG.Add(SendImageData);
|
|||
|
|
SendImageListSGSave.Add(ImageDataSG);
|
|||
|
|
Count++;
|
|||
|
|
Candispense = true;
|
|||
|
|
break;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
if (!Candispense)
|
|||
|
|
{
|
|||
|
|
LogStrBQ += $"[{labinfo.sgname}] ";
|
|||
|
|
byte[] ImageDataSG = new byte[SystemSet.RecpImageSize];
|
|||
|
|
recpCreate.CreateImage(labinfo.sgxx, ref ImageDataSG);
|
|||
|
|
SendImageListHZ.Add(ImageDataSG);
|
|||
|
|
UndisSGInfo = UndisSGInfo + labinfo.sgname + "@";
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
else
|
|||
|
|
{
|
|||
|
|
LogStrBQ += $"[{labinfo.sgname}] ";
|
|||
|
|
byte[] ImageDataSG = new byte[SystemSet.RecpImageSize];
|
|||
|
|
recpCreate.CreateImage(labinfo.sgxx, ref ImageDataSG);
|
|||
|
|
SendImageListHZ.Add(ImageDataSG);
|
|||
|
|
}
|
|||
|
|
OrderID++;
|
|||
|
|
}
|
|||
|
|
logger.Info("UndisSGInfo: " + UndisSGInfo);
|
|||
|
|
EventMsgInfo += $"\r\n准备出管:\r\n所有试管信息:{LogStrSGAll}\r\n尝试出管列表:{LogStrSGDisp}\r\n标签打印列表:{LogStrBQ}";
|
|||
|
|
if (SystemInYJmode)
|
|||
|
|
{
|
|||
|
|
foreach (byte[] image in SendImageListSGSave)
|
|||
|
|
{
|
|||
|
|
SendImageListHZ.Add(image);
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
else
|
|||
|
|
{
|
|||
|
|
if (SendImageListSG.Count > 0)//打印试管标签
|
|||
|
|
{
|
|||
|
|
int DispensedCount = 0;
|
|||
|
|
bool DispenseFailed = false; //是否有出管失败的情况 如果有则不再出第二批管,因为打印头有废标签
|
|||
|
|
while (DispensedCount < Count)
|
|||
|
|
{
|
|||
|
|
Byte[] CmdData;
|
|||
|
|
Byte[] CmdBarcodeData;
|
|||
|
|
int StartPoint = DispensedCount;
|
|||
|
|
int CurDispenseCount = 0;
|
|||
|
|
if ((Count - DispensedCount) >= PerSGMaxNum)
|
|||
|
|
{
|
|||
|
|
CmdData = new byte[PerSGMaxNum + 1];
|
|||
|
|
CmdData[0] = 0x70;
|
|||
|
|
Buffer.BlockCopy(DispenseData, DispensedCount, CmdData, 1, PerSGMaxNum);
|
|||
|
|
CurDispenseCount = PerSGMaxNum;
|
|||
|
|
Byte[] TempData = new byte[1024];
|
|||
|
|
int CurTempLen = 0;
|
|||
|
|
for (int i = DispensedCount; i < CurDispenseCount; i++)
|
|||
|
|
{
|
|||
|
|
Buffer.BlockCopy(BarcodeLsit[i], 0, TempData, CurTempLen, BarcodeLsit[i].Length);
|
|||
|
|
CurTempLen += BarcodeLsit[i].Length;
|
|||
|
|
}
|
|||
|
|
CmdBarcodeData = new byte[CurTempLen + 1];
|
|||
|
|
CmdBarcodeData[0] = 0x9B;
|
|||
|
|
Buffer.BlockCopy(TempData, 0, CmdBarcodeData, 1, CurTempLen);
|
|||
|
|
DispensedCount += PerSGMaxNum;
|
|||
|
|
|
|||
|
|
}
|
|||
|
|
else
|
|||
|
|
{
|
|||
|
|
CmdData = new byte[Count - DispensedCount + 1];
|
|||
|
|
CmdData[0] = 0x70;
|
|||
|
|
Buffer.BlockCopy(DispenseData, DispensedCount, CmdData, 1, Count - DispensedCount);
|
|||
|
|
CurDispenseCount = Count - DispensedCount;
|
|||
|
|
|
|||
|
|
Byte[] TempData = new byte[1024];
|
|||
|
|
int CurTempLen = 0;
|
|||
|
|
for (int i = DispensedCount; i < DispensedCount + CurDispenseCount; i++)
|
|||
|
|
{
|
|||
|
|
Buffer.BlockCopy(BarcodeLsit[i], 0, TempData, CurTempLen, BarcodeLsit[i].Length);
|
|||
|
|
CurTempLen += BarcodeLsit[i].Length;
|
|||
|
|
}
|
|||
|
|
CmdBarcodeData = new byte[CurTempLen + 1];
|
|||
|
|
CmdBarcodeData[0] = 0x9B;
|
|||
|
|
Buffer.BlockCopy(TempData, 0, CmdBarcodeData, 1, CurTempLen);
|
|||
|
|
|
|||
|
|
DispensedCount = Count;
|
|||
|
|
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//if (DispenseFailed) //如果前面已经报出管错误,则后面的管只打标签 因为出管失败可能有标签在打印头 会贴错管
|
|||
|
|
//{
|
|||
|
|
// for (int i = 0; i < CurDispenseCount; i++)
|
|||
|
|
// {
|
|||
|
|
// SendImageListHZ.Add(SendImageListSGSave[i + StartPoint]);
|
|||
|
|
// }
|
|||
|
|
// continue;
|
|||
|
|
//}
|
|||
|
|
EventMsgInfo += $"\r\n发管参数:{BitConverter.ToString(CmdData).Replace("-", " ")}";
|
|||
|
|
if (!MechineCtrol("DispenseMult", CmdData, ref RecvData)) //发试管列表
|
|||
|
|
return "-1|发送发管列表失败,请重试";
|
|||
|
|
|
|||
|
|
//if (!MechineCtrol("SendBarcodeInfo", CmdBarcodeData, ref RecvData)) //发送条码列表
|
|||
|
|
// return "-1|发送条码列表失败,请重试";
|
|||
|
|
|
|||
|
|
for (int i = 0; i < CurDispenseCount; i++) //发标签数据
|
|||
|
|
{
|
|||
|
|
if (SystemSet.CancelDispensing) { return "-1|用户取消"; }
|
|||
|
|
SendImageListSG[i + StartPoint][0] = (byte)((i) | 0xB0);
|
|||
|
|
if (!MechineCtrol("SendRecp", SendImageListSG[i + StartPoint], ref RecvData) || RecvData[3] != 0xAA)
|
|||
|
|
return "-1|发送标签数据失败,请重试";
|
|||
|
|
// Thread.Sleep(500);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
string msg = "";
|
|||
|
|
Thread.Sleep(1000);
|
|||
|
|
if (!WaitMechineDispenseEnd(ref msg)) //等待发管完成
|
|||
|
|
return "-1|" + msg;
|
|||
|
|
|
|||
|
|
if (MechineCtrol("GetLastDispenseStatus", null, ref RecvData)) //获取上次试管出管状态
|
|||
|
|
{
|
|||
|
|
byte[] DisPenseStatus = new byte[RecvData.Length - 4];
|
|||
|
|
Buffer.BlockCopy(RecvData, 3, DisPenseStatus, 0, RecvData.Length - 4);
|
|||
|
|
EventMsgInfo += $"\r\n出管状态:{BitConverter.ToString(DisPenseStatus).Replace("-", " ")}";
|
|||
|
|
DispenseFailed = DispenseFailed | (DisPenseStatus.Any(b => b == 0x02)); //如果有出管失败的记录 就不出管 因为有废标签
|
|||
|
|
int i = 0;
|
|||
|
|
foreach (byte b in DisPenseStatus)
|
|||
|
|
{
|
|||
|
|
if (b != 0x00)//0x01 没管 0x02 出管失败 0x03未操作
|
|||
|
|
{
|
|||
|
|
SendImageListHZ.Add(SendImageListSGSave[i+ StartPoint]);
|
|||
|
|
}
|
|||
|
|
i++;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
else
|
|||
|
|
{
|
|||
|
|
logger.Info("-1|获取试管发管状态失败");
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
return "0|";
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
public bool WaitMechinePrepare(ref string Msg)
|
|||
|
|
{
|
|||
|
|
int Time = 60;
|
|||
|
|
bool Ready = false;
|
|||
|
|
Msg = "系统忙或组件状态异常";
|
|||
|
|
while (Time > 0 && !Ready)
|
|||
|
|
{
|
|||
|
|
if(SystemSet.CancelDispensing)
|
|||
|
|
{
|
|||
|
|
Msg = "用户取消";
|
|||
|
|
return false;
|
|||
|
|
}
|
|||
|
|
GetDevStatus();
|
|||
|
|
if (stat.TubeState == 0x50 && stat.PrintState == 0x50 && stat.StickState == 0x50 && stat.BackPrintState == 0x50)
|
|||
|
|
{
|
|||
|
|
Ready = true;
|
|||
|
|
}
|
|||
|
|
else if (stat.TubeState == 0x53 || stat.PrintState == 0x53 || stat.StickState == 0x53)
|
|||
|
|
{
|
|||
|
|
if (stat.BackPrintState == 0x50)
|
|||
|
|
return true;
|
|||
|
|
else
|
|||
|
|
return false;
|
|||
|
|
}
|
|||
|
|
else
|
|||
|
|
{
|
|||
|
|
Time--;
|
|||
|
|
Thread.Sleep(500);
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
return Ready;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
public bool WaitMechineDispenseEnd(ref string Msg)
|
|||
|
|
{
|
|||
|
|
int Time = 120;
|
|||
|
|
bool Ready = false;
|
|||
|
|
Msg = "设备状态正忙";
|
|||
|
|
while (Time > 0 && !Ready)
|
|||
|
|
{
|
|||
|
|
if (SystemSet.CancelDispensing)
|
|||
|
|
{
|
|||
|
|
Msg = "用户取消";
|
|||
|
|
return false;
|
|||
|
|
}
|
|||
|
|
GetDevStatus();
|
|||
|
|
if (stat.TubeState == 0x50 && stat.PrintState == 0x50 && stat.StickState == 0x50 && stat.BackPrintState == 0x50)
|
|||
|
|
{
|
|||
|
|
Ready = true;
|
|||
|
|
}
|
|||
|
|
else if (stat.TubeState == 0x53 || stat.PrintState == 0x53 || stat.StickState == 0x53)
|
|||
|
|
{
|
|||
|
|
if (stat.BackPrintState == 0x50)
|
|||
|
|
return true;
|
|||
|
|
else
|
|||
|
|
{
|
|||
|
|
Msg = "设备模块状态异常,请检查";
|
|||
|
|
return false;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
}
|
|||
|
|
else if ( stat.StickState == 0x52&&(stat.StickBugCode==0xE9|| stat.StickBugCode == 0xEA))//试管扫码异常
|
|||
|
|
{
|
|||
|
|
Msg = "试管条码检测异常,请仔细核对试管上的条码";
|
|||
|
|
return false;
|
|||
|
|
}
|
|||
|
|
else
|
|||
|
|
{
|
|||
|
|
Time--;
|
|||
|
|
Thread.Sleep(500);
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
return Ready;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
public bool MechineCtrol(string Cmd, Byte[] sendData, ref Byte[] RecvData)
|
|||
|
|
{
|
|||
|
|
if(!mutex.WaitOne())
|
|||
|
|
{
|
|||
|
|
return false;
|
|||
|
|
}
|
|||
|
|
Byte[] toSend;
|
|||
|
|
IsDevFree = false;
|
|||
|
|
logger.Info($"CmdIn:{Cmd}");
|
|||
|
|
switch (Cmd)
|
|||
|
|
{
|
|||
|
|
case "SendRecp":
|
|||
|
|
{
|
|||
|
|
toSend = new Byte[SystemSet.RecpImageSize + 3];
|
|||
|
|
toSend[0] = 0xAA;
|
|||
|
|
// toSend[1] = 0xAA;
|
|||
|
|
Buffer.BlockCopy(sendData, 0, toSend, 1, sendData.Length);
|
|||
|
|
break;
|
|||
|
|
}
|
|||
|
|
case "RecpReset":
|
|||
|
|
{
|
|||
|
|
toSend = new Byte[4] { 0x02, 0x01, 0xCB, 0x03 };
|
|||
|
|
break;
|
|||
|
|
}
|
|||
|
|
case "Recp2Reset":
|
|||
|
|
{
|
|||
|
|
toSend = new Byte[5] { 0x02, 0x02, 0xDC, 0x01, 0x03 };
|
|||
|
|
break;
|
|||
|
|
}
|
|||
|
|
case "PrintTest":
|
|||
|
|
{
|
|||
|
|
toSend = new Byte[4] { 0x02, 0x01, 0xC0, 0x03 };
|
|||
|
|
break;
|
|||
|
|
}
|
|||
|
|
case "LabelReset":
|
|||
|
|
{
|
|||
|
|
toSend = new Byte[4] { 0x02, 0x01, 0x52, 0x03 };
|
|||
|
|
break;
|
|||
|
|
}
|
|||
|
|
case "CarReset":
|
|||
|
|
{
|
|||
|
|
toSend = new Byte[4] { 0x02, 0x01, 0xA0, 0x03 };
|
|||
|
|
break;
|
|||
|
|
}
|
|||
|
|
case "DevReset":
|
|||
|
|
{
|
|||
|
|
toSend = new Byte[4] { 0x02, 0x01, 0xCA, 0x03 };
|
|||
|
|
break;
|
|||
|
|
}
|
|||
|
|
case "Dispense":
|
|||
|
|
{
|
|||
|
|
toSend = new Byte[8] { 0x02, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03 };
|
|||
|
|
Buffer.BlockCopy(sendData, 0, toSend, 2, sendData.Length);
|
|||
|
|
break;
|
|||
|
|
}
|
|||
|
|
case "DispenseMult":
|
|||
|
|
{
|
|||
|
|
toSend = new Byte[sendData.Length + 3];
|
|||
|
|
toSend[0] = 0x02;
|
|||
|
|
toSend[1] = (byte)sendData.Length;
|
|||
|
|
toSend[sendData.Length + 2] = 0x03;
|
|||
|
|
Buffer.BlockCopy(sendData, 0, toSend, 2, sendData.Length);
|
|||
|
|
break;
|
|||
|
|
}
|
|||
|
|
case "SendBarcodeInfo":
|
|||
|
|
{
|
|||
|
|
toSend = new Byte[sendData.Length + 3];
|
|||
|
|
toSend[0] = 0x02;
|
|||
|
|
toSend[1] = (byte)sendData.Length;
|
|||
|
|
toSend[sendData.Length + 2] = 0x03;
|
|||
|
|
Buffer.BlockCopy(sendData, 0, toSend, 2, sendData.Length);
|
|||
|
|
break;
|
|||
|
|
}
|
|||
|
|
case "GetStatus":
|
|||
|
|
{
|
|||
|
|
toSend = new Byte[4] { 0x02, 0x01, 0x57, 0x03 };
|
|||
|
|
break;
|
|||
|
|
}
|
|||
|
|
case "SetSysTemInfo":
|
|||
|
|
{
|
|||
|
|
toSend = new Byte[sendData.Length + 3];
|
|||
|
|
toSend[0] = 0x02;
|
|||
|
|
toSend[1] = (byte)sendData.Length;
|
|||
|
|
toSend[sendData.Length + 2] = 0x03;
|
|||
|
|
Buffer.BlockCopy(sendData, 0, toSend, 2, sendData.Length);
|
|||
|
|
break;
|
|||
|
|
}
|
|||
|
|
case "CutRecp":
|
|||
|
|
{
|
|||
|
|
toSend = new Byte[4] { 0x02, 0x01, 0xB0, 0x03 };
|
|||
|
|
break;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
case "GetPrint2Status": //副打印机状态
|
|||
|
|
{
|
|||
|
|
toSend = new Byte[5] { 0x02, 0x02, 0x72, 0x00, 0x03 };
|
|||
|
|
toSend[3] = sendData[0];
|
|||
|
|
break;
|
|||
|
|
}
|
|||
|
|
case "GetVersion":
|
|||
|
|
{
|
|||
|
|
toSend = new Byte[4] { 0x02, 0x01, 0x79, 0x03 };
|
|||
|
|
break;
|
|||
|
|
}
|
|||
|
|
case "ReplaceRecp":
|
|||
|
|
{
|
|||
|
|
toSend = new Byte[6] { 0x02, 0x03, 0x9F, 0x01, 0x0E, 0x03 };
|
|||
|
|
break;
|
|||
|
|
}
|
|||
|
|
case "SendaLabel":
|
|||
|
|
{
|
|||
|
|
toSend = new Byte[4] { 0x02, 0x01, 0x75, 0x03 };
|
|||
|
|
break;
|
|||
|
|
}
|
|||
|
|
case "GetLastDispenseStatus":
|
|||
|
|
{
|
|||
|
|
toSend = new Byte[4] { 0x02, 0x01, 0x97, 0x03 };
|
|||
|
|
break;
|
|||
|
|
}
|
|||
|
|
case "InitSensor":
|
|||
|
|
{
|
|||
|
|
toSend = new Byte[4] { 0x02, 0x01, 0x90, 0x03 };
|
|||
|
|
break;
|
|||
|
|
}
|
|||
|
|
case "SetTbPargs":
|
|||
|
|
{
|
|||
|
|
toSend = new Byte[7] { 0x02, 0x04, 0xC6, 0x00, 0x00, 0x00, 0x03 };
|
|||
|
|
Buffer.BlockCopy(sendData, 0, toSend, 3, sendData.Length);
|
|||
|
|
break;
|
|||
|
|
}
|
|||
|
|
case "GetTbPargs":
|
|||
|
|
{
|
|||
|
|
toSend = new Byte[4] { 0x02, 0x01, 0x7b, 0x03 };
|
|||
|
|
break;
|
|||
|
|
}
|
|||
|
|
case "SetQdPargs":
|
|||
|
|
{
|
|||
|
|
toSend = new Byte[7] { 0x02, 0x04, 0x76, 0x00, 0x00, 0x00, 0x03 };
|
|||
|
|
Buffer.BlockCopy(sendData, 0, toSend, 3, sendData.Length);
|
|||
|
|
break;
|
|||
|
|
}
|
|||
|
|
case "GetQdPargs":
|
|||
|
|
{
|
|||
|
|
toSend = new Byte[4] { 0x02, 0x01, 0x77, 0x03 };
|
|||
|
|
break;
|
|||
|
|
}
|
|||
|
|
case "SetSmPargs":
|
|||
|
|
{
|
|||
|
|
toSend = new Byte[7] { 0x02, 0x04, 0x5c, 0x00, 0x00, 0x00, 0x03 };
|
|||
|
|
Buffer.BlockCopy(sendData, 0, toSend, 3, sendData.Length);
|
|||
|
|
break;
|
|||
|
|
}
|
|||
|
|
case "GetSmPargs":
|
|||
|
|
{
|
|||
|
|
toSend = new Byte[4] { 0x02, 0x01, 0x5d, 0x03 };
|
|||
|
|
break;
|
|||
|
|
}
|
|||
|
|
case "GetBoxBarcode":
|
|||
|
|
{
|
|||
|
|
toSend = new Byte[5] { 0x02, 0x02, 0xc7,0x03, 0x03 };
|
|||
|
|
break;
|
|||
|
|
}
|
|||
|
|
default:
|
|||
|
|
{
|
|||
|
|
IsDevFree = true;
|
|||
|
|
return false;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
try
|
|||
|
|
{
|
|||
|
|
if (Cmd.Equals("DevReset"))
|
|||
|
|
RecvData = comTool.SendAndRecv(toSend, 10000);
|
|||
|
|
else if (Cmd.Equals("CarReset") || Cmd.Equals("LabelReset") || Cmd.Equals("SendaLabel") || Cmd.Equals("InitSensor") || Cmd.Equals("SetTbPargs") || Cmd.Equals("SetQdPargs") || Cmd.Equals("SetSmPargs") || Cmd.Equals("GetBoxBarcode"))
|
|||
|
|
RecvData = comTool.SendAndRecv(toSend, 500);
|
|||
|
|
else if (Cmd.Equals("GetStatus"))
|
|||
|
|
RecvData = comTool.SendAndRecv(toSend, 1500);
|
|||
|
|
else
|
|||
|
|
RecvData = comTool.SendAndRecv(toSend);
|
|||
|
|
if (ShowComLog != "0")
|
|||
|
|
{
|
|||
|
|
logger.Info(string.Format("\r\nOUT[{0}]\r\nIN[{1}]", BitConverter.ToString(toSend).Replace("-", " "), BitConverter.ToString(RecvData, 0, Math.Min(RecvData.Length, 300)).Replace("-", " ")));
|
|||
|
|
}
|
|||
|
|
MainForm.DevStat = 0;
|
|||
|
|
|
|||
|
|
}
|
|||
|
|
catch (Exception e)
|
|||
|
|
{
|
|||
|
|
logger.Info(string.Format("\r\nOUT[{0}]\r\nIN[{1}]", BitConverter.ToString(toSend).Replace("-", " "), e.Message));
|
|||
|
|
IsDevFree = true;
|
|||
|
|
mutex.ReleaseMutex();
|
|||
|
|
MainForm.DevStat = -1;
|
|||
|
|
return false;
|
|||
|
|
}
|
|||
|
|
IsDevFree = true;
|
|||
|
|
mutex.ReleaseMutex();
|
|||
|
|
return true;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
[StructLayout(LayoutKind.Sequential, Pack = 1)]
|
|||
|
|
public struct DEVSTATUS
|
|||
|
|
{
|
|||
|
|
public byte Command; //机器正在执行的指令
|
|||
|
|
//public byte Rubish; //垃圾
|
|||
|
|
public byte TubeState; //选管单元状态
|
|||
|
|
public byte PrintState; //打印单元状态
|
|||
|
|
public byte StickState; //贴标单元状态
|
|||
|
|
public byte BackPrintState; //副打印单元状态
|
|||
|
|
public byte TubeBugCode; //选管单元故障代码
|
|||
|
|
public byte PrintBugCode; //打印单元故障代码
|
|||
|
|
public byte StickBugCode; //贴标单元故障代码
|
|||
|
|
public byte BackPrintBugCode; //副打印机单元故障代码
|
|||
|
|
public byte CarCommand; //小车在执行的指令
|
|||
|
|
public byte CarUnitState; //挖管单元状态
|
|||
|
|
public byte CarMotorState; //小车电机状态
|
|||
|
|
public byte CarOriginalSensor; //小车原点传感器
|
|||
|
|
public byte CarPositionSensor; //小车位置传感器
|
|||
|
|
[MarshalAsAttribute(UnmanagedType.ByValArray, SizeConst = 7, ArraySubType = UnmanagedType.Struct)]
|
|||
|
|
public byte[] PreSaveTubeSensor; //管箱预存传感器
|
|||
|
|
public byte CarLeftSensor; //小车落管左传感器
|
|||
|
|
public byte CarMidSensor; //小车落管中传感器
|
|||
|
|
public byte CarRightSensor; //小车落管右传感器
|
|||
|
|
//public byte FrontMagState; //前电磁铁状态,第一管箱电磁铁
|
|||
|
|
//public byte RearMagState; //后电磁铁状态,其他管箱
|
|||
|
|
[MarshalAsAttribute(UnmanagedType.ByValArray, SizeConst = 2, ArraySubType = UnmanagedType.Struct)]
|
|||
|
|
public byte[] FrontMagSensor; //前电磁铁传感器
|
|||
|
|
[MarshalAsAttribute(UnmanagedType.ByValArray, SizeConst = 2, ArraySubType = UnmanagedType.Struct)]
|
|||
|
|
public byte[] RearMagSensor; //后电磁铁传感器
|
|||
|
|
public byte StickCommand; //贴标单元在执行的指令
|
|||
|
|
public byte StickUnitState; //贴标单元状态
|
|||
|
|
public byte RotateMotorState; //贴标旋转电机状态
|
|||
|
|
public byte LeftWallMotorState; //左挡板电机状态
|
|||
|
|
public byte RightWallMotorState; //右挡板电机状态
|
|||
|
|
public byte LiftMotorState; //抬升电机状态
|
|||
|
|
public byte LeftWallSensor; //左挡板传感器
|
|||
|
|
public byte RightWallSensor; //右挡板传感器
|
|||
|
|
// [MarshalAsAttribute(UnmanagedType.ByValArray, SizeConst = 2, ArraySubType = UnmanagedType.Struct)]
|
|||
|
|
public byte LiftSensor; //抬升传感器
|
|||
|
|
[MarshalAsAttribute(UnmanagedType.ByValArray, SizeConst = 2, ArraySubType = UnmanagedType.Struct)]
|
|||
|
|
public byte[] StickLeftTubeSensor; //贴标单元落管左传感器.采用ADC方式上传
|
|||
|
|
[MarshalAsAttribute(UnmanagedType.ByValArray, SizeConst = 2, ArraySubType = UnmanagedType.Struct)]
|
|||
|
|
public byte[] StickRightTubeSensor; //贴标单元落管右传感器.采用ADC方式上传
|
|||
|
|
[MarshalAsAttribute(UnmanagedType.ByValArray, SizeConst = 2, ArraySubType = UnmanagedType.Struct)]
|
|||
|
|
public byte[] StickUpTubeSensor; //贴标单元落管上传感器.采用ADC方式上传
|
|||
|
|
[MarshalAsAttribute(UnmanagedType.ByValArray, SizeConst = 2, ArraySubType = UnmanagedType.Struct)]
|
|||
|
|
public byte[] StickDownTubeSensor; //贴标单元落管下传感器.采用ADC方式上传
|
|||
|
|
public byte rush; //不要的数据
|
|||
|
|
public byte PrintCommand; //打印单元正在执行指令
|
|||
|
|
public byte PrintUnitState; //打印单元状态,打印头是否安装到位.1表示到位,0表示不到位。 20240103
|
|||
|
|
public byte CarryMotorState; //走纸电机状态
|
|||
|
|
public byte RollMotorState; //卷纸电机状态
|
|||
|
|
public byte PaperGapSensor; //标签缝隙传感器
|
|||
|
|
public byte PaperLessSensor; //纸张将近传感器。0表示足够,1表示将尽。20240103
|
|||
|
|
public byte PrintTemperatureSensor; //打印温度传感器
|
|||
|
|
public byte BackPrintCommand; //备用打印在执行指令
|
|||
|
|
public byte BackPrintUnitState; //备用打印头安装状态,是否安装到位。1表示到位,0表示不到位。
|
|||
|
|
public byte BackPaperGapSensor; //备用打印标签缝隙传感器
|
|||
|
|
public byte BackPaperLessSensor; //备用打印纸将尽传感器。0表示足够,1表示将尽。20240103
|
|||
|
|
public byte BackPrintTemperatureSensor; //打印温度传感器
|
|||
|
|
public byte TubeTakeBoxSensorState; //取试管盒传感器
|
|||
|
|
public byte TubeTakeBoxColorState; //取试管颜色传感器
|
|||
|
|
//public byte SensorInit; //机器传感器是否初始化标志 0未初始化
|
|||
|
|
// public byte Parameterset; //机器工作都败设置标志,如果为0,
|
|||
|
|
public byte Sensorlnit;//机器传感器初始化标志,如果为0表示没有初始化过,机器不能工作
|
|||
|
|
public byte ParameterSet;//机器工作参数设置标志,如果为0,表示没有下发工作参数,机器不能工作
|
|||
|
|
[MarshalAsAttribute(UnmanagedType.ByValArray, SizeConst = 8, ArraySubType = UnmanagedType.Struct)]
|
|||
|
|
public byte[] BackUp; //备用传感器
|
|||
|
|
}
|
|||
|
|
public string GetDevStatus()
|
|||
|
|
{
|
|||
|
|
try
|
|||
|
|
{
|
|||
|
|
if (!MechineCtrol("GetStatus", null, ref RecvData))
|
|||
|
|
{
|
|||
|
|
//AlertForm.ShowAlert("查询设备状态失败,请检查设备连接状态", AlertType.Error, 3);
|
|||
|
|
return "-1|查询设备状态失败,请检查设备连接状态";
|
|||
|
|
}
|
|||
|
|
//数组转结构体,字节对齐
|
|||
|
|
DEVSTATUS OldStatus = stat;
|
|||
|
|
IntPtr ptr = Marshal.AllocHGlobal(100);//分配非托管内存空间
|
|||
|
|
Marshal.Copy(RecvData, 3, ptr, RecvData.Length - 4);//将数组数组拷贝到非托管内存指针
|
|||
|
|
stat = (DEVSTATUS)Marshal.PtrToStructure(ptr, typeof(DEVSTATUS));
|
|||
|
|
Marshal.FreeHGlobal(ptr);//释放内存
|
|||
|
|
Task.Run(() => TaksCheckStatus(OldStatus, stat));
|
|||
|
|
return "0|success";
|
|||
|
|
|
|||
|
|
}
|
|||
|
|
catch(Exception e)
|
|||
|
|
{
|
|||
|
|
return "-1|查询设备状态失败,请检查设备连接状态";
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
public void TaksCheckStatus(DEVSTATUS OldStatus, DEVSTATUS NewStatus)
|
|||
|
|
{
|
|||
|
|
//JLogger.logger.Info($"TaksCheckStatus OldStatus.BackUp[2]={OldStatus.BackUp[2]} NewStatus.BackUp[2]={NewStatus.BackUp[2]} OldStatus.BackUp[3]={OldStatus.BackUp[3]} NewStatus.BackUp[3]={NewStatus.BackUp[3]}");
|
|||
|
|
if (OldStatus.BackUp[2] != NewStatus.BackUp[2])
|
|||
|
|
{
|
|||
|
|
switch (NewStatus.BackUp[2])
|
|||
|
|
{
|
|||
|
|
case 0x01: //试管仓打开
|
|||
|
|
PublicStatic.EventMgr.ExcuteCmd($"insert into EVENTINFOLIST(Msg,Details,Time) Values('{"试管仓打开"}','{"试管仓被打开"}','{DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")}')");
|
|||
|
|
break;
|
|||
|
|
case 0x00: //试管仓关闭
|
|||
|
|
PublicStatic.EventMgr.ExcuteCmd($"insert into EVENTINFOLIST(Msg,Details,Time) Values('{"试管仓关闭"}','{"试管仓被关闭"}','{DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")}')");
|
|||
|
|
break;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
}
|
|||
|
|
if (OldStatus.BackUp[3] != NewStatus.BackUp[3])
|
|||
|
|
{
|
|||
|
|
switch (NewStatus.BackUp[3])
|
|||
|
|
{
|
|||
|
|
case 0x01: //标签仓打开
|
|||
|
|
PublicStatic.EventMgr.ExcuteCmd($"insert into EVENTINFOLIST(Msg,Details,Time) Values('{"标签仓打开"}','{"标签仓被打开"}','{DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")}')");
|
|||
|
|
break;
|
|||
|
|
case 0x00: //标签仓关闭
|
|||
|
|
PublicStatic.EventMgr.ExcuteCmd($"insert into EVENTINFOLIST(Msg,Details,Time) Values('{"标签仓关闭"}','{"标签仓被关闭"}','{DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")}')");
|
|||
|
|
break;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
public string Reset()
|
|||
|
|
{
|
|||
|
|
if (!MechineCtrol("DevReset", null, ref RecvData))
|
|||
|
|
{
|
|||
|
|
return "-1|系统复位失败";
|
|||
|
|
}
|
|||
|
|
return "0|系统复位成功";
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
public string RecpReset()
|
|||
|
|
{
|
|||
|
|
if (!MechineCtrol("RecpReset", null, ref RecvData))
|
|||
|
|
{
|
|||
|
|
return "-1|标签复位失败";
|
|||
|
|
}
|
|||
|
|
return "0|标签复位成功";
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
public bool isOpened()
|
|||
|
|
{
|
|||
|
|
return comTool.isOpen();
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
public bool WaitTubeTakeBox()
|
|||
|
|
{
|
|||
|
|
bool Ready = false;
|
|||
|
|
logger.Info("WaitTubeTakeBox");
|
|||
|
|
GetDevStatus();
|
|||
|
|
if (stat.TubeTakeBoxSensorState == 0x01) //盒子存在
|
|||
|
|
{
|
|||
|
|
logger.Info("盒子在位");
|
|||
|
|
//if(SystemSet.UseBle) // 如果使用蓝牙
|
|||
|
|
//{
|
|||
|
|
// logger.Info("获取条码");
|
|||
|
|
// BleBarcodeStr = GetTubeBoxBleMacAddr(); //获取蓝牙地址条码
|
|||
|
|
// logger.Info("匹配MAC地址:" + BleBarcodeStr);
|
|||
|
|
// if (BleBarcodeStr.Length <= 0)
|
|||
|
|
// return false;
|
|||
|
|
//}
|
|||
|
|
Ready = true;
|
|||
|
|
}
|
|||
|
|
return Ready;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
public bool WaitTubeTakeBoxTaken()
|
|||
|
|
{
|
|||
|
|
bool Ready = false;
|
|||
|
|
logger.Info("WaitTubeTakeBoxTaken");
|
|||
|
|
GetDevStatus();
|
|||
|
|
if (stat.TubeTakeBoxSensorState == 0x00)
|
|||
|
|
{
|
|||
|
|
Ready = true;
|
|||
|
|
}
|
|||
|
|
return Ready;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
|
|||
|
|
//public string GetTubeBoxBleMacAddr()
|
|||
|
|
//{
|
|||
|
|
// byte[] RecvData = new byte[600];
|
|||
|
|
// MechineCtrol("GetBoxBarcode", null, ref RecvData);
|
|||
|
|
// if (RecvData[1] <= 0x02)
|
|||
|
|
// return "";
|
|||
|
|
// int len = RecvData[1]-3;
|
|||
|
|
// byte[] bBarcode = new byte[len ] ;
|
|||
|
|
// Buffer.BlockCopy(RecvData, 3, bBarcode, 0, len);
|
|||
|
|
// string Bardocde = Encoding.ASCII.GetString(bBarcode);
|
|||
|
|
// logger.Info("获取到条码:"+ Bardocde);
|
|||
|
|
// MechineCtrol("GetBoxBarcode", null, ref RecvData); //再扫一遍 去除垃圾数据 扫码头可能回多条数据
|
|||
|
|
// return SystemSet.sqlHelper.GetBLEAddr(Bardocde);
|
|||
|
|
//}
|
|||
|
|
|
|||
|
|
|
|||
|
|
public void setLJError(byte sgid)
|
|||
|
|
{
|
|||
|
|
switch(sgid)
|
|||
|
|
{
|
|||
|
|
case 0xA1:
|
|||
|
|
{
|
|||
|
|
SgSetting setting = listSgSetting[0];
|
|||
|
|
setting.LJErr = true;
|
|||
|
|
listSgSetting[0] = setting;
|
|||
|
|
}
|
|||
|
|
break;
|
|||
|
|
case 0xA2:
|
|||
|
|
{
|
|||
|
|
SgSetting setting = listSgSetting[1];
|
|||
|
|
setting.LJErr = true;
|
|||
|
|
listSgSetting[1] = setting;
|
|||
|
|
}
|
|||
|
|
break;
|
|||
|
|
case 0xA3:
|
|||
|
|
{
|
|||
|
|
SgSetting setting = listSgSetting[2];
|
|||
|
|
setting.LJErr = true;
|
|||
|
|
listSgSetting[2] = setting;
|
|||
|
|
}
|
|||
|
|
break;
|
|||
|
|
case 0xA4:
|
|||
|
|
{
|
|||
|
|
SgSetting setting = listSgSetting[3];
|
|||
|
|
setting.LJErr = true;
|
|||
|
|
listSgSetting[3] = setting;
|
|||
|
|
}
|
|||
|
|
break;
|
|||
|
|
case 0xA5:
|
|||
|
|
{
|
|||
|
|
SgSetting setting = listSgSetting[4];
|
|||
|
|
setting.LJErr = true;
|
|||
|
|
listSgSetting[4] = setting;
|
|||
|
|
}
|
|||
|
|
break;
|
|||
|
|
case 0xA6:
|
|||
|
|
{
|
|||
|
|
SgSetting setting = listSgSetting[5];
|
|||
|
|
setting.LJErr = true;
|
|||
|
|
listSgSetting[5] = setting;
|
|||
|
|
}
|
|||
|
|
break;
|
|||
|
|
case 0xA7:
|
|||
|
|
{
|
|||
|
|
SgSetting setting = listSgSetting[6];
|
|||
|
|
setting.LJErr = true;
|
|||
|
|
listSgSetting[6] = setting;
|
|||
|
|
}
|
|||
|
|
break;
|
|||
|
|
default:
|
|||
|
|
break;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|