using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
using System.IO.Ports;
using System.Windows.Forms;
namespace WCS
{
///
/// 磅秤串口通讯线程
///
class ScaleComThread
{
SerialPort sp;
#region 画面上同步显示控件
public ListBox scaledisplay;
#endregion
Thread trd = null;
delegate void displayresponse(string text);
int i = 1;
int scaleno = 0, portno = 0;
//int sum = 0;
main form1;
bool threadFlag = true, spFlag = true;
public ScaleComThread(int scale, int port_no, main m)
{
scaleno = scale;
portno = port_no;
sp = new SerialPort();
sp.PortName = "COM" + port_no.ToString();
sp.BaudRate = 9600;
sp.DataBits = 8;
sp.Parity = Parity.None;
sp.StopBits = StopBits.One;
form1 = m;
if (sp.IsOpen) return;
try
{
sp.Open();
}
catch (Exception r)
{
spFlag = false;
//DisplayInfo("【" + DateTime.Now.ToString() + "】打开串口" + portno + "失败,请检查");
//return;
}
trd = new Thread(new ThreadStart(this.ThreadTask));
trd.IsBackground = true;
trd.Start();
}
///
/// 获取磅秤称重重量并解析
///
private void GetScaleData()
{
string s_SendString = "", s_RecStr = "", s_wt = "", s_part1 = "", s_part2 = "", s_part3 = "", s_part4 = "", s_part5 = "", s_part6 = "", s_part7 = "", s_imp = "";
int pos = 0, pos1 = 0, pos2 = 0;
try
{
//s_SendString = "P";
//sp.DiscardInBuffer();
//sp.DiscardOutBuffer();
//sp.WriteLine(s_SendString);
//Thread.Sleep(400);
s_RecStr = "";
Common.gd_gross_wt[scaleno - 1] = 0;
s_RecStr = sp.ReadExisting();
// DisplayInfo(s_RecStr);
if (s_RecStr.Length <= 0)
{
DisplayInfo("【" + DateTime.Now.ToString() + "】未能得到磅称重量,请检查");
return;
}
if (scaleno == 1)
{
pos = s_RecStr.IndexOf("NT,");
if (pos > 0)
{
s_RecStr = s_RecStr.Substring(pos + 3, s_RecStr.Length - pos - 3);
pos1 = s_RecStr.IndexOf("kg");
if (pos1 > 0)
{
s_RecStr = s_RecStr.Substring(0, pos1).Trim().Replace(" ", "");
try
{
Common.gd_gross_wt[scaleno - 1] = double.Parse(s_RecStr);
}
catch (Exception r)
{
Common.gd_gross_wt[scaleno - 1] = 0;
}
DisplayInfo("【" + DateTime.Now.ToString() + "】称重:" + s_RecStr + "KG");
sp.DiscardInBuffer();
sp.DiscardOutBuffer();
}
else
{
Common.gd_gross_wt[scaleno - 1] = 0;
//DisplayInfo("Read Data Error!------Date:" + System.DateTime.Now.ToString());
sp.DiscardInBuffer();
sp.DiscardOutBuffer();
}
}
}
else if (scaleno == 2)
{
pos = s_RecStr.IndexOf("NT,");
if (pos > 0)
{
s_RecStr = s_RecStr.Substring(pos + 3, s_RecStr.Length - pos - 3);
pos1 = s_RecStr.IndexOf("kg");
if (pos1 > 0)
{
s_RecStr = s_RecStr.Substring(0, pos1).Trim().Replace(" ", "");
try
{
Common.gd_gross_wt[scaleno - 1] = double.Parse(s_RecStr);
}
catch (Exception r)
{
Common.gd_gross_wt[scaleno - 1] = 0;
}
DisplayInfo("【" + DateTime.Now.ToString() + "】称重:" + s_RecStr + "KG");
sp.DiscardInBuffer();
sp.DiscardOutBuffer();
}
else
{
Common.gd_gross_wt[scaleno - 1] = 0;
//DisplayInfo("Read Data Error!------Date:" + System.DateTime.Now.ToString());
sp.DiscardInBuffer();
sp.DiscardOutBuffer();
}
}
}
else if (scaleno == 3)
{
pos = s_RecStr.IndexOf("NT,");
if (pos > 0)
{
s_RecStr = s_RecStr.Substring(pos + 3, s_RecStr.Length - pos - 3);
pos1 = s_RecStr.IndexOf("kg");
if (pos1 > 0)
{
s_RecStr = s_RecStr.Substring(0, pos1).Trim().Replace(" ", "");
try
{
Common.gd_gross_wt[scaleno - 1] = double.Parse(s_RecStr);
}
catch (Exception r)
{
Common.gd_gross_wt[scaleno - 1] = 0;
}
DisplayInfo("【" + DateTime.Now.ToString() + "】称重:" + s_RecStr + "KG");
sp.DiscardInBuffer();
sp.DiscardOutBuffer();
}
else
{
Common.gd_gross_wt[scaleno - 1] = 0;
//DisplayInfo("Read Data Error!------Date:" + System.DateTime.Now.ToString());
sp.DiscardInBuffer();
sp.DiscardOutBuffer();
}
}
}
else if (scaleno == 4)
{
pos = s_RecStr.IndexOf("NT,");
if (pos > 0)
{
s_RecStr = s_RecStr.Substring(pos + 3, s_RecStr.Length - pos - 3);
pos1 = s_RecStr.IndexOf("kg");
if (pos1 > 0)
{
s_RecStr = s_RecStr.Substring(0, pos1).Trim().Replace(" ", "");
try
{
Common.gd_gross_wt[scaleno - 1] = double.Parse(s_RecStr);
}
catch (Exception r)
{
Common.gd_gross_wt[scaleno - 1] = 0;
}
DisplayInfo("【" + DateTime.Now.ToString() + "】称重:" + s_RecStr + "KG");
sp.DiscardInBuffer();
sp.DiscardOutBuffer();
}
else
{
Common.gd_gross_wt[scaleno - 1] = 0;
//DisplayInfo("Read Data Error!------Date:" + System.DateTime.Now.ToString());
sp.DiscardInBuffer();
sp.DiscardOutBuffer();
}
}
}
}
catch (Exception t)
{
Common.gd_gross_wt[scaleno - 1] = 0;
DisplayInfo("【" + DateTime.Now.ToString() + "】得到磅秤重量失败:" + t.Message);
//DisplayInfo("未能得到磅称重量,请检查!---时间:" + System.DateTime.Now.ToString());
//Thread.Sleep(400);
return;
}
}
#region 通讯反馈同步显示
private void DisplayInfo(string text)
{
if (scaledisplay.InvokeRequired)
{
try
{
displayresponse d = new displayresponse(DisplayInfo);
scaledisplay.Invoke(d, new object[] { text });
}
catch (Exception r)
{
}
}
else
{
if (scaledisplay.Items.Count > 12)
{
scaledisplay.Items.Clear();
}
scaledisplay.Items.Add(text);
}
}
#endregion
private void ThreadTask()
{
while (threadFlag)
{
if (spFlag)
{
GetScaleData();
}
else
{
DisplayInfo("【" + DateTime.Now.ToString() + "】打开串口" + portno + "失败,请检查");
threadFlag = false;
}
Thread.Sleep(400);
}
}
}
}