SerialPortES.cs 8.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246
  1. using Common;
  2. using System;
  3. using System.Collections.Generic;
  4. using System.IO;
  5. using System.IO.Ports;
  6. using System.Linq;
  7. using System.Text;
  8. using System.Threading;
  9. using System.Windows.Forms;
  10. namespace SystemOffLine
  11. {
  12. public class SerialPortES
  13. {
  14. SerialPort serialPort1;
  15. bool blThreadFlag = false;
  16. private string strCode = "";//扫码信息
  17. public string StrCode
  18. {
  19. get { return strCode; }
  20. set { strCode = value; }
  21. }
  22. private string strState = "";//状态 0重量稳定 1重量不稳定 2空磅
  23. public string StrState
  24. {
  25. get { return strState; }
  26. set { strState = value; }
  27. }
  28. private object obj = new object();
  29. private Thread mThread = null;
  30. /// <summary>
  31. /// comPara是配置文件中的comPara
  32. /// </summary>
  33. /// <param name="comPara"></param>
  34. public void StartThreadSweep(string comPara)
  35. {
  36. #region 串口采集配置
  37. string[] strParams = comPara.Split(new char[] { ',' });
  38. Parity parity = Parity.None;
  39. if (strParams[2].ToUpper() == "ODD")
  40. {
  41. parity = Parity.Odd;
  42. }
  43. if (strParams[2].ToUpper() == "EVEN")
  44. {
  45. parity = Parity.Even;
  46. }
  47. StopBits stopBits = StopBits.None;
  48. if (strParams[4] == "1")
  49. {
  50. stopBits = StopBits.One;
  51. }
  52. if (strParams[4] == "1.5")
  53. {
  54. stopBits = StopBits.OnePointFive;
  55. }
  56. if (strParams[4] == "2")
  57. {
  58. stopBits = StopBits.Two;
  59. }
  60. serialPort1 = new SerialPort(strParams[0], Int32.Parse(strParams[1]),parity, Int32.Parse(strParams[3]), stopBits);
  61. while (!serialPort1.IsOpen)
  62. {
  63. try
  64. {
  65. serialPort1.Open();
  66. }
  67. catch (Exception err)
  68. {
  69. serialPort1.Close();
  70. WriteLog($"打开串口失败,正重试{err.Message}");
  71. //MessageBox.Show("打开串口失败,串口可能被占用,请联系计量大厅");
  72. return;
  73. }
  74. System.Threading.Thread.Sleep(500);
  75. }
  76. #endregion
  77. blThreadFlag = true;
  78. mThread = new Thread(new ThreadStart(ThreadSweepInfo));
  79. mThread.Start();
  80. }
  81. /// <summary>
  82. /// 扫码信息读取
  83. /// </summary>
  84. /// <returns></returns>
  85. private void ThreadSweepInfo()
  86. {
  87. try
  88. {
  89. while (blThreadFlag)
  90. {
  91. lock (obj)
  92. {
  93. Thread.Sleep(100);
  94. string strtmp = "";
  95. if (serialPort1.BytesToRead > 0)
  96. {
  97. strtmp = serialPort1.ReadExisting();
  98. }
  99. strtmp = strtmp.Split(new char[] { '\r' })[0];
  100. if (PbCache.strState.Equals("0") || PbCache.strState.Equals("1"))
  101. {
  102. if (strtmp != "") strCode = strtmp;
  103. }
  104. else
  105. {
  106. strCode = "";
  107. }
  108. /*
  109. if (strState.Equals("0") || strState.Equals("1"))
  110. {
  111. string strtmp = "";
  112. if (serialPort1.BytesToRead > 0)
  113. {
  114. strtmp = serialPort1.ReadExisting();
  115. }
  116. strtmp = strtmp.Split(new char[] { '\r' })[0];
  117. if (strtmp != "") strCode = strtmp;
  118. }
  119. else if (strState.Equals("2"))
  120. {
  121. strCode = "";
  122. }
  123. //*/
  124. }
  125. }
  126. }
  127. catch (Exception exp)
  128. {
  129. WriteLog("扫码信息读取异常!" + exp.Message);
  130. }
  131. }
  132. /// <summary>
  133. /// 关闭线程
  134. /// </summary>
  135. /// <returns></returns>
  136. public bool CloseThread()
  137. {
  138. try
  139. {
  140. blThreadFlag = false;
  141. Close();
  142. return true;
  143. }
  144. catch
  145. {
  146. return false;
  147. }
  148. }
  149. #region
  150. /*
  151. /// <summary>
  152. /// 二维码/条形码 信息获取
  153. /// </summary>
  154. /// <param name="intSleep">扫码枪多长时间关闭</param>
  155. /// <param name="iPort">端口</param>
  156. /// <param name="strComParam">波特率</param>
  157. /// <returns></returns>
  158. public string GetSweepCodeInfo(int intSleep, int iPort, string strComParam)
  159. {
  160. try
  161. {
  162. string strSweepCode = "";
  163. int i = Scanning.SetDeviceType(3);//设备类型
  164. if (i != 0)
  165. {
  166. WriteLog("设备类型异常");
  167. return "设备类型异常";
  168. }
  169. i = Scanning.OpenDevice(iPort, strComParam);//打开扫描枪
  170. if (i != 0)
  171. {
  172. WriteLog("打开扫描枪异常");
  173. return "";//打开扫描枪异常
  174. }
  175. byte[] szData = new byte[256];
  176. i = Scanning.ReadData(ref szData[0], intSleep);//同步读条码信息
  177. string strGet = System.Text.Encoding.Default.GetString(szData, 0, szData.Length); //将字节数组转换为字符串
  178. if (!string.IsNullOrEmpty(strGet))
  179. {
  180. byte[] buffer = Encoding.UTF8.GetBytes(strGet);
  181. strGet = Encoding.GetEncoding("utf-8").GetString(buffer);
  182. WriteLog("二维码信息(转换中文操作):" + strGet);
  183. }
  184. strSweepCode = strGet.Trim().Substring(0, 120).Replace("\r", "").Replace("\n", "").Replace(" ", "").Replace("\0", "");//得到二维码编号
  185. //strSweepCode = strSweepCode.Split('|')[0];
  186. if (!string.IsNullOrEmpty(strSweepCode))
  187. WriteLog("二维码编号:【" + strSweepCode + "】");
  188. i = Scanning.CloseDevice();//关闭扫描枪
  189. return strSweepCode;
  190. }
  191. catch (Exception exp)
  192. {
  193. WriteLog("扫码异常!" + exp.Message);
  194. return "";
  195. }
  196. }
  197. //*/
  198. #endregion
  199. /// <summary>
  200. /// 关闭扫描枪
  201. /// </summary>
  202. public void Close()
  203. {
  204. WriteLog("扫码关闭!");
  205. if (serialPort1 != null && serialPort1.IsOpen) serialPort1.Close();
  206. //关闭线程
  207. if (mThread != null) mThread.Abort();
  208. }
  209. private void WriteLog(string str)
  210. {
  211. string m_szRunPath;
  212. m_szRunPath = System.Environment.CurrentDirectory;
  213. if (System.IO.Directory.Exists(m_szRunPath + "\\log") == false)
  214. {
  215. System.IO.Directory.CreateDirectory(m_szRunPath + "\\log");
  216. }
  217. string strDate = System.DateTime.Now.ToString("yyyyMMdd");
  218. string strPathFile = m_szRunPath + "\\log\\" + strDate;
  219. if (!Directory.Exists(strPathFile))//如果不存在就创建file文件夹
  220. {
  221. Directory.CreateDirectory(strPathFile);
  222. }
  223. System.IO.TextWriter tw = new System.IO.StreamWriter(strPathFile + "\\扫码设备_" + strDate + ".log", true);
  224. tw.WriteLine(System.DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));
  225. tw.WriteLine(str);
  226. tw.WriteLine("\r\n");
  227. tw.Close();
  228. }
  229. }
  230. }