XiangTan_JiaoJie_Bak/DM_Weight/Port/PortUtil.cs

1917 lines
77 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

using log4net;
using log4net.Repository.Hierarchy;
using NetTaste;
using Prism.Events;
using Prism.Ioc;
using SqlSugar;
using System;
using System.Collections.Generic;
using System.ComponentModel.Design;
using System.Configuration;
using System.IO.Ports;
using System.Linq;
using System.Reflection.Metadata;
using System.Speech.Synthesis;
using System.Text;
using System.Threading.Channels;
using System.Threading.Tasks;
using System.Timers;
using System.Windows;
using System.Windows.Markup;
using System.Windows.Media.Animation;
using Unity;
using DM_Weight.msg;
using DM_Weight.Views;
using System.Reflection;
using DM_Weight.HIKVISION;
using PreviewDemo;
using System.Runtime.InteropServices;
using DM_Weight.Common;
using System.Net;
using System.Text.RegularExpressions;
using Modbus.Device;
using Polly;
using DM_Weight.Models;
namespace DM_Weight.Port
{
public class PortUtil
{
private readonly ILog logger = LogManager.GetLogger(typeof(PortUtil));
// 抽屉串口
//public SerialPort drawerSerial;
//// can总线串口
//public SerialPort canBusSerial;
//// 条码枪串口
//public SerialPort scanCodeSerial;
// 冰箱串口
//public SerialPort fridgeSerial;
// 温湿度串口
public SerialPort wsdSerial;
// 抽屉串口协议232 | 485
//private int _drawerProtocol = Convert.ToInt32(ConfigurationManager.AppSettings["DrawerProtocol"]);
//// can总线耗材板地址
//private int _doorAddr = Convert.ToInt32(ConfigurationManager.AppSettings["DoorAddr"]);
//// 储物箱地址
//private int _storageBoxAddr = Convert.ToInt32(ConfigurationManager.AppSettings["StorageBoxAddr"]);
//// can总线串口是否存在
//public bool _canBusExsit = Convert.ToBoolean(ConfigurationManager.AppSettings["CanBusExsit"]);
// 当前操作的抽屉号
//public int DrawerNo { get; set; }
//// 当前操作的库位号列表
//public int[] ColNos { get; set; } = new int[] { };
//// 当前操作的窗口
//public string WindowName { get; set; }
//// 取药操作的窗口名【处方取药、抽屉取药、自选取药、调拨出库】
//private string[] TakeNames = new string[] { "DrawerTakeDrugWindow", "OrderTakeDrugWindow", "SelfTakeDrugWindow", "InvoiceTakeDrugWindow" };
//// 加药操作的窗口名【自选加药、抽屉加药、还药】
//private string[] AddNames = new string[] { "SelfAddWindow", "ReturnDrugWindow", "ReturnDrug1Window", "DrawerAddDrugWindow" };
//// 盘点操作的窗口名【盘点】
//private string[] CheckNames = new string[] { "CheckStockWindow" };
//// 归还空瓶操作的窗口名【盘点】
//private string[] ReturnEmptyNames = new string[] { "ReturnEmptyWindow" };
//public int BoardType { get; set; } = 1;
//public int DrawerType { get; set; } = 1;
//private int[] BeforeQuantity { get; set; } = new int[] { };
//private int[] AfterQuantity { get; set; } = new int[] { };
// 整体流程状态
//private int statue { get; set; } = 0;
// 是否正在操作中
//public bool Operate { get; set; }
//冰箱是否正在操作中
//public bool FridgeOperate { get; set; }
public DateTime dateTime { get; set; } = DateTime.Now;
//public async void ResetData()
//{
// logger.Info($"重新设置串口数据状态【{statue}】,抽屉【{DrawerNo}】");
// if (!"HomeWindow".Equals(WindowName) && statue == 1)
// {
// if (BoardType == 2)
// {
// // 灭灯
// AllLightOff();
// }
// if (BoardType == 3)
// {
// // 失能
// await BoxLockLightOff();
// }
// if (BoardType == 4)
// {
// // 失能
// CloseStorage();
// }
// if (BoardType == 6)
// {
// // 失能
// await BoxLockLightOff2();
// }
// }
// Operate = false;
// dateTime = DateTime.Now;
// statue = 0;
// BeforeQuantity = new int[9];
// AfterQuantity = new int[9];
// BoardType = 1;
// DrawerType = 1;
// WindowName = "";
// DrawerNo = 0;
// ColNos = new int[] { };
//}
//public async void OpenBox()
//{
// logger.Info($"打开药箱,药箱号【{DrawerNo}】");
// Operate = true;
// try
// {
// byte[] buffer = await OpenDrawer();
// int[] r = buffer.Select(it => Convert.ToInt32(it)).ToArray();
// logger.Info($"OpenDrawer{string.Join(",", r)}");
// if (DrawerState(r))
// {
// statue = 1;
// // 返回消息 抽屉已经打开
// _eventAggregator.GetEvent<PortUtilEvent>().Publish(new util.DeviceMsg()
// {
// EventType = util.EventType.DRAWEROPEN,
// WindowName = WindowName,
// });
// logger.Info($"药箱【{DrawerNo}】打开成功");
// await Task.Delay(200);
// }
// else
// {
// // 返回消息 抽屉打开失败
// _eventAggregator.GetEvent<PortUtilEvent>().Publish(new util.DeviceMsg()
// {
// EventType = util.EventType.OPENERROR,
// WindowName = WindowName,
// Message = $"药箱【{DrawerNo}】打开失败"
// });
// logger.Info($"药箱【{DrawerNo}】打开失败");
// }
// }
// catch (Exception ex)
// {
// _eventAggregator.GetEvent<PortUtilEvent>().Publish(new util.DeviceMsg()
// {
// EventType = util.EventType.OPENERROR,
// Message = $"打开药箱异常{ex.Message}"
// });
// logger.Info($"打开药箱{DrawerNo}异常:{ex.Message}");
// }
//}
////查询药箱状态
//public async void GetBoxStatus()
//{
// try
// {
// if (Operate)
// {
// // 查询药箱状态
// byte[] buffer = await CheckBoxStatus();
// int[] r = buffer.Select(it => Convert.ToInt32(it)).ToArray();
// logger.Info($"GetBoxStatus{string.Join(",", r)}");
// // 药箱没有关闭
// if (DrawerState(r))
// {
// // 继续监听药箱状态
// await Task.Delay(200);
// GetBoxStatus();
// }
// else
// {
// // 返回消息 药箱已经关闭
// _eventAggregator.GetEvent<PortUtilEvent>().Publish(new util.DeviceMsg()
// {
// EventType = util.EventType.DRAWERCLOSE,
// });
// logger.Info($"抽屉【{DrawerNo}】已关闭");
// }
// }
// }
// catch (Exception ex)
// {
// _eventAggregator.GetEvent<PortUtilEvent>().Publish(new util.DeviceMsg()
// {
// EventType = util.EventType.OPENERROR,
// WindowName = WindowName,
// Message = $"GetBoxStatus异常{ex.Message}"
// });
// logger.Info($"GetBoxStatus异常{ex.Message}");
// }
//}
//public async void Start()
//{
// logger.Info($"进行抽屉操作抽屉号【{DrawerNo}】类型【{BoardType}】库位【{string.Join(",", ColNos)}】窗口【{WindowName}】");
// Operate = true;
// //开始录像
// //_chkFunction.HIKStartDVRRecord();
// logger.Info($"时间:{DateTime.Now}");
// try
// {
// // 储物箱直接开
// if (BoardType == 4)
// {
// byte[] result = await OpenStorage();
// int[] r = result.Select(it => Convert.ToInt32(it)).ToArray();
// if (r[4] != 0)
// {
// logger.Info($"储物箱使能成功");
// // 查询锁状态
// GetBackDoorState();
// }
// else
// {
// string _WindowName = WindowName;
// // 重新初始化数据
// ResetData();
// // 指令发送错误,未打开
// // 返回消息 抽屉打开失败
// _eventAggregator.GetEvent<PortUtilEvent>().Publish(new util.DeviceMsg()
// {
// EventType = util.EventType.OPENERROR,
// WindowName = WindowName,
// Message = "储物箱使能失败"
// });
// logger.Info($"储物箱使能失败");
// }
// }
// else
// {
// // 外置抽屉
// if (DrawerType == 3)
// {
// if (BoardType == 2)
// {
// byte[] buffer = await OpenRecover();
// int[] r = buffer.Select(it => Convert.ToInt32(it)).ToArray();
// if ((ColNos[0] > 3 && r[4] == 1) || (ColNos[0] < 4 && r[3] == 1))
// {
// // 告诉前台打开成功
// _eventAggregator.GetEvent<PortUtilEvent>().Publish(new util.DeviceMsg()
// {
// EventType = util.EventType.DRAWEROPEN,
// WindowName = WindowName,
// });
// logger.Info($"回收箱打开成功");
// // 查询是否关闭状态
// GeRecoverStatus();
// }
// else
// {
// string _WindowName = WindowName;
// // 重新初始化数据
// ResetData();
// // 返回消息开启失败
// // 返回消息 抽屉打开失败
// _eventAggregator.GetEvent<PortUtilEvent>().Publish(new util.DeviceMsg()
// {
// EventType = util.EventType.OPENERROR,
// WindowName = WindowName,
// Message = "回收箱打开失败"
// });
// logger.Info($"回收箱打开失败");
// }
// }
// }
// // 内置抽屉
// else
// {
// if (BoardType == 2)
// {
// byte[] quantity = await CheckQuantityByDrawer();
// BeforeQuantity = quantity.Select(it => Convert.ToInt32(it)).ToArray().Skip(3).Take(9).ToArray();
// logger.Info($"BeforeQuantity{string.Join(",", BeforeQuantity)}");
// }
// if (BoardType == 6)
// {
// int[] quantity = await CheckQuantityByAddr2();
// BeforeQuantity = quantity.Select(it => Convert.ToInt32(it)).ToArray();
// logger.Info($"BeforeQuantity{string.Join(",", BeforeQuantity)}");
// }
// byte[] buffer = await OpenDrawer();
// int[] r = buffer.Select(it => Convert.ToInt32(it)).ToArray();
// logger.Info($"OpenDrawer{string.Join(",", r)}");
// if (DrawerState(r))
// {
// statue = 1;
// // 是不是单支抽屉
// if (BoardType == 2)
// {
// // 取药
// if (Array.IndexOf(TakeNames, WindowName) > -1)
// {
// // 有药位置亮灯
// await HasLightOnByCol();
// }
// // 加药
// if (Array.IndexOf(AddNames, WindowName) > -1)
// {
// // 无药位置亮灯
// await NoLightOnByCol();
// }
// // 盘点
// if (Array.IndexOf(CheckNames, WindowName) > -1)
// {
// // 不亮灯
// }
// // 空瓶
// if (Array.IndexOf(ReturnEmptyNames, WindowName) > -1)
// {
// // 无药位置亮灯
// await NoLightOnByCol();
// }
// }
// // 药盒
// if (BoardType == 3)
// {
// // 药盒指示灯使能
// await BoxLockLightOn();
// }
// if (BoardType == 6)
// {
// // 药盒指示灯使能
// await BoxLockLightOn2();
// }
// // 返回消息 抽屉已经打开
// _eventAggregator.GetEvent<PortUtilEvent>().Publish(new util.DeviceMsg()
// {
// EventType = util.EventType.DRAWEROPEN,
// WindowName = WindowName,
// });
// logger.Info($"抽屉【{DrawerNo}】打开成功");
// // 查询抽屉状态
// await Task.Delay(200);
// GetDrawerStatus();
// }
// else
// {
// string _WindowName = WindowName;
// // 重新初始化数据
// ResetData();
// // 返回消息 抽屉打开失败
// _eventAggregator.GetEvent<PortUtilEvent>().Publish(new util.DeviceMsg()
// {
// EventType = util.EventType.OPENERROR,
// WindowName = WindowName,
// Message = $"抽屉【{DrawerNo}】打开失败"
// });
// logger.Info($"抽屉【{DrawerNo}】打开失败");
// }
// }
// }
// }
// catch (Exception ex)
// {
// string _WindowName = WindowName;
// // 重新初始化数据
// ResetData();
// // 返回消息 抽屉打开失败
// _eventAggregator.GetEvent<PortUtilEvent>().Publish(new util.DeviceMsg()
// {
// EventType = util.EventType.OPENERROR,
// WindowName = _WindowName,
// Message = $"操作异常{ex.Message}"
// });
// logger.Info(ex.Message);
// }
//}
//public async void GetDrawerStatus()
//{
// try
// {
// if (Operate)
// {
// // 查询抽屉状态
// byte[] buffer = await CheckDrawerStatus();
// int[] r = buffer.Select(it => Convert.ToInt32(it)).ToArray();
// logger.Info($"GetDrawerStatus{string.Join(",", r)}");
// // 抽屉没有关闭
// if (DrawerState(r))
// {
// if (BoardType == 2)
// {
// // 继续查询抽屉药品数量
// // 查询抽屉药品数量
// byte[] quantity = await CheckQuantityByDrawer();
// AfterQuantity = quantity.Select(it => Convert.ToInt32(it)).ToArray().Skip(3).Take(9).ToArray();
// logger.Info($"AfterQuantity{string.Join(",", AfterQuantity)}");
// int[] Quantitys = new int[BeforeQuantity.Length];
// for (int i = 0; i < BeforeQuantity.Length; i++)
// {
// // 取药
// if (Array.IndexOf(TakeNames, WindowName) > -1)
// {
// Quantitys[i] = BeforeQuantity[i] - AfterQuantity[i];
// }
// // 加药
// if (Array.IndexOf(AddNames, WindowName) > -1)
// {
// Quantitys[i] = AfterQuantity[i] - BeforeQuantity[i];
// }
// // 盘点
// if (Array.IndexOf(CheckNames, WindowName) > -1)
// {
// Quantitys[i] = AfterQuantity[i] - BeforeQuantity[i];
// }
// // 空瓶
// if (Array.IndexOf(CheckNames, WindowName) > -1)
// {
// Quantitys[i] = AfterQuantity[i] - BeforeQuantity[i];
// }
// }
// // 告诉前台数据变化
// _eventAggregator.GetEvent<PortUtilEvent>().Publish(new util.DeviceMsg()
// {
// EventType = util.EventType.UPDATEQUANTITY,
// WindowName = WindowName,
// Quantitys = Quantitys
// });
// logger.Info($"单支板数量变化【{string.Join(",", Quantitys)}】");
// }
// if (BoardType == 6)
// {
// // 继续查询抽屉药品数量
// // 查询抽屉药品数量
// int[] quantity = await CheckQuantityByAddr2();
// AfterQuantity = quantity.Select(it => Convert.ToInt32(it)).ToArray();
// logger.Info($"AfterQuantity{string.Join(",", AfterQuantity)}");
// int[] Quantitys = new int[BeforeQuantity.Length];
// for (int i = 0; i < BeforeQuantity.Length; i++)
// {
// // 取药
// if (Array.IndexOf(TakeNames, WindowName) > -1)
// {
// Quantitys[i] = BeforeQuantity[i] - AfterQuantity[i];
// }
// // 加药
// if (Array.IndexOf(AddNames, WindowName) > -1)
// {
// Quantitys[i] = AfterQuantity[i] - BeforeQuantity[i];
// }
// // 盘点
// if (Array.IndexOf(CheckNames, WindowName) > -1)
// {
// Quantitys[i] = AfterQuantity[i] - BeforeQuantity[i];
// }
// // 空瓶
// if (Array.IndexOf(CheckNames, WindowName) > -1)
// {
// Quantitys[i] = AfterQuantity[i] - BeforeQuantity[i];
// }
// }
// // 告诉前台数据变化
// _eventAggregator.GetEvent<PortUtilEvent>().Publish(new util.DeviceMsg()
// {
// EventType = util.EventType.UPDATEQUANTITY,
// WindowName = WindowName,
// Quantitys = Quantitys
// });
// logger.Info($"单支板数量变化【{string.Join(",", Quantitys)}】");
// }
// // 继续监听抽屉状态
// await Task.Delay(200);
// GetDrawerStatus();
// }
// else
// {
// statue = 2;
// if (BoardType == 2)
// {
// // 关灯
// AllLightOff();
// }
// // 药盒
// if (BoardType == 3)
// {
// // 药盒指示灯失能
// await BoxLockLightOff();
// }
// if (BoardType == 6)
// {
// // 药盒指示灯使能
// await BoxLockLightOff2();
// }
// string _WindowName = WindowName;
// // 重新初始化数据
// ResetData();
// // 返回消息 抽屉已经关闭
// _eventAggregator.GetEvent<PortUtilEvent>().Publish(new util.DeviceMsg()
// {
// EventType = util.EventType.DRAWERCLOSE,
// WindowName = _WindowName,
// });
// logger.Info($"抽屉【{DrawerNo}】已关闭");
// }
// }
// }
// catch (Exception ex)
// {
// _eventAggregator.GetEvent<PortUtilEvent>().Publish(new util.DeviceMsg()
// {
// EventType = util.EventType.OPENERROR,
// WindowName = WindowName,
// Message = $"GetDrawerStatus异常{ex.Message}"
// });
// logger.Info($"GetDrawerStatus异常{ex.Message}");
// }
//}
//public async void GeRecoverStatus()
//{
// if (Operate)
// {
// byte[] buffer = await CheckRecoverStatus();
// int[] r = buffer.Select(it => Convert.ToInt32(it)).ToArray();
// logger.Info($"GeRecoverStatus{string.Join(",", r)}");
// // 回收箱关闭成功
// if ((ColNos[0] > 3 && r[4] == 0) || (ColNos[0] < 4 && r[3] == 0))
// {
// logger.Info($"回收箱关闭");
// // 查询数量
// byte[] bytes = await CheckRecoverQuantity();
// int[] r1 = bytes.Select(it => Convert.ToInt32(it)).ToArray();
// // 返回消息库位关闭,放入空瓶数量
// int[] quantitys = r1.Skip(3).Take(3).ToArray();
// int index = ColNos[0] % 3 > 0 ? ColNos[0] % 3 - 1 : 2;
// // 指定库位放入的药品数量
// int InCount = quantitys[index];
// string _WindowName = WindowName;
// // 重新初始化数据
// ResetData();
// _eventAggregator.GetEvent<PortUtilEvent>().Publish(new util.DeviceMsg()
// {
// EventType = util.EventType.DRAWERCLOSE,
// Quantitys = new int[] { InCount },
// WindowName = WindowName,
// });
// logger.Info($"回收板数量变化【{string.Join(",", quantitys)}】");
// }
// else
// {
// // 查询是否关闭状态
// await Task.Delay(200);
// GeRecoverStatus();
// }
// }
//}
//public async void GetBackDoorState()
//{
// try
// {
// if (Operate)
// {
// byte[] result = await BackDoorState();
// int[] r = result.Select(it => Convert.ToInt32(it)).ToArray();
// int[] lockStates = CheckStorageStatus(r.Skip(3).Take(2).ToArray());
// int[] lightStates = CheckStorageStatus(r.Skip(5).Take(2).ToArray());
// // 锁处于关闭状态
// if (lockStates[_storageBoxAddr - 1] == 0)
// {
// // 锁还未打开过
// if (statue == 0)
// {
// // 指示灯不闪烁了,说明规定时间内没有开锁,需要给前台提示
// if (lightStates[_storageBoxAddr - 1] == 0)
// {
// // 打开失败
// logger.Info($"储物箱指示灯不闪烁,使能过期");
// }
// else
// {
// // 灯在闪烁继续监听状态
// GetBackDoorState();
// }
// }
// else if (statue == 1)
// {
// // 锁是打开状态现在关闭了,说明操作完成了,告诉前台锁已关闭
// statue = 2;
// string _WindowName = WindowName;
// // 重新初始化数据
// ResetData();
// _eventAggregator.GetEvent<PortUtilEvent>().Publish(new util.DeviceMsg()
// {
// EventType = util.EventType.DRAWERCLOSE,
// WindowName = _WindowName,
// });
// logger.Info($"储物箱关闭");
// }
// }
// // 锁处于打开状态
// if (lockStates[_storageBoxAddr - 1] == 1)
// {
// // 锁还未打开过,说明打开成功了
// if (statue == 0)
// {
// statue = 1;
// // 告诉前台打开成功
// _eventAggregator.GetEvent<PortUtilEvent>().Publish(new util.DeviceMsg()
// {
// EventType = util.EventType.DRAWEROPEN,
// WindowName = WindowName,
// });
// logger.Info($"储物箱打开成功");
// }
// // 灯在闪烁继续监听状态
// GetBackDoorState();
// }
// }
// }
// catch (Exception ex)
// {
// logger.Info($"GetBackDoorState异常{ex.Message}");
// }
//}
private readonly IEventAggregator _eventAggregator;
public PortUtil(IEventAggregator eventAggregator)
{
_eventAggregator = eventAggregator;
//try
//{
// string DrawerPortPath = ConfigurationManager.AppSettings["DrawerPortPath"];
// logger.Info($"打开抽屉串口【{DrawerPortPath}】");
// drawerSerial = new SerialPort(DrawerPortPath, 9600, Parity.None, 8);
// drawerSerial.Open();
// logger.Info($"抽屉串口打开结果【{drawerSerial.IsOpen}】");
//}
//catch (Exception e)
//{
// logger.Error("抽屉串口打开错误" + e.Message);
//}
//try
//{
// string ScanCodePortPath = ConfigurationManager.AppSettings["ScanCodePortPath"];
// logger.Info($"打开条码枪串口【{ScanCodePortPath}】");
// scanCodeSerial = new SerialPort(ScanCodePortPath, 9600, Parity.None, 8);
// scanCodeSerial.DataReceived += (object sender, System.IO.Ports.SerialDataReceivedEventArgs e) =>
// {
// string code = scanCodeSerial.ReadExisting();
// _eventAggregator.GetEvent<PortUtilEvent>().Publish(new util.DeviceMsg()
// {
// EventType = util.EventType.CODESCAN,
// Code = code,
// });
// };
// scanCodeSerial.Open();
// logger.Info($"条码枪串口打开结果【{scanCodeSerial.IsOpen}】");
//}
//catch (Exception e)
//{
// logger.Error("条码枪串口打开错误" + e.Message);
//}
//try
//{
// string FridgePortPath = ConfigurationManager.AppSettings["FridgePortPath"];
// logger.Info($"打开冰箱串口【{FridgePortPath}】");
// fridgeSerial = new SerialPort(FridgePortPath, 9600, Parity.None, 8);
// fridgeSerial.Open();
// logger.Info($"冰箱串口打开结果【{fridgeSerial.IsOpen}】");
//}
//catch (Exception e)
//{
// logger.Error("冰箱串口打开错误" + e.Message);
//}
//if (_canBusExsit)
//{
// try
// {
// string CanBusPortPath = ConfigurationManager.AppSettings["CanBusPortPath"];
// logger.Info($"打开can总线串口【{CanBusPortPath}】");
// canBusSerial = new SerialPort(CanBusPortPath, 57600, Parity.None, 8);
// canBusSerial.Open();
// logger.Info($"can总线串口打开结果【{canBusSerial.IsOpen}】");
// }
// catch (Exception e)
// {
// logger.Error("can总线串口打开错误" + e.Message);
// }
//}
try
{
string wsdSerialPort = ConfigurationManager.AppSettings["wsdSerialPort"];
logger.Info($"打开温湿度串口【{wsdSerialPort}】");
wsdSerial = new SerialPort(wsdSerialPort, 9600, Parity.None, 8);
wsdSerial.Open();
logger.Info($"温湿度串口打开结果【{wsdSerial.IsOpen}】");
}
catch (Exception e)
{
logger.Error("温湿度串口打开错误" + e.Message);
}
//_chkFunction = chkFunction;
}
private byte[] GetBufferByPort(SerialPort serialPort, int length, int timeout)
{
byte[] buffer = new byte[length];
// try
// {
int _length = 0;
DateTime start = DateTime.Now;
DateTime end = DateTime.Now;
while (_length != length && end.Subtract(start).TotalMilliseconds < timeout)
{
_length = serialPort.BytesToRead;
end = DateTime.Now;
}
if (_length != length)
{
if (_length != 0)
{
byte[] _buffer = new byte[_length];
serialPort.Read(_buffer, 0, _length);
logger.Info($"交互超时回复:{Convert.ToHexString(buffer)}");
}
throw new TimeoutException($"串口【{serialPort.PortName}】交互超时");
}
serialPort.Read(buffer, 0, length);
// }
// catch (Exception ex)
// {
// logger.Error($"GetBufferByPort{ex.Message}");
// }
return buffer;
}
private Task<byte[]> GetBufferByPort(SerialPort serialPort, int length)
{
return Task.Run(() => GetBufferByPort(serialPort, length, 3000));
}
public static SpeechSynthesizer speechSynthesizer = new SpeechSynthesizer();
public void SpeakAsync(string textinfo)
{
speechSynthesizer.SpeakAsync(textinfo);
}
//#region 抽屉串口操作
//// 打开抽屉
//public async Task<byte[]> OpenDrawer()
//{
// drawerSerial.DiscardInBuffer();
// byte[] buffer = new byte[] { 0xaa, 0x41, (byte)DrawerNo, 0xee };
// if (_drawerProtocol == 485)
// {
// if (DrawerNo > 8)
// {
// buffer = new byte[] { 0xaa, 0x21, (byte)(DrawerNo - 8), 0xee };
// }
// else
// {
// buffer = new byte[] { 0xaa, 0x11, (byte)DrawerNo, 0xee };
// }
// }
// logger.Info($"打开抽屉,串口数据:{Convert.ToHexString(buffer)}");
// drawerSerial.Write(buffer, 0, 4);
// return await GetBufferByPort(drawerSerial, 11);
//}
//private bool DrawerState(int[] r)
//{
// int index = DrawerNo > 8 ? DrawerNo - 7 : DrawerNo + 1;
// return r[index] == 0;
//}
//// 查询抽屉状态
//public async Task<byte[]> CheckDrawerStatus()
//{
// drawerSerial.DiscardInBuffer();
// byte[] buffer = new byte[] { 0xaa, 0x42, 0xee };
// if (_drawerProtocol == 485)
// {
// if (DrawerNo > 8)
// {
// buffer = new byte[] { 0xaa, 0x22, 0xee };
// }
// else
// {
// buffer = new byte[] { 0xaa, 0x12, 0xee };
// }
// }
// logger.Info($"查询抽屉状态,串口数据:{Convert.ToHexString(buffer)}");
// drawerSerial.Write(buffer, 0, 3);
// return await GetBufferByPort(drawerSerial, 11);
//}
//// 查询药箱状态
//public async Task<byte[]> CheckBoxStatus()
//{
// drawerSerial.DiscardInBuffer();
// byte[] buffer = new byte[] { 0xaa, 0x42, 0xee };
// if (_drawerProtocol == 485)
// {
// if (DrawerNo > 8)
// {
// buffer = new byte[] { 0xaa, 0x22, 0xee };
// }
// else
// {
// buffer = new byte[] { 0xaa, 0x12, 0xee };
// }
// }
// logger.Info($"查询抽屉状态,串口数据:{Convert.ToHexString(buffer)}");
// drawerSerial.Write(buffer, 0, 3);
// return await GetBufferByPort(drawerSerial, 11);
//}
//#endregion
//#region can总线串口操作
//#region 耗材板操作
//// 后门状态
//public async Task<byte[]> BackDoorState()
//{
// canBusSerial.DiscardInBuffer();
// byte[] buffer = new byte[] { 0xaa, (byte)(_doorAddr), 0x02, 0x00, 0x00, 0x00, 0x00, 0xee };
// canBusSerial.Write(buffer, 0, 8);
// return await GetBufferByPort(canBusSerial, 8);
//}
//// 打开电控门储物箱(有灯使能)
//public async Task<byte[]> OpenStorage()
//{
// canBusSerial.DiscardInBuffer();
// byte[] buffer = new byte[] { 0xaa, (byte)(_doorAddr), 0x01, (byte)_storageBoxAddr, 0x00, 0x00, 0x00, 0xee };
// canBusSerial.Write(buffer, 0, 8);
// return await GetBufferByPort(canBusSerial, 8);
//}
//// 关闭电控门储物箱(有灯失能)
//public void CloseStorage()
//{
// byte[] buffer = new byte[] { 0xaa, (byte)(_doorAddr), 0x04, 0x00, 0x00, 0x00, 0x00, 0xee };
// canBusSerial.Write(buffer, 0, 8);
//}
//// 打开普通储物箱(无灯)
//public void OpenStorageBox()
//{
// byte[] buffer = new byte[] { 0xaa, (byte)(_storageBoxAddr), 0x03, 0x00, 0x00, 0x00, 0x00, 0xee };
// canBusSerial.Write(buffer, 0, 8);
//}
//// 关闭普通储物箱(无灯)
//public void CloseStorageBox()
//{
// byte[] buffer = new byte[] { 0xaa, (byte)(_storageBoxAddr), 0x04, 0x00, 0x00, 0x00, 0x00, 0xee };
// canBusSerial.Write(buffer, 0, 8);
//}
//private int[] CheckStorageStatus(int[] data)
//{
// int a = data[0];
// int b = data[1];
// int[] intA = Decimal2Chunks(a);
// int[] intB = Decimal2Chunks(b);
// int[] r = new int[intA.Length + intB.Length];
// Array.Copy(intA, 0, r, 0, intA.Length);
// Array.Copy(intB, 0, r, intA.Length, intB.Length);
// return r;
//}
//private int[] Decimal2Chunks(int d)
//{
// string s = Convert.ToString(d, 2);
// int[] chars = new int[8];
// char[] schar = s.ToCharArray();
// Array.Reverse(schar);
// int[] iArray = Array.ConvertAll(schar, c => (int)Char.GetNumericValue(c));
// int[] addArray = new int[8 - iArray.Length];
// if (iArray.Length < 8)
// {
// for (int i = 0; i < 8 - iArray.Length; i++)
// {
// addArray[i] = 0;
// }
// chars = iArray.Concat(addArray).ToArray();
// }
// else
// {
// chars = iArray[0..iArray.Length];
// }
// return chars;
// //List<int> t = s.Split().Select(it => Convert.ToInt32(it)).Reverse().ToList();
// //while (t.Count < 8)
// //{
// // t.Add(0);
// //}
// //return t.ToArray();
//}
//#endregion
//#region 单支操作
//// 以抽屉为单位获取抽屉内所有库位的药品数量
//public async Task<byte[]> CheckQuantityByDrawer()
//{
// canBusSerial.DiscardInBuffer();
// byte[] buffer = new byte[] { 0xaa, (byte)(0xf0 + DrawerNo), 0x01, 0x00, 0x00, 0x00, 0x00, 0xee };
// logger.Info($"单支板发送库位数量查询【{string.Join(",", buffer)}】");
// canBusSerial.Write(buffer, 0, 8);
// return await GetBufferByPort(canBusSerial, 13);
//}
//// 获取单个单支板药品数量
//public async Task<byte[]> CheckQuantityByCol(int DrawerNo, int colNo)
//{
// canBusSerial.DiscardInBuffer();
// var channel = Convert.ToInt32((DrawerNo * 10 + colNo).ToString(), 16);
// byte[] buffer = new byte[] { 0xaa, (byte)channel, 0x08, 0x00, 0x00, 0x00, 0x00, 0xee };
// canBusSerial.Write(buffer, 0, 8);
// return await GetBufferByPort(canBusSerial, 8);
//}
//// 以抽屉为单位有药位置亮灯
//public void HasLightOnByDrawer()
//{
// byte[] buffer = new byte[] { 0xaa, (byte)(0xf0 + DrawerNo), 0x02, 0x00, 0x00, 0x00, 0x00, 0xee };
// canBusSerial.Write(buffer, 0, 8);
//}
//// 以抽屉为单位无药位置亮灯
//public void NoLightOnByDrawer()
//{
// byte[] buffer = new byte[] { 0xaa, (byte)(0xf0 + DrawerNo), 0x03, 0x00, 0x00, 0x00, 0x00, 0xee };
// canBusSerial.Write(buffer, 0, 8);
//}
//// 以抽屉为单位灭灯
//public void LightOffByDrawer()
//{
// byte[] buffer = new byte[] { 0xaa, (byte)(0xf0 + DrawerNo), 0x06, 0x00, 0x00, 0x00, 0x00, 0xee };
// canBusSerial.Write(buffer, 0, 8);
//}
//// 以单支板为单位有药位置亮灯
//public async Task HasLightOnByCol()
//{
// for (int i = 0; i < ColNos.Length; i++)
// {
// var channel = Convert.ToInt32((DrawerNo * 10 + ColNos[i]).ToString(), 16);
// byte[] buffer = new byte[] { 0xaa, (byte)channel, 0x0a, 0x00, 0x00, 0x00, 0x00, 0xee };
// canBusSerial.Write(buffer, 0, 8);
// await Task.Delay(TimeSpan.FromMilliseconds(20));
// }
//}
//// 以单支板为单位无药位置亮灯
//public async Task NoLightOnByCol()
//{
// for (int i = 0; i < ColNos.Length; i++)
// {
// var channel = Convert.ToInt32((DrawerNo * 10 + ColNos[i]).ToString(), 16);
// byte[] buffer = new byte[] { 0xaa, (byte)channel, 0x0b, 0x00, 0x00, 0x00, 0x00, 0xee };
// canBusSerial.Write(buffer, 0, 8);
// await Task.Delay(TimeSpan.FromMilliseconds(20));
// }
//}
//// 广播灭灯
//public void AllLightOff()
//{
// byte[] buffer = new byte[] { 0xaa, 0xff, 0x07, 0x00, 0x00, 0x00, 0x00, 0xee };
// canBusSerial.Write(buffer, 0, 8);
//}
//#endregion
//#region 药盒操作
//// 指定药盒指示灯开启使能开锁
//public async Task BoxLockLightOn()
//{
// for (int i = 0; i < ColNos.Length; i++)
// {
// var channel = Convert.ToInt32((DrawerNo * 10 + ColNos[i]).ToString(), 16);
// byte[] buffer = new byte[] { 0xaa, (byte)channel, 0x03, 0x00, 0x00, 0x00, 0x00, 0xee };
// canBusSerial.Write(buffer, 0, 8);
// await Task.Delay(TimeSpan.FromMilliseconds(20));
// }
//}
//// 指定药盒指示灯开启失能开锁
//public async Task BoxLockLightOff()
//{
// for (int i = 0; i < ColNos.Length; i++)
// {
// var channel = Convert.ToInt32((DrawerNo * 10 + ColNos[i]).ToString(), 16);
// byte[] buffer = new byte[] { 0xaa, (byte)channel, 0x04, 0x00, 0x00, 0x00, 0x00, 0xee };
// canBusSerial.Write(buffer, 0, 8);
// await Task.Delay(TimeSpan.FromMilliseconds(20));
// }
//}
//// 指定药盒状态查询
//public async Task<byte[]> BoxLockState(int ColNo)
//{
// canBusSerial.DiscardInBuffer();
// var channel = Convert.ToInt32((DrawerNo * 10 + ColNo).ToString(), 16);
// byte[] buffer = new byte[] { 0xaa, (byte)channel, 0x02, 0x00, 0x00, 0x00, 0x00, 0xee };
// canBusSerial.Write(buffer, 0, 8);
// return await GetBufferByPort(canBusSerial, 8);
//}
//// 以抽屉为单位药盒指示灯开启使能开锁
//public async Task BoxLockLightOnByDrawer()
//{
// canBusSerial.DiscardInBuffer();
// byte[] buffer = new byte[] { 0xaa, (byte)(0xf0 + DrawerNo), 0x04, 0x00, 0x00, 0x00, 0x00, 0xee };
// canBusSerial.Write(buffer, 0, 8);
//}
//// 以抽屉为单位药盒指示灯开启失能开锁
//public async Task BoxLockLightOffByDrawer()
//{
// canBusSerial.DiscardInBuffer();
// byte[] buffer = new byte[] { 0xaa, (byte)(0xf0 + DrawerNo), 0x05, 0x00, 0x00, 0x00, 0x00, 0xee };
// canBusSerial.Write(buffer, 0, 8);
//}
//#endregion
//#region 药盒操作
///// <summary>
///// 打开药盒
///// </summary>
///// <param name="ColNo"></param>
///// <returns></returns>
//public async Task OpenBox(int ColNo)
//{
// var vlock = 321;
// decimal decolNO = (decimal)ColNo;
// var channel = Convert.ToInt32((DrawerNo * 10 + Math.Ceiling(decolNO % 3)).ToString(), 16);
// byte[] buffer = new byte[] { 0xaa, (byte)channel, 5, (byte)vlock, 0x00, 0x00, 0x00, 0xee };
// canBusSerial.Write(buffer, 0, 8);
// await Task.Delay(TimeSpan.FromMilliseconds(20));
//}
///// <summary>
///// 查询药盒状态
///// </summary>
///// <param name="text"></param>
///// <returns></returns>
//public async Task<byte[]> GetBoxLockState(int ColNo)
//{
// decimal deColNo = (decimal)ColNo;
// var channel = Convert.ToInt32((DrawerNo * 10 + Math.Ceiling(deColNo / 3)).ToString(), 16);
// byte[] buffer = new byte[] { 0xaa, (byte)channel, 2, 0, 0, 0, 0, 0xee };
// canBusSerial.Write(buffer, 0, 8);
// return await GetBufferByPort(canBusSerial, 8);
//}
//#endregion
//private string trim(string text)
//{
// //此处使用了转义字符如:\',\",\\,分别表示单引号,双引号,反斜杠
// char[] TrimChar = { ' ', '-', '\'', '\"', '\\', '(', ')', '', '', '①', '②' };
// return text.Trim(TrimChar);
//}
//#region 2.4寸汉显屏
//// 基础数据写入方法
//public async void WriteChannelInfo(int type, string content, int drawerNo, int colNo)
//{
// try
// {
// canBusSerial.DiscardInBuffer();
// Encoding.RegisterProvider(CodePagesEncodingProvider.Instance);
// byte[] contentBuf = Encoding.GetEncoding("gb2312").GetBytes(trim(content));
// int channel = (drawerNo * 10 + colNo);
// if (contentBuf.Length % 2 != 0)
// {
// Array.Resize(ref contentBuf, contentBuf.Length + 1);
// }
// byte[] buffer = new byte[] { 0xaa, (byte)channel, 1, (byte)type, 0, 0, 0, 0xee };
// canBusSerial.Write(buffer, 0, 8);
// await Task.Delay(20);
// buffer[4] = 1;
// for (int i = 0; i < contentBuf.Length; i += 2)
// {
// buffer[5] = contentBuf[i];
// buffer[6] = contentBuf[i + 1];
// canBusSerial.Write(buffer, 0, 8);
// await Task.Delay(20);
// }
// buffer[4] = 2;
// buffer[5] = 0;
// buffer[6] = 0;
// canBusSerial.Write(buffer, 0, 8);
// await Task.Delay(20);
// }
// catch (Exception ex)
// {
// _eventAggregator.GetEvent<PortUtilEvent>().Publish(new util.DeviceMsg()
// {
// EventType = util.EventType.OPENERROR,
// WindowName = WindowName,
// Message = $"2.4寸汉显屏异常{ex.Message}"
// });
// logger.Info($"2.4寸汉显屏异常ex:{ex.Message}");
// }
//}
//// 清除显示内容
//public void ClearContent(int drawerNo, int colNo)
//{
// canBusSerial.DiscardInBuffer();
// int channel = (drawerNo * 10 + colNo);
// byte[] buffer = new byte[] { 0xaa, (byte)channel, 4, 0, 0, 0, 0, 0xee };
// canBusSerial.Write(buffer, 0, 8);
//}
//// 刷新显示内容
//public void ShowContent(int drawerNo, int colNo)
//{
// try
// {
// canBusSerial.DiscardInBuffer();
// int channel = (drawerNo * 10 + colNo);
// byte[] buffer = new byte[] { 0xaa, (byte)channel, 2, 0, 0, 0, 0, 0xee };
// canBusSerial.Write(buffer, 0, 8);
// }
// catch (Exception ex)
// {
// _eventAggregator.GetEvent<PortUtilEvent>().Publish(new util.DeviceMsg()
// {
// EventType = util.EventType.OPENERROR,
// WindowName = WindowName,
// Message = $"刷新显示内容异常{ex.Message}"
// });
// logger.Info($"刷新显示内容异常ex:{ex.Message}");
// }
//}
//// 取药或者加药亮灯
//public void TakeQuantity(int drawerNo, int colNo, int quantity, int stock)
//{
// try
// {
// canBusSerial.DiscardInBuffer();
// int channel = Convert.ToInt32((drawerNo * 10 + colNo).ToString(), 16);
// byte[] buffer = new byte[] { 0xaa, (byte)channel, 6, 0, 0, 0, 0, 0xee };
// buffer[3] = (byte)(quantity >> 8);
// buffer[4] = (byte)(quantity & 0xff);
// buffer[5] = (byte)(stock >> 8);
// buffer[6] = (byte)(stock & 0xff);
// canBusSerial.Write(buffer, 0, 8);
// }
// catch (Exception ex)
// {
// _eventAggregator.GetEvent<PortUtilEvent>().Publish(new util.DeviceMsg()
// {
// EventType = util.EventType.OPENERROR,
// WindowName = WindowName,
// Message = $"操作发生异常{ex.Message}"
// });
// logger.Info($"操作发生异常ex:{ex.Message}");
// }
//}
//// 写入数量
//public void WriteQuantity(int drawerNo, int colNo, int quantity)
//{
// try
// {
// canBusSerial.DiscardInBuffer();
// int channel = (drawerNo * 10 + colNo);
// byte[] buffer = new byte[] { 0xaa, (byte)channel, 0x21, 0, 0, 0, 0, 0xee };
// buffer[5] = (byte)(quantity >> 8);
// buffer[6] = (byte)(quantity & 0xff);
// canBusSerial.Write(buffer, 0, 8);
// }
// catch (Exception ex)
// {
// _eventAggregator.GetEvent<PortUtilEvent>().Publish(new util.DeviceMsg()
// {
// EventType = util.EventType.OPENERROR,
// WindowName = WindowName,
// Message = $"操作发生异常{ex.Message}"
// });
// logger.Info($"操作发生异常ex:{ex.Message}");
// }
//}
//#endregion
//#region 标签显示屏
////清屏
//public void ClearContentMethod(int drawerNo, int colNo)
//{
// decimal deColNo = colNo;
// var channel = drawerNo * 10 + Math.Ceiling(deColNo / 3);
// var colNo2 = 321;
// byte[] buffer = new byte[] { 0xaa };
// canBusSerial.Write(buffer, 0, 8);
//}
//#endregion
//#region 回收箱操作
//// 打开回收箱
//public async Task<byte[]> OpenRecover()
//{
// try
// {
// canBusSerial.DiscardInBuffer();
// byte[] buffer = new byte[] { 0xAA, 0x9A, 0x04, 0x00, 0x00, 0x00, 0x00, 0xEE };
// canBusSerial.Write(buffer, 0, 8);
// return await GetBufferByPort(canBusSerial, 8);
// }
// catch (Exception ex)
// {
// _eventAggregator.GetEvent<PortUtilEvent>().Publish(new util.DeviceMsg()
// {
// EventType = util.EventType.OPENERROR,
// WindowName = WindowName,
// Message = $"操作发生异常{ex.Message}"
// });
// logger.Info($"操作发生异常ex:{ex.Message}");
// return null;
// }
//}
//// 回收箱状态查询
//public async Task<byte[]> CheckRecoverStatus()
//{
// try
// {
// canBusSerial.DiscardInBuffer();
// byte[] buffer = new byte[] { 0xAA, 0x9A, 0x03, 0x00, 0x00, 0x00, 0x00, 0xEE };
// canBusSerial.Write(buffer, 0, 8);
// return await GetBufferByPort(canBusSerial, 8);
// }
// catch (Exception ex)
// {
// _eventAggregator.GetEvent<PortUtilEvent>().Publish(new util.DeviceMsg()
// {
// EventType = util.EventType.OPENERROR,
// WindowName = WindowName,
// Message = $"操作发生异常{ex.Message}"
// });
// logger.Info($"操作发生异常ex:{ex.Message}");
// return null;
// }
//}
//// 回收箱回收数量查询
//public async Task<byte[]> CheckRecoverQuantity()
//{
// try
// {
// canBusSerial.DiscardInBuffer();
// byte[] buffer = new byte[] { 0xAA, 0x9A, (byte)(ColNos[0] > 3 ? 2 : 1), 0x00, 0x00, 0x00, 0x00, 0xEE };
// //byte[] buffer = new byte[] { 0xAA, 0x9A, 01, (byte)(ColNos[0] > 3 ? 2 : 1), 0x00, 0x00, 0x00, 0xEE };
// canBusSerial.Write(buffer, 0, 8);
// return await GetBufferByPort(canBusSerial, 8);
// }
// catch (Exception ex)
// {
// _eventAggregator.GetEvent<PortUtilEvent>().Publish(new util.DeviceMsg()
// {
// EventType = util.EventType.OPENERROR,
// WindowName = WindowName,
// Message = $"操作发生异常{ex.Message}"
// });
// logger.Info($"操作发生异常ex:{ex.Message}");
// return null;
// }
//}
//#endregion
//#region 称重操作
//// 以板子为单位获取抽屉内所有库位的药品数量
//public async Task<byte[]> CheckQuantityByAddr()
//{
// canBusSerial.DiscardInBuffer();
// var channel = Convert.ToInt32((DrawerNo * 10 + 1).ToString(), 16);
// byte[] buffer = new byte[] { 0xaa, (byte)(channel), 0x28, 0x00, 0x00, 0x00, 0x00, 0xee };
// logger.Info($"称重发送库位数量查询1【{string.Join(",", buffer)}】");
// canBusSerial.Write(buffer, 0, 8);
// byte[] result1 = await GetBufferByPort(canBusSerial, 8);
// var channel2 = Convert.ToInt32((DrawerNo * 10 + 2).ToString(), 16);
// byte[] buffer2 = new byte[] { 0xaa, (byte)(channel2), 0x28, 0x00, 0x00, 0x00, 0x00, 0xee };
// logger.Info($"称重发送库位数量查询2【{string.Join(",", buffer2)}】");
// canBusSerial.Write(buffer2, 0, 8);
// byte[] result2 = await GetBufferByPort(canBusSerial, 8);
// byte[] res = new byte[6];
// Array.Copy(result1, 3, res, 0, 3);
// Array.Copy(result2, 3, res, 3, 3);
// return res;
//}
//// 以板子为单位获取抽屉内所有库位的药品数量
//public async Task<int[]> CheckQuantityByAddr2()
//{
// int[] res = new int[6];
// for (int i = 0; i < ColNos.Length; i++)
// {
// canBusSerial.DiscardInBuffer();
// var index = ColNos[i] > 3 ? 2 : 1;
// var lock1 = ColNos[i] % 3 == 0 ? 3 : ColNos[i] % 3;
// var channel = Convert.ToInt32((DrawerNo * 10 + index).ToString(), 16);
// byte[] buffer = new byte[] { 0xaa, (byte)(channel), 0x27, (byte)lock1, 0x00, 0x00, 0x00, 0xee };
// logger.Info($"称重发送库位数量查询1【{string.Join(",", buffer)}】");
// canBusSerial.Write(buffer, 0, 8);
// byte[] result = await GetBufferByPort(canBusSerial, 8);
// logger.Info($"称重发送库位数量查询1返回结果【{string.Join(",", result)}】");
// byte[] hl = result.Skip(3).Take(2).ToArray();
// int quantity = BitConverter.ToInt16(hl.Reverse().ToArray(), 0);
// res[ColNos[i] - 1] = quantity;
// }
// return res;
//}
//// 指定药盒指示灯开启使能开锁
//public async Task BoxLockLightOn2()
//{
// for (int i = 0; i < ColNos.Length; i++)
// {
// var index = ColNos[i] > 3 ? 2 : 1;
// var lock1 = ColNos[i] % 3 == 0 ? 3 : ColNos[i] % 3;
// var channel = Convert.ToInt32((DrawerNo * 10 + index).ToString(), 16);
// byte[] buffer = new byte[] { 0xaa, (byte)(channel), 0x03, (byte)lock1, 0x00, 0x00, 0x00, 0xee };
// logger.Info($"称重发送药盒使能【{string.Join(",", buffer)}】");
// canBusSerial.Write(buffer, 0, 8);
// await Task.Delay(TimeSpan.FromMilliseconds(500));
// }
//}
//// 指定药盒指示灯开启失能开锁
//public async Task BoxLockLightOff2()
//{
// canBusSerial.DiscardInBuffer();
// for (int i = 0; i < ColNos.Length; i++)
// {
// var index = ColNos[i] > 3 ? 2 : 1;
// var lock1 = ColNos[i] % 3 == 0 ? 3 : ColNos[i] % 3;
// var channel = Convert.ToInt32((DrawerNo * 10 + index).ToString(), 16);
// byte[] buffer = new byte[] { 0xaa, (byte)(channel), 0x04, (byte)lock1, 0x00, 0x00, 0x00, 0xee };
// logger.Info($"称重发送药盒失能【{string.Join(",", buffer)}】");
// canBusSerial.Write(buffer, 0, 8);
// await Task.Delay(TimeSpan.FromMilliseconds(50));
// }
//}
//public async void ClearCount(int DrawerNo, int ColNo)
//{
// try
// {
// canBusSerial.DiscardInBuffer();
// var index = ColNo > 3 ? 2 : 1;
// var lock1 = ColNo % 3 == 0 ? 3 : ColNo % 3;
// var channel = Convert.ToInt32((DrawerNo * 10 + index).ToString(), 16);
// byte[] buffer = new byte[] { 0xaa, (byte)(channel), 0x25, (byte)lock1, 0x00, 0x00, 0x00, 0xee };
// logger.Info($"称重发送清空计数【{string.Join(",", buffer)}】");
// canBusSerial.Write(buffer, 0, 8);
// }
// catch (Exception ex)
// {
// _eventAggregator.GetEvent<PortUtilEvent>().Publish(new util.DeviceMsg()
// {
// EventType = util.EventType.OPENERROR,
// WindowName = WindowName,
// Message = $"操作发生异常{ex.Message}"
// });
// logger.Info($"操作发生异常ex:{ex.Message},方法名ClearCount参数{DrawerNo}{ColNo}");
// }
//}
//public async void SetNumCount(int DrawerNo, int ColNo, int Quantity)
//{
// try
// {
// canBusSerial.DiscardInBuffer();
// var index = ColNo > 3 ? 2 : 1;
// var lock1 = ColNo % 3 == 0 ? 3 : ColNo % 3;
// var channel = Convert.ToInt32((DrawerNo * 10 + index).ToString(), 16);
// byte[] buffer = new byte[] { 0xaa, (byte)(channel), 0x26, (byte)lock1, 0x00, 0x00, 0x00, 0xee };
// buffer[4] = (byte)(Quantity >> 8);
// buffer[5] = (byte)(Quantity & 0xff);
// logger.Info($"称重发送数量【{string.Join(",", buffer)}】");
// canBusSerial.Write(buffer, 0, 8);
// }
// catch (Exception ex)
// {
// _eventAggregator.GetEvent<PortUtilEvent>().Publish(new util.DeviceMsg()
// {
// EventType = util.EventType.OPENERROR,
// WindowName = WindowName,
// Message = $"操作发生异常{ex.Message}"
// });
// logger.Info($"操作发生异常ex:{ex.Message},方法名SetNumCount参数{DrawerNo}{ColNo},{Quantity}");
// }
//}
//#endregion
///// <summary>
///// 冰箱使能
///// </summary>
///// <returns></returns>
//public async Task FridegOpen(int iIndex)
//{
// try
// {
// fridgeSerial.DiscardInBuffer();
// byte bAddress;
// if (iIndex == 1)
// {
// bAddress = 0x01;
// }
// else
// {
// bAddress = 0x02;
// }
// byte[] buffer = new byte[] { bAddress, 0x06, 0x10, 0xD4, 0x00, 0x01, 0x0C, 0xF2 };
// //byte[] buffer = new byte[] { 0x01, 0x06, 0x10, 0xD4, 0x00, 0x01 };
// ////获取数组CRC校验码
// //byte[] byteDate = CRC16MODBUS.CrcModBus(buffer);
// ////Array.Reverse(byteDate);
// //int dataLength = buffer.Length;
// //Array.Resize(ref buffer, dataLength + byteDate.Length);
// //for (int i = 0; i < byteDate.Length; i++)
// //{
// // buffer[dataLength + i] = byteDate[i];
// //}
// logger.Info($"冰箱使能【{Convert.ToHexString(buffer)}】");
// fridgeSerial.Write(buffer, 0, 8);
// await Task.Delay(80);
// }
// catch (Exception ex)
// {
// logger.Info($"冰箱使能发生异常ex:{ex.Message}");
// }
// FridgeOperate = false;
//}
///// <summary>
///// 冰箱失能
///// </summary>
///// <returns></returns>
//public async Task FridgeOff(int iIndex)
//{
// try
// {
// fridgeSerial.DiscardInBuffer();
// byte bAddress;
// if (iIndex == 1)
// {
// bAddress = 0x01;
// }
// else
// {
// bAddress = 0x02;
// }
// byte[] buffer = new byte[] { bAddress, 0x06, 0x10, 0xD4, 0x00, 0x00, 0xCD, 0x32 };
// //byte[] buffer = new byte[] { 0x01, 0x06, 0x10, 0xD4, 0x00, 0x01 };
// ////获取数组CRC校验码
// //byte[] byteDate = CRC16MODBUS.CrcModBus(buffer);
// ////Array.Reverse(byteDate);
// //int dataLength = buffer.Length;
// //Array.Resize(ref buffer, dataLength + byteDate.Length);
// //for (int i = 0; i < byteDate.Length; i++)
// //{
// // buffer[dataLength + i] = byteDate[i];
// //}
// logger.Info($"冰箱失能【{Convert.ToHexString(buffer)}】");
// fridgeSerial.Write(buffer, 0, 8);
// await Task.Delay(80);
// }
// catch (Exception ex)
// {
// logger.Info($"冰箱失能发生异常ex:{ex.Message}");
// }
// FridgeOperate = false;
//}
///// <summary>
///// 冰箱报警使能
///// </summary>
///// <returns></returns>
//public async Task FridgeAlarmOn(int iIndex)
//{
// try
// {
// fridgeSerial.DiscardInBuffer();
// byte bAddress;
// if (iIndex == 1)
// {
// bAddress = 0x01;
// }
// else
// {
// bAddress = 0x02;
// }
// byte[] buffer = new byte[] { bAddress, 0x06, 0x10, 0xD5, 0x00, 0x01, 0x5D, 0x32 };
// //byte[] buffer = new byte[] { 0x01, 0x06, 0x10, 0xD5, 0x00, 0x01 };
// ////获取数组CRC校验码
// //byte[] byteDate = CRC16MODBUS.CrcModBus(buffer);
// ////Array.Reverse(byteDate);
// //int dataLength = buffer.Length;
// //Array.Resize(ref buffer, dataLength + byteDate.Length);
// //for (int i = 0; i < byteDate.Length; i++)
// //{
// // buffer[dataLength + i] = byteDate[i];
// //}
// logger.Info($"冰箱报警使能【{Convert.ToHexString(buffer)}】");
// fridgeSerial.Write(buffer, 0, 8);
// await Task.Delay(80);
// }
// catch (Exception ex)
// {
// logger.Info($"冰箱报警使能发生异常ex:{ex.Message}");
// }
// FridgeOperate = false;
//}
///// <summary>
///// 冰箱报警失能
///// </summary>
///// <returns></returns>
//public async Task FridgeAlarmOff(int iIndex)
//{
// try
// {
// fridgeSerial.DiscardInBuffer();
// byte bAddress;
// if (iIndex == 1)
// {
// bAddress = 0x01;
// }
// else
// {
// bAddress = 0x02;
// }
// byte[] buffer = new byte[] { bAddress, 0x06, 0x10, 0xD5, 0x00, 0x00, 0x9C, 0xF2 };
// //byte[] buffer = new byte[] { 0x01, 0x06, 0x10, 0xD5, 0x00, 0x00 };
// ////获取数组CRC校验码
// //byte[] byteDate = CRC16MODBUS.CrcModBus(buffer);
// ////Array.Reverse(byteDate);
// //int dataLength = buffer.Length;
// //Array.Resize(ref buffer, dataLength + byteDate.Length);
// //for (int i = 0; i < byteDate.Length; i++)
// //{
// // buffer[dataLength + i] = byteDate[i];
// //}
// logger.Info($"冰箱报警失能【{Convert.ToHexString(buffer)}】");
// fridgeSerial.Write(buffer, 0, 8);
// await Task.Delay(80);
// }
// catch (Exception ex)
// {
// logger.Info($"冰箱报警失能发生异常ex:{ex.Message}");
// }
// FridgeOperate = false;
//}
///// <summary>
///// 冰箱温度设定最小
///// </summary>
///// <returns></returns>
//public async Task FridgeMinSetting(float min, int iIndex)
//{
// try
// {
// int iMix = Convert.ToInt32(min * 10);
// fridgeSerial.DiscardInBuffer();
// //byte[] bufferMin = new byte[] { 0x01, 0x06, 0x10, 0xC9, 0x00, 0x15, 0x9C, 0xFB };
// byte bAddress;
// if (iIndex == 1)
// {
// bAddress = 0x01;
// }
// else
// {
// bAddress = 0x02;
// }
// byte[] bufferMin = new byte[] { bAddress, 0x06, 0x10, 0xC9, 0x00, (byte)(iMix & 0xff) };
// //获取数组CRC校验码
// byte[] byteDate = CRC16MODBUS.CrcModBus(bufferMin);
// //Array.Reverse(byteDate);
// int dataLength = bufferMin.Length;
// Array.Resize(ref bufferMin, dataLength + byteDate.Length);
// for (int i = 0; i < byteDate.Length; i++)
// {
// bufferMin[dataLength + i] = byteDate[i];
// }
// logger.Info($"冰箱温度设定Min:【{Convert.ToHexString(bufferMin)}】");
// fridgeSerial.Write(bufferMin, 0, 8);
// }
// catch (Exception ex)
// {
// logger.Info($"获取冰箱温度发生异常ex:{ex.Message}");
// }
//}
///// <summary>
///// 冰箱温度设定最大
///// </summary>
///// <returns></returns>
//public async Task FridgeMaxSetting(float max, int iIndex)
//{
// try
// {
// int iMax = Convert.ToInt32(max * 10);
// fridgeSerial.DiscardInBuffer();
// //byte[] bufferMin = new byte[] { 0x01, 0x06, 0x10, 0xC9, 0x00, 0x15, 0x9C, 0xFB };
// byte bAddress;
// if (iIndex == 1)
// {
// bAddress = 0x01;
// }
// else
// {
// bAddress = 0x02;
// }
// byte[] bufferMax = new byte[] { bAddress, 0x06, 0x10, 0xC8, 0x00, (byte)(iMax & 0xff) };
// //获取数组CRC校验码
// byte[] byteDate = CRC16MODBUS.CrcModBus(bufferMax);
// //Array.Reverse(byteDate);
// int dataLength = bufferMax.Length;
// Array.Resize(ref bufferMax, dataLength + byteDate.Length);
// for (int i = 0; i < byteDate.Length; i++)
// {
// bufferMax[dataLength + i] = byteDate[i];
// }
// logger.Info($"冰箱温度设定Max:【{Convert.ToHexString(bufferMax)}】");
// fridgeSerial.Write(bufferMax, 0, 8);
// }
// catch (Exception ex)
// {
// logger.Info($"获取冰箱温度发生异常ex:{ex.Message}");
// }
//}
///// <summary>
///// 获取冰箱温度
///// </summary>
///// <returns></returns>
//public async Task<float> GetFridgeTemperature(int iIndex)
//{
// float temperature = 0.0f;
// try
// {
// fridgeSerial.DiscardInBuffer();
// byte bAddress;
// if (iIndex == 1)
// {
// bAddress = 0x01;
// }
// else
// {
// bAddress = 0x02;
// }
// byte[] buffer = new byte[] { bAddress, 0x03, 0x10, 0x02, 0x00, 0x01, 0x21, 0x0A };
// //byte[] buffer = new byte[] { 0x01, 0x03, 0x10, 0x02, 0x00, 0x01 };
// ////获取数组CRC校验码
// //byte[] byteDate = CRC16MODBUS.CrcModBus(buffer);
// ////Array.Reverse(byteDate);
// //int dataLength = buffer.Length;
// //Array.Resize(ref buffer, dataLength + byteDate.Length);
// //for (int i = 0; i < byteDate.Length; i++)
// //{
// // buffer[dataLength + i] = byteDate[i];
// //}
// logger.Info($"获取冰箱温度【{Convert.ToHexString(buffer)}】");
// fridgeSerial.Write(buffer, 0, 8);
// byte[] retByte = await GetBufferByPort(fridgeSerial, 7);
// logger.Info($"获取冰箱温度返回【{Convert.ToHexString(retByte)}】");
// if (retByte != null && retByte.Length >= 7)
// {
// var hight = retByte[3];
// var low = retByte[4];
// int iHight = Convert.ToInt32(hight << 8);
// int iLow = Convert.ToInt32(retByte[4]);
// temperature = Convert.ToSingle(iHight + iLow) / 10;
// }
// }
// catch (Exception ex)
// {
// logger.Info($"获取冰箱温度发生异常ex:{ex.Message}");
// }
// return temperature;
//}
///// <summary>
///// 设置冰箱温度
///// </summary>
///// <returns></returns>
//public async Task<float> SetFridgeTemperature(float temperature, int iIndex)
//{
// int tpt = (int)temperature * 10;
// byte Temperature = (byte)(tpt & 0xff);
// try
// {
// //if (!FridgeOperate)
// {
// fridgeSerial.DiscardInBuffer();
// byte bAddress;
// if (iIndex == 1)
// {
// bAddress = 0x01;
// }
// else
// {
// bAddress = 0x02;
// }
// //byte[] buffer = new byte[] { 0x01, 0x03, 0x10, 0x02, 0x00, 0x01, 0x21,0x0A };
// byte[] buffer = new byte[] { bAddress, 0x06, 0x10, 0x02, 0x00, (byte)Temperature };
// //获取数组CRC校验码
// byte[] byteDate = CRC16MODBUS.CrcModBus(buffer);
// //Array.Reverse(byteDate);
// int dataLength = buffer.Length;
// Array.Resize(ref buffer, dataLength + byteDate.Length);
// for (int i = 0; i < byteDate.Length; i++)
// {
// buffer[dataLength + i] = byteDate[i];
// }
// logger.Info($"设置冰箱温度【{Convert.ToHexString(buffer)}】");
// fridgeSerial.Write(buffer, 0, 8);
// await GetBufferByPort(fridgeSerial, 8);
// }
// }
// catch (Exception ex)
// {
// logger.Info($"获取冰箱温度发生异常ex:{ex.Message}");
// }
// return temperature;
//}
///// <summary>
///// 冰箱延迟报警
///// </summary>
///// <returns></returns>
//public async Task FridgeDelayWarm(int iIndex)
//{
// try
// {
// //if (!FridgeOperate)
// {
// fridgeSerial.DiscardInBuffer();
// byte bAddress;
// if (iIndex == 1)
// {
// bAddress = 0x01;
// }
// else
// {
// bAddress = 0x02;
// }
// byte[] buffer = new byte[] { bAddress, 0x06, 0x10, 0xCD, 0x00, 0x01, 0xDD, 0x35 };
// //byte[] buffer = new byte[] { 0x01, 0x06, 0x10, 0xCD, 0x00, 0x01 };
// ////获取数组CRC校验码
// //byte[] byteDate = CRC16MODBUS.CrcModBus(buffer);
// ////Array.Reverse(byteDate);
// //int dataLength = buffer.Length;
// //Array.Resize(ref buffer, dataLength + byteDate.Length);
// //for (int i = 0; i < byteDate.Length; i++)
// //{
// // buffer[dataLength + i] = byteDate[i];
// //}
// logger.Info($"冰箱延迟报警【{Convert.ToHexString(buffer)}】");
// fridgeSerial.Write(buffer, 0, 8);
// }
// }
// catch (Exception ex)
// {
// logger.Info($"获取冰箱温度发生异常ex:{ex.Message}");
// }
// //FridgeOperate = false;
//}
//#endregion
#region 湿
public TemperatureHumidityInfo GetWSD()
{
TemperatureHumidityInfo temperatureHumidityInfo = new TemperatureHumidityInfo();
try
{
var master = ModbusSerialMaster.CreateRtu(wsdSerial);
int no = 1;
var r = master.ReadHoldingRegisters((byte)no, 00, 2);
if (r != null && r.Length > 0)
{
var result = string.Join("", r);
var result1 = result.Substring(0, 3);
var result2 = result.Substring(3, 3);
float temp = Int32.Parse(result2) / 10.0F;
float humi = Int32.Parse(result1) / 10.0F;
temperatureHumidityInfo.GroupNo = "DM5";
temperatureHumidityInfo.Temp = temp.ToString();
temperatureHumidityInfo.Humi = humi.ToString();
}
//if (wsdSerial.IsOpen)
//{
// wsdSerial.Close();
//}
//master.Dispose();
logger.Info($"获取温湿度{string.Join("", r)}");
}
catch (Exception ex)
{
logger.Info($"获取温湿度异常{ex.Message}");
}
return temperatureHumidityInfo;
}
#endregion
}
}