using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using POSV.Bean;
using POSV.Utils;
using POS.Language.Language;
namespace POSV.Component
{
///
/// 稳定通知
///
public delegate void StabilizationEvent(decimal vl, bool stabilization);
public partial class WeightShowControl : UserControl
{
static NLog.Logger logger = NLog.LogManager.GetCurrentClassLogger();
private WeightStatusEnum _status = WeightStatusEnum.待称重;
private decimal _weight = 0.000M;
private static bool _isQuerying = false;
private SerialPortExtension serialPort = null;
public StabilizationEvent StabilizationEvent = null;
#region 清零、去皮、开钱箱结果
//清零结果
private bool _clearZeroResult = false;
//去皮结果
private bool _peelSkinResult = false;
//开钱箱结果
private bool _openCashBoxResult = false;
public bool ClearZeroResult
{
get
{
return this._clearZeroResult;
}
}
public bool PeelSkinResult
{
get
{
return this._peelSkinResult;
}
}
public bool OpenCashBoxResult
{
get
{
return this._openCashBoxResult;
}
}
#endregion
///
/// 定时轮询
///
private System.Windows.Forms.Timer timer = null;
///
/// 电子秤配置
///
private SteelyardParam steelyardParam;
public WeightShowControl()
{
InitializeComponent();
}
protected override void OnLoad(EventArgs e)
{
base.OnLoad(e);
if (this.DesignMode) return;
InitUI();
labelX6.Text = LangProxy.ToLang(labelX6.Text);
labelX8.Text = LangProxy.ToLang(labelX8.Text);
labelX10.Text = LangProxy.ToLang(labelX10.Text);
wlblInfo.Text = LangProxy.ToLang(wlblInfo.Text);
}
private SteelyardParam LoadSteelyard()
{
SteelyardParam result = null;
var param = Global.Instance.GlobalConfigStringValue(ConfigConstant.STEELYARD_DEVICE_PARAMETER);
if (string.IsNullOrEmpty(param))
{
result = new SteelyardParam();
}
else
{
result = JsonUtils.Deserialize(param);
}
return result;
}
///
/// 打开秤端口
///
///
public bool StartEngine()
{
bool result = false;
try
{
if (steelyardParam == null)
{
steelyardParam = LoadSteelyard();
}
switch (this.steelyardParam.Name)
{
case SteelyardBrandEnum.大华ACS_15AB:
{
serialPort = new SerialPortExtension();
serialPort.ReceiveDataEvent += SerialPort_ReceiveDataEvent;
serialPort.Open(this.steelyardParam.Port, this.steelyardParam.Baud.ToString(), "8", "1", "0", "None");
timer = new System.Windows.Forms.Timer();
timer.Interval = 500;
timer.Tick += TimerQueryWeight;
//timer = new System.Timers.Timer(100);
//timer.Elapsed += TimerQueryWeight;
//timer.AutoReset = true;
timer.Start();
result = true;
logger.Info("打开大华ACS_15AB端口");
}
break;
case SteelyardBrandEnum.顶尖PS1X:
{
serialPort = new SerialPortExtension();
serialPort.ReceiveDataEvent += PS1XReceiveDataEvent;
serialPort.Open(this.steelyardParam.Port, this.steelyardParam.Baud.ToString(), "8", "1", "0", "None");
timer = new System.Windows.Forms.Timer();
timer.Interval = 500;
timer.Tick += TimerQueryWeight;
//timer = new System.Timers.Timer(100);
//timer.Elapsed += TimerQueryWeight;
//timer.AutoReset = true;
timer.Start();
result = true;
logger.Info("打开顶尖PS1X端口");
}
break;
case SteelyardBrandEnum.凯士PRPLUS404:
case SteelyardBrandEnum.凯士PRPLUS216:
{
serialPort = new SerialPortExtension();
serialPort.ReceiveDataEvent += CasReceiveDataEvent;
serialPort.Open(this.steelyardParam.Port, this.steelyardParam.Baud.ToString(), "8", "1", "0", "None");
result = true;
logger.Info("打开凯士PRPLUS端口");
}
break;
case SteelyardBrandEnum.龙飞C2:
case SteelyardBrandEnum.龙飞C3:
{
timer = new System.Windows.Forms.Timer();
timer.Interval = 500;
timer.Tick += TimerQueryWeight;
//timer = new System.Timers.Timer(800);
//timer.Elapsed += TimerQueryWeight;
//timer.AutoReset = true;
timer.Start();
result = true;
logger.Info("打开龙飞C2,龙飞C3端口");
}
break;
case SteelyardBrandEnum.顶尖PBX:
{
serialPort = new SerialPortExtension();
serialPort.ReceiveDataEvent -= PBXReceiveDataEvent;
serialPort.ReceiveDataEvent += PBXReceiveDataEvent;
result = serialPort.Open(this.steelyardParam.Port, this.steelyardParam.Baud.ToString(), "8", "1", "0", "None");
if (result)
{
serialPort.Send(new byte[5] { 0x3C, 0x41, 0x4C, 0x3E, 0x09 });
timer = new System.Windows.Forms.Timer();
timer.Interval = 200;
timer.Tick += TimerQueryWeight;
//timer.Elapsed += TimerQueryWeight;
timer.Start();
logger.Info("打开顶尖PBX端口");
}
else
{
this.Status = WeightStatusEnum.异常;
logger.Info("打开顶尖PBX端口失败");
}
}
break;
}
}
catch (Exception ex)
{
logger.Error(ex, "打开电子秤端口失败");
this.Status = WeightStatusEnum.异常;
}
return result;
}
private void SerialPort_ReceiveDataEvent(object sender, SerialPortEventArgs e)
{
var bytes = e.ReceivedBytes;
try
{
var _str = System.Text.Encoding.ASCII.GetString(bytes);
string[] _val = _str.Split(' ', 'K', 'G');
this.Invoke((EventHandler)delegate
{
this.Weight = decimal.Parse(_val[1]);
if (this.Weight > 0)
{
Weight = Weight / 1000;
this.Status = WeightStatusEnum.稳定;
}
else
{
this.Status = WeightStatusEnum.称重中;
}
});
}
catch (Exception ex)
{
this.Invoke((EventHandler)delegate
{
this.Status = WeightStatusEnum.异常;
this.Weight = 0.00M;
});
logger.Info(ex.Message);
}
finally
{
}
}
///
/// 关闭秤
///
///
public void CloseEngine()
{
switch (this.steelyardParam.Name)
{
case SteelyardBrandEnum.大华ACS_15AB:
case SteelyardBrandEnum.顶尖PS1X:
{
if (this.timer != null)
{
this.timer.Stop();
//this.timer.Close();
this.timer = null;
}
if (serialPort != null)
{
serialPort.Close();
serialPort = null;
}
}
break;
case SteelyardBrandEnum.顶尖PBX:
{
if (timer != null)
{
timer.Stop();
//this.timer.Close();
timer = null;
}
if (serialPort != null)
{
serialPort.ReceiveDataEvent -= PBXReceiveDataEvent;
serialPort.Close();
serialPort = null;
}
}
break;
case SteelyardBrandEnum.凯士PRPLUS404:
case SteelyardBrandEnum.凯士PRPLUS216:
{
if (serialPort != null)
{
serialPort.Close();
serialPort = null;
}
}
break;
case SteelyardBrandEnum.龙飞C2:
case SteelyardBrandEnum.龙飞C3:
{
if (this.timer != null)
{
this.timer.Stop();
//this.timer.Close();
this.timer = null;
}
}
break;
}
}
///
/// 顶尖ps1x 健康监控,多次未收到数据提示异常,因为串口发送数据,但是一直未收到秤的数据,表示异常
///
readonly int ps1xMaxErrorTimes = 5;
readonly int lfMaxErrorTimes = 3;//龙飞异常次数极限
int ps1xQueryTimes = 0;
///
/// 轮询查询
///
///
///
private void TimerQueryWeight(object sender, EventArgs e)
{
if (_isQuerying)
{
logger.Info("称重正在查询中,忽略本次查询");
return;
}
_isQuerying = true;
try
{
switch (this.steelyardParam.Name)
{
case SteelyardBrandEnum.大华ACS_15AB:
{
if (serialPort != null)
{
//顶尖请求数据
serialPort.Send(new byte[1] { 0x50 });
//logger.Info("发送顶尖数据请求05");
}
}
break;
case SteelyardBrandEnum.顶尖PS1X:
{
if (serialPort != null)
{
//顶尖请求数据
serialPort.Send(new byte[1] { 0x05 });
//logger.Info("发送顶尖数据请求05");
}
}
break;
case SteelyardBrandEnum.顶尖PBX:
{
if (serialPort != null)
{
//顶尖请求数据
serialPort.Send(new byte[1] { 0x11 });
//logger.Info("发送顶尖数据请求05");
if (ps1xQueryTimes >= ps1xMaxErrorTimes)
{
this.Status = WeightStatusEnum.异常;
this.Weight = 0.000M;
logger.Error("顶尖PBX超过5次未获取到重量,上报异常");
ps1xQueryTimes = 0;
}
ps1xQueryTimes++;
}
}
break;
case SteelyardBrandEnum.龙飞C2:
case SteelyardBrandEnum.龙飞C3:
{
var value = GetAllValue();
if (string.IsNullOrEmpty(value))
{
this.Status = WeightStatusEnum.异常;
this.Weight = 0.000M;
}
else
{
if (value.Contains("┗━┛"))
{
this.Status = WeightStatusEnum.负载;
this.Weight = 0.000M;
}
else if (value.Contains("┏━┓"))
{
this.Status = WeightStatusEnum.超载;
this.Weight = 0.000M;
}
else if (value.Length >= 16)
{
var stu = Convert.ToInt16(value.Substring(0, 1));
var weightStr = value.Substring(1, value.IndexOf('P') - 1);
//var weight = StringUtils.GetDecimal(weightStr);
var weight = DecimalUtils.ToRound(StringUtils.GetDecimal(weightStr), 3);
this.Weight = weight;
switch (stu)
{
case 0://无皮重 非零位 非稳定
{
this.Status = WeightStatusEnum.称重中;
}
break;
case 1://无皮重 非零位 稳定
{
this.Status = WeightStatusEnum.稳定;
}
break;
case 2://无皮重 零位 非稳定
{
this.Status = WeightStatusEnum.待称重;
}
break;
case 3://无皮重 零位 稳定
{
this.Status = WeightStatusEnum.待称重;
}
break;
case 4://有皮重 非零位 非稳定
{
this.Status = WeightStatusEnum.称重中;
}
break;
case 5://有皮重 非零位 稳定
{
this.Status = WeightStatusEnum.稳定;
}
break;
case 6://有皮重 零位 非稳定
{
this.Status = WeightStatusEnum.待称重;
}
break;
case 7://有皮重 零位 稳定
{
this.Status = WeightStatusEnum.待称重;
}
break;
}
if (weight < 0)
{
this.Status = WeightStatusEnum.负载;
}
}
else
{
this.Status = WeightStatusEnum.异常;
this.Weight = 0.000M;
}
}
}
break;
}
}
catch (Exception ex)
{
logger.Error(ex, "轮询获取allvalue异常");
}
finally
{
_isQuerying = false;
}
}
#region 顶尖PS1X
private StringBuilder ps1xDataStr = new StringBuilder();
private void PS1XReceiveDataEvent(object sender, SerialPortEventArgs e)
{
var bytes = e.ReceivedBytes;
var hex = BitConverter.ToString(bytes, 0);
//var recv = BitConverter.ToString(bytes).Replace("-", string.Empty);
//logger.Info("收到顶尖数据<{0}>", hex);
//Console.WriteLine("Received Data<{0}>:{1} ", e.ReceivedBytes.Length, recv);
if (bytes.Length > 0)
{
if (bytes.Length == 1)
{
if (bytes[0] == 0x06 || bytes[0] == 0x15)
{
serialBytes = null;
serialBytes = new byte[0];
}
else
{
serialBytes = serialBytes.Concat(bytes).ToArray();
}
}
else
{
serialBytes = serialBytes.Concat(bytes).ToArray();
}
if (serialBytes.Length == 15 && serialBytes[0] == 0x01 && serialBytes[1] == 0x02 && serialBytes[13] == 0x03 && serialBytes[14] == 0x04)
{
try
{
ParsePs1xData(serialBytes);
}
catch (Exception ex)
{
logger.Error(ex, "顶尖PS1X称重异常");
}
}
}
}
private void ParsePs1xData(byte[] data)
{
if (data.Length == 15 && data[0] == 0x01 && data[1] == 0x02 && data[13] == 0x03 && data[14] == 0x04)
{
//状态// 53稳定,55不稳定,46异常
var status = System.Text.Encoding.Default.GetString(data.Skip(2).Take(1).ToArray());
var unit = System.Text.Encoding.Default.GetString(data.Skip(10).Take(2).ToArray());
var weightStr = System.Text.Encoding.Default.GetString(data.Skip(3).Take(7).ToArray());
var weight = StringUtils.GetDecimal(weightStr.Replace(" ", string.Empty).Replace(",", "."));
//Console.WriteLine(string.Format("ps1x状态{0},单位{1},重量{2}", status, unit, weightStr));
logger.Info(string.Format("ps1x状态{0},单位{1},zhong:{2},重量{3}", status, unit, weightStr, weight));
decimal kgWeight = 0.000M;
switch (unit)
{
case "KG":
{
kgWeight = weight;
}
break;
case "TJ"://台斤
{
kgWeight = weight * 0.6M; // 1 台斤 = 0.6 公斤
}
break;
case "TL":
{
kgWeight = weight * 37.5M / 500M; // 台两 = 37.5 公克
}
break;
case "SJ":// 市斤
{
kgWeight = weight / 2M;
}
break;
case "LB":
{
kgWeight = weight * 0.454M; // 1磅(lb)=0.454千克(kg)
}
break;
}
if (this.IsDisposed || !this.IsHandleCreated) return;
this.Invoke(new Action(() =>
{
if (kgWeight == 0)
{
this.Status = WeightStatusEnum.待称重;
}
else if (kgWeight < 0)
{
this.Status = WeightStatusEnum.负载;
}
else
{
switch (status)
{
case "S"://稳定
this.Status = WeightStatusEnum.稳定;
break;
case "U"://不稳定
this.Status = WeightStatusEnum.称重中;
break;
default://异常
this.Status = WeightStatusEnum.异常;
break;
}
}
this.Weight = decimal.Round(kgWeight, 3);
}));
}
}
#endregion
#region 凯士PRPLUS
private byte[] serialBytes = new byte[0];
///
/// 凯士数据接收
///
///
///
private void CasReceiveDataEvent(object sender, SerialPortEventArgs e)
{
try
{
var bytes = e.ReceivedBytes;
var recv = BitConverter.ToString(bytes);
//logger.Info("凯士数据:{0}", recv);
//Console.WriteLine("Received Data<{0}>:{1} ", e.ReceivedBytes.Length, recv);
if (bytes.Length > 0)
{
if (bytes.Length > 1 && bytes[0] == 0x0A && bytes[1] == 0x0D)
{
serialBytes = new byte[0];
serialBytes = serialBytes.Concat(bytes).ToArray();
ParseCas404Data(serialBytes);
}
else
{
serialBytes = serialBytes.Concat(bytes).ToArray();
//Console.WriteLine("temp:" + serialBytes.Length + ">>>>" + BitConverter.ToString(serialBytes));
}
switch (this.steelyardParam.Name)
{
case SteelyardBrandEnum.凯士PRPLUS404:
{
if (serialBytes.Length == 25)
{
ParseCas404Data(serialBytes);
}
}
break;
case SteelyardBrandEnum.凯士PRPLUS216:
{
if (serialBytes.Length == 7)
{
ParseCas216Data(serialBytes);
}
}
break;
}
}
}
catch (Exception)
{
}
}
private void ParseCas216Data(byte[] data)
{
if (data.Length == 7 && data[0] == 0x0A && data[1] == 0x0D)
{
//重量
var weights = System.Text.Encoding.Default.GetString(data.Skip(2).Take(6).ToArray());
//logger.Info(string.Format("凯士216秤:重量:{0};", weights));
decimal weight = StringUtils.GetDecimal(weights);
//g转kg
weight = decimal.Round(weight / 1000M, 3);
this.Invoke(new Action(() =>
{
if (weight == 0)
{
this.Status = WeightStatusEnum.待称重;
}
else if (weight < 0)
{
this.Status = WeightStatusEnum.负载;
}
else
{
this.Status = WeightStatusEnum.稳定;
}
this.Weight = Convert.ToDecimal(weight);
}));
}
}
int _weightnumber = 5;
decimal _Lasttime = 0;
private void ParseCas404Data(byte[] data)
{
if (data.Length == 25 && data[0] == 0x0A && data[1] == 0x0D)
{
//重量
var weights = System.Text.Encoding.Default.GetString(data.Skip(2).Take(6).ToArray());
//单价
var prices = System.Text.Encoding.Default.GetString(data.Skip(10).Take(6).ToArray());
//总价
var amounts = System.Text.Encoding.Default.GetString(data.Skip(18).ToArray());
decimal weight = StringUtils.GetDecimal(weights);
this.Invoke(new Action(() =>
{
if (weight == 0)
{
_weightnumber = 5;
_Lasttime = 0;
this.Status = WeightStatusEnum.待称重;
}
if (weight == _Lasttime)
{
if (_weightnumber > 0)
{
_weightnumber--;
}
else
{
this.Status = WeightStatusEnum.稳定;
}
}
else
{
_weightnumber = 5;
_Lasttime = weight;
this.Status = WeightStatusEnum.称重中;
}
this.Weight = Convert.ToDecimal(weight);
}));
}
}
#endregion
#region 顶尖PBX
private void PBXReceiveDataEvent(object sender, SerialPortEventArgs e)
{
//健康位归零
ps1xQueryTimes = 0;
var bytes = e.ReceivedBytes;
var hex = BitConverter.ToString(bytes, 0);
//var recv = BitConverter.ToString(bytes).Replace("-", string.Empty);
//logger.Info("收到顶尖数据<{0}>", hex);
//Console.WriteLine("Received Data<{0}>:{1} ", e.ReceivedBytes.Length, recv);
if (bytes.Length > 0)
{
if (bytes.Contains(0x3C))
{
//logger.Info("跳了跳前前接收到的操作指令返回数据:" + BitConverter.ToString(bytes));
var data = bytes.Skip(Array.FindIndex(bytes, x => x == 0x3C)).ToArray();
//logger.Info("跳了跳以后接收到的操作指令返回数据:" + BitConverter.ToString(data));
if (data.Length >= 8)
{
//清零、去皮、开钱箱
switch (data[1])
{
case 0x5A://置零
{
ParsePBXReceiveClearZeroData(data);
}
break;
case 0x54://去皮
{
ParsePBXReceivePeelSkinData(data);
}
break;
}
serialBytes = null;
serialBytes = new byte[0];
}
else
{
serialBytes = serialBytes.Concat(bytes).ToArray();
}
}
else
{
if (bytes[0] == 0x01 && serialBytes != null && serialBytes.Length > 0)
{
//发送过来的是初始数据,则清空之前记录的内容,重置。发现有时候这里会保留之前的一半数据,也就是串口两次发送,
//结果始终拿着上一次的第二行数据,拼接上了新来的第一行,一直都是这样 。就会导致秤半天都不会变动重量,收银员会称重错误
serialBytes = new byte[0];
}
serialBytes = serialBytes.Concat(bytes).ToArray();
if (serialBytes.Length == 15 && serialBytes[0] == 0x01 && serialBytes[1] == 0x02 && serialBytes[13] == 0x03 && serialBytes[14] == 0x04)
{
try
{
ParsePbxData(serialBytes);
}
catch (Exception ex)
{
logger.Error(ex, "顶尖PBX称重异常");
}
}
if (serialBytes.Length >= 15)
{
serialBytes = null;
serialBytes = new byte[0];
}
}
}
}
private void ParsePbxData(byte[] data)
{
if (data.Length == 15 && data[0] == 0x01 && data[1] == 0x02 && data[13] == 0x03 && data[14] == 0x04)
{
var status = System.Text.Encoding.Default.GetString(data.Skip(2).Take(1).ToArray());
var unit = System.Text.Encoding.Default.GetString(data.Skip(10).Take(2).ToArray());
var weightStr = System.Text.Encoding.Default.GetString(data.Skip(3).Take(7).ToArray());
var weight = StringUtils.GetDecimal(weightStr.Replace(" ", string.Empty).Replace(",", "."));
//Console.WriteLine(string.Format("ps1x状态{0},单位{1},重量{2}", status, unit, weightStr));
//logger.Info(string.Format("ps1x状态{0},单位{1},zhong:{2},重量{3}", status, unit, weightStr, weight));
decimal kgWeight = 0.000M;
switch (unit.Trim().ToUpper())
{
case "KG":
{
kgWeight = weight;
}
break;
case "TJ"://台斤
{
kgWeight = weight * 0.6M; // 1 台斤 = 0.6 公斤
}
break;
case "TL":
{
kgWeight = weight * 37.5M / 500M; // 台两 = 37.5 公克
}
break;
case "SJ":// 市斤
{
kgWeight = weight / 2M;
}
break;
case "LB":
{
kgWeight = weight * 0.454M; // 1磅(lb)=0.454千克(kg)
}
break;
case "G":
{
//克 g
kgWeight = weight / 1000M; // 1g = 0.001kg
}
break;
}
if (kgWeight == 0)
{
this.Status = WeightStatusEnum.待称重;
}
else if (kgWeight < 0)
{
this.Status = WeightStatusEnum.负载;
}
else
{
switch (status)
{
case "S"://稳定
this.Status = WeightStatusEnum.稳定;
break;
case "U"://不稳定
this.Status = WeightStatusEnum.称重中;
break;
case "F":
{
this.Status = WeightStatusEnum.超载;
}
break;
default://异常
this.Status = WeightStatusEnum.异常;
break;
}
}
this.Weight = decimal.Round(kgWeight, 3);
}
}
///
/// 清零 PBX
///
///
private bool ClearZeroPBX()
{
_clearZeroResult = false;
try
{
if (serialPort != null)
{
if (!serialPort.IsOpen)
{
serialPort.Open(this.steelyardParam.Port, this.steelyardParam.Baud.ToString(), "8", "1", "0", "None");
}
if (serialPort.IsOpen)
{
serialPort.DiscardOutBuffer();
var sendResult = serialPort.Send(new byte[] { 0x3C, 0x5A, 0x4B, 0x3E, 0x09 });
if (sendResult)
{
System.Threading.Thread.Sleep(100);
sendResult = serialPort.Send(new byte[] { 0x3C, 0x5A, 0x4B, 0x3E, 0x09 });
if (sendResult)
{
System.Threading.Thread.Sleep(100);
sendResult = serialPort.Send(new byte[] { 0x3C, 0x5A, 0x4B, 0x3E, 0x09 });
}
}
}
else
{
logger.Error("清零失败:未打开端口");
}
}
}
catch (Exception ex)
{
logger.Error(ex, "清零异常");
}
finally
{
if (serialPort != null)
{
if (!serialPort.IsOpen)
{
serialPort.Open(this.steelyardParam.Port, this.steelyardParam.Baud.ToString(), "8", "1", "0", "None");
}
}
}
return _clearZeroResult;
}
private void ParsePBXReceiveClearZeroData(byte[] data)
{
if (data.Length >= 8 && data[0] == 0x3C && data[1] == 0x5A)
{
if (data[6] == 0x0E || data[6] == 0x0D)
{
//成功
_clearZeroResult = true;
}
else
{
//失败
_clearZeroResult = false;
}
}
else
{
//失败
_clearZeroResult = false;
}
}
///
/// 去皮 PBX
///
///
private bool PeelSkinPBX()
{
_peelSkinResult = false;
try
{
if (serialPort != null)
{
if (!serialPort.IsOpen)
{
serialPort.Open(this.steelyardParam.Port, this.steelyardParam.Baud.ToString(), "8", "1", "0", "None");
}
if (serialPort.IsOpen)
{
var sendResult = serialPort.Send(new byte[] { 0x3C, 0x54, 0x4B, 0x3E, 0x09 });
if (sendResult)
{
System.Threading.Thread.Sleep(100);
sendResult = serialPort.Send(new byte[] { 0x3C, 0x54, 0x4B, 0x3E, 0x09 });
if (sendResult)
{
System.Threading.Thread.Sleep(100);
sendResult = serialPort.Send(new byte[] { 0x3C, 0x54, 0x4B, 0x3E, 0x09 });
}
}
}
else
{
logger.Error("去皮失败:未打开端口");
}
}
}
catch (Exception ex)
{
logger.Error(ex, "去皮异常");
}
finally
{
if (serialPort != null)
{
if (!serialPort.IsOpen)
{
serialPort.Open(this.steelyardParam.Port, this.steelyardParam.Baud.ToString(), "8", "1", "0", "None");
}
}
}
return _peelSkinResult;
}
private void ParsePBXReceivePeelSkinData(byte[] data)
{
if (data.Length >= 8 && data[0] == 0x3C && data[1] == 0x54)
{
if (data[6] == 0x0E || data[6] == 0x0D)
{
//成功
_peelSkinResult = true;
}
else
{
//失败
_peelSkinResult = false;
}
}
else
{
//失败
_peelSkinResult = false;
}
}
#endregion
///
/// 清零
///
///
public bool ClearZero()
{
bool result = false;
try
{
if (steelyardParam != null)
{
switch (steelyardParam.Name)
{
case SteelyardBrandEnum.顶尖PS1X:
{
CloseEngine();
System.Threading.Thread.Sleep(500);
result = WeightApi.ClearZero(steelyardParam);
StartEngine();
}
break;
case SteelyardBrandEnum.顶尖PBX:
{
result = ClearZeroPBX();
}
break;
default:
{
CloseEngine();
System.Threading.Thread.Sleep(500);
result = WeightApi.ClearZero(steelyardParam);
StartEngine();
}
break;
}
}
else
{
result = false;
}
}
catch (Exception ex)
{
logger.Error(ex, "清零异常");
}
return result;
}
///
/// 去皮
///
///
public bool PeelSkin()
{
bool result = false;
try
{
if (steelyardParam != null)
{
switch (steelyardParam.Name)
{
case SteelyardBrandEnum.顶尖PS1X:
{
CloseEngine();
result = WeightApi.PeelSkin(steelyardParam);
StartEngine();
}
break;
case SteelyardBrandEnum.顶尖PBX:
{
result = PeelSkinPBX();
}
break;
default:
{
CloseEngine();
System.Threading.Thread.Sleep(500);
result = WeightApi.PeelSkin(steelyardParam);
StartEngine();
}
break;
}
}
else
{
result = false;
}
}
catch (Exception ex)
{
logger.Error(ex, "去皮异常");
}
return result;
}
///
/// 初始化显示
///
private void InitUI()
{
this.Status = WeightStatusEnum.待称重;
this.Weight = 0.000M;
this.wlblPrice.Text = "0";
this.wlblAmount.Text = "0";
this.wlblInfo.Text = "前台操作时,请注意提示信息";
RefreshStatus(this._status);
}
///
/// 获取数据
///
public string GetAllValue()
{
string result = string.Empty;
try
{
if (steelyardParam != null)
{
switch (steelyardParam.Name)
{
case SteelyardBrandEnum.顶尖PS1X:
{
CloseEngine();
result = WeightApi.GetAllValue(steelyardParam);
StartEngine();
}
break;
default:
{
result = WeightApi.GetAllValue(steelyardParam);
}
break;
}
}
}
catch (Exception ex)
{
logger.Error(ex, "获取秤数据异常");
}
return result;
}
///
/// 秤状态
///
public WeightStatusEnum Status
{
get
{
return _status;
}
set
{
this._status = value;
this.wlblStatus.Text = LangProxy.ToLang(this._status.ToString());
RefreshStatus(this._status);
}
}
///
/// 重量
///
public decimal Weight
{
get
{
return _weight;
}
set
{
this._weight = value;
this.wlblWeight.Text = this._weight.ToString();
}
}
private void RefreshStatus(WeightStatusEnum status)
{
this.wlblStatus.Text = LangProxy.ToLang( status.ToString());
switch (status)
{
case WeightStatusEnum.稳定:
{
this.wlblStatus.ForeColor = ColorTranslator.FromHtml("0,192,0");
this.wlblStatus.SymbolColor = ColorTranslator.FromHtml("0,192,0");
if (StabilizationEvent != null)
{
StabilizationEvent(_weight, true);
}
}
break;
case WeightStatusEnum.待称重:
case WeightStatusEnum.称重中:
{
this.wlblStatus.ForeColor = Color.Yellow;
this.wlblStatus.SymbolColor = Color.Yellow;
if (StabilizationEvent != null)
{
StabilizationEvent(_weight, false);
}
}
break;
case WeightStatusEnum.负载:
case WeightStatusEnum.异常:
{
this.wlblStatus.ForeColor = Color.Red;
this.wlblStatus.SymbolColor = Color.Red;
}
break;
}
}
public void SetGoodsInfo(string name, decimal price, decimal amount)
{
this.wlblInfo.Text = name.ToString();
this.wlblPrice.Text = price.ToString();
this.wlblAmount.Text = amount.ToString();
}
}
public enum WeightStatusEnum
{
稳定 = 0,
待称重 = 1,
称重中 = 2,
异常 = 3,
负载 = 4,
超载 = 5,
}
}