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
|
{
|
/// <summary>
|
/// 磅秤串口通讯线程
|
/// </summary>
|
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();
|
}
|
|
/// <summary>
|
/// 获取磅秤称重重量并解析
|
/// </summary>
|
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);
|
|
}
|
}
|
}
|
}
|