using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using Common;
namespace MeterPlugInLibrary
{
public class SweepCode
{
private string strCode = "";//扫码信息
private bool isError = false;//扫码信息
public string StrCode
{
get { return strCode; }
set { strCode = value; }
}
private string strState = "";//状态 0重量稳定 1重量不稳定 2空磅
public string StrState
{
get { return strState; }
set { strState = value; }
}
private object obj = new object();
private Thread mThread = null;
public void StartThreadSweep()
{
mThread = new Thread(new ThreadStart(ThreadSweepInfo));
mThread.Start();
}
///
/// 扫码信息读取
///
///
private void ThreadSweepInfo()
{
try
{
while (true)
{
lock (obj)
{
string sCode = "";
Thread.Sleep(500);
//WriteLog("开始扫码线程:重量状态为:" + strState);
if (strState.Equals("0"))
{
sCode = GetSweepCodeInfo(15, 11, "9600,N,8,1");
WriteLog("扫码返回:" + sCode + "是否错误:" + isError);
if (!string.IsNullOrEmpty(sCode) && !isError)
{
strCode = sCode;
string lb = "进入扫码";
WriteLog(lb + ",读到的二维码扫码信息:" + strCode);
}
else
{
WriteLog("扫码信息报错,:" + strCode);
strCode = "";
}
//Thread.Sleep(20 * 1000);//15秒执行一次
}
else if (strState.Equals("2"))
{
strCode = "";
}
}
}
}
catch (Exception exp)
{
Close();
strCode = "";
WriteLog("扫码信息读取异常!" + exp.Message);
}
}
///
/// 关闭线程
///
///
public bool CloseThread()
{
try
{
if (mThread != null)
{
mThread.Abort();
Close();
}
return true;
}
catch
{
return false;
}
}
///
/// 二维码/条形码 信息获取
///
/// 扫码枪多长时间关闭
/// 端口
/// 波特率
///
public string GetSweepCodeInfo(int intSleep, int iPort, string strComParam)
{
try
{
Close();
string strSweepCode = "";
int i = Scanning.SetDeviceType(3);//设备类型
if (i != 0)
{
isError = true;
WriteLog("设备类型异常");
return "设备类型异常";
}
i = Scanning.OpenDevice(iPort, strComParam);//打开扫描枪
if (i != 0)
{
isError = true;
WriteLog("打开扫描枪异常");
return "打开扫描枪异常";//打开扫描枪异常
}
byte[] szData = new byte[256];
i = Scanning.ReadData(ref szData[0], intSleep);//同步读条码信息
string strGet = System.Text.Encoding.Default.GetString(szData, 0, szData.Length); //将字节数组转换为字符串
if (!string.IsNullOrEmpty(strGet))
{
byte[] buffer = Encoding.UTF8.GetBytes(strGet);
strGet = Encoding.GetEncoding("utf-8").GetString(buffer);
//WriteLog("二维码信息(转换中文操作):" + strGet);
}
strSweepCode = strGet.Trim().Substring(0, 120).Replace("\r", "").Replace("\n", "").Replace(" ", "").Replace("\0", "");//得到二维码编号
//strSweepCode = strSweepCode.Split('|')[0];
if (!string.IsNullOrEmpty(strSweepCode))
WriteLog("二维码编号:【" + strSweepCode + "】");
i = Scanning.CloseDevice();//关闭扫描枪
return strSweepCode;
}
catch (Exception exp)
{
Close();
isError = true;
WriteLog("扫码异常!" + exp.Message);
return "";
}
}
///
/// 关闭扫描枪
///
public void Close()
{
WriteLog("扫码关闭!");
Scanning.CloseDevice();//关闭扫描枪
}
private void WriteLog(string str)
{
string m_szRunPath;
m_szRunPath = System.Environment.CurrentDirectory;
if (System.IO.Directory.Exists(m_szRunPath + "\\log") == false)
{
System.IO.Directory.CreateDirectory(m_szRunPath + "\\log");
}
string strDate = System.DateTime.Now.ToString("yyyyMMdd");
string strPathFile = m_szRunPath + "\\log\\" + strDate;
if (!Directory.Exists(strPathFile))//如果不存在就创建file文件夹
{
Directory.CreateDirectory(strPathFile);
}
System.IO.TextWriter tw = new System.IO.StreamWriter(strPathFile + "\\扫码设备_" + strDate + ".log", true);
tw.WriteLine(System.DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));
tw.WriteLine(str);
tw.WriteLine("\r\n");
tw.Close();
}
}
}