using Common;
using System;
using System.Collections.Generic;
using System.IO;
using System.IO.Ports;
using System.Linq;
using System.Text;
using System.Threading;
using System.Windows.Forms;
namespace SystemOffLine
{
public class SerialPortES
{
SerialPort serialPort1;
bool blThreadFlag = false;
private string strCode = "";//扫码信息
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;
///
/// comPara是配置文件中的comPara
///
///
public void StartThreadSweep(string comPara)
{
#region 串口采集配置
string[] strParams = comPara.Split(new char[] { ',' });
Parity parity = Parity.None;
if (strParams[2].ToUpper() == "ODD")
{
parity = Parity.Odd;
}
if (strParams[2].ToUpper() == "EVEN")
{
parity = Parity.Even;
}
StopBits stopBits = StopBits.None;
if (strParams[4] == "1")
{
stopBits = StopBits.One;
}
if (strParams[4] == "1.5")
{
stopBits = StopBits.OnePointFive;
}
if (strParams[4] == "2")
{
stopBits = StopBits.Two;
}
serialPort1 = new SerialPort(strParams[0], Int32.Parse(strParams[1]),parity, Int32.Parse(strParams[3]), stopBits);
while (!serialPort1.IsOpen)
{
try
{
serialPort1.Open();
}
catch (Exception err)
{
serialPort1.Close();
WriteLog($"打开串口失败,正重试{err.Message}");
//MessageBox.Show("打开串口失败,串口可能被占用,请联系计量大厅");
return;
}
System.Threading.Thread.Sleep(500);
}
#endregion
blThreadFlag = true;
mThread = new Thread(new ThreadStart(ThreadSweepInfo));
mThread.Start();
}
///
/// 扫码信息读取
///
///
private void ThreadSweepInfo()
{
try
{
while (blThreadFlag)
{
lock (obj)
{
Thread.Sleep(100);
string strtmp = "";
if (serialPort1.BytesToRead > 0)
{
strtmp = serialPort1.ReadExisting();
}
strtmp = strtmp.Split(new char[] { '\r' })[0];
if (PbCache.strState.Equals("0") || PbCache.strState.Equals("1"))
{
if (strtmp != "") strCode = strtmp;
}
else
{
strCode = "";
}
/*
if (strState.Equals("0") || strState.Equals("1"))
{
string strtmp = "";
if (serialPort1.BytesToRead > 0)
{
strtmp = serialPort1.ReadExisting();
}
strtmp = strtmp.Split(new char[] { '\r' })[0];
if (strtmp != "") strCode = strtmp;
}
else if (strState.Equals("2"))
{
strCode = "";
}
//*/
}
}
}
catch (Exception exp)
{
WriteLog("扫码信息读取异常!" + exp.Message);
}
}
///
/// 关闭线程
///
///
public bool CloseThread()
{
try
{
blThreadFlag = false;
Close();
return true;
}
catch
{
return false;
}
}
#region
/*
///
/// 二维码/条形码 信息获取
///
/// 扫码枪多长时间关闭
/// 端口
/// 波特率
///
public string GetSweepCodeInfo(int intSleep, int iPort, string strComParam)
{
try
{
string strSweepCode = "";
int i = Scanning.SetDeviceType(3);//设备类型
if (i != 0)
{
WriteLog("设备类型异常");
return "设备类型异常";
}
i = Scanning.OpenDevice(iPort, strComParam);//打开扫描枪
if (i != 0)
{
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)
{
WriteLog("扫码异常!" + exp.Message);
return "";
}
}
//*/
#endregion
///
/// 关闭扫描枪
///
public void Close()
{
WriteLog("扫码关闭!");
if (serialPort1 != null && serialPort1.IsOpen) serialPort1.Close();
//关闭线程
if (mThread != null) mThread.Abort();
}
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();
}
}
}