using System;
using System.Collections.Generic;
using System.Data;
using System.IO.Ports;
using System.Timers;
using System.Windows.Forms;
using Gs.DevApp.Entity;
using Gs.DevApp.ToolBox;
using Newtonsoft.Json;
namespace Gs.DevApp.DevFrm.Work
{
public partial class Frm_Work09 : DevExpress.XtraEditors.XtraForm
{
string _webServiceName = "WorkWeight/";
///
/// 串口类
///
private SerialPort Sp = new SerialPort();
///
/// 更新UI委托,只定义,不实现
///
///
public delegate void HandleInterfaceUpdataDelegate(string text);
///
/// 更新UI委托,实现
///
private HandleInterfaceUpdataDelegate interfaceUpdataHandle;
System.Timers.Timer timer = new System.Timers.Timer(10000); // 1000毫秒间隔
public Frm_Work09()
{
InitializeComponent();
GetComList();
this.comLine.getSuppler("");
Gs.DevApp.ToolBox.UtilityHelper.SetGridViewParameterMx(gvMx1);
}
///
/// 从注册表获取系统串口列表
///
private void GetComList()
{
this.cmbSerialPortNum.Clear();
string[] ports = SerialPort.GetPortNames();
foreach (string port in ports)
{
cmbSerialPortNum.Properties.Items.Add(port);
}
}
///
/// 启动事件
///
///
///
private void btnStart_Click(object sender, EventArgs e)
{
string _comLine = comLine.GetId();
string _cmbSerialPortNum = cmbSerialPortNum.SelectedText.Trim();
string _cmbBaudRate = cmbBaudRate.SelectedText.Trim();
string _comSjw = comSjw.SelectedText.Trim();
string _comStopBits = comStopBits.SelectedText.Trim();
string _comParity = comParity.SelectedText.Trim();
if (string.IsNullOrEmpty(_comLine))
{
Gs.DevApp.ToolBox.MsgHelper.ShowError("请选择线体");
this.comLine.Focus();
return;
}
if (cmbSerialPortNum.SelectedIndex < 0)
{
Gs.DevApp.ToolBox.MsgHelper.ShowError("请选择串口号");
this.cmbSerialPortNum.Focus();
return;
}
if (cmbBaudRate.SelectedIndex < 0)
{
Gs.DevApp.ToolBox.MsgHelper.ShowError("请选择波特率");
this.cmbBaudRate.Focus();
return;
}
if (comSjw.SelectedIndex < 0)
{
Gs.DevApp.ToolBox.MsgHelper.ShowError("请选择数据位");
this.comSjw.Focus();
return;
}
if (comStopBits.SelectedIndex < 0)
{
Gs.DevApp.ToolBox.MsgHelper.ShowError("请选择数停止位");
this.comStopBits.Focus();
return;
}
if (comParity.SelectedIndex < 0)
{
Gs.DevApp.ToolBox.MsgHelper.ShowError("请选择校验");
this.comParity.Focus();
return;
}
try
{
interfaceUpdataHandle = new HandleInterfaceUpdataDelegate(UpdateTextBox);//实例化委托对象
Sp.RtsEnable = true;
Sp.DtrEnable = true;
Sp.ReceivedBytesThreshold = 1;
Sp.PortName = this.cmbSerialPortNum.Text.Trim();
Sp.BaudRate = Convert.ToInt32(this.cmbBaudRate.Text.Trim());
// Sp.Parity = Parity.Even;
if (Enum.TryParse(_comParity, out Parity pt1))
{
Sp.Parity = pt1;
}
else
{
Gs.DevApp.ToolBox.MsgHelper.ShowError("无法识别的校验");
}
// Sp.StopBits = StopBits.One;
if (Enum.TryParse(_comStopBits, out StopBits pt2))
{
Sp.StopBits = pt2;
}
else
{
Gs.DevApp.ToolBox.MsgHelper.ShowError("无法识别的停止位");
}
Sp.DataReceived += new SerialDataReceivedEventHandler(Sp_DataReceived);
Sp.ReceivedBytesThreshold = 1;
LogHelper.Debug(this.ToString(), "打开串口通信");
if (!Sp.IsOpen)
Sp.Open();
setEnable(false);
//timer1.Enabled = false;
// LogHelper.Debug(this.ToString(), "启动刷新数据定时器");
// timer1.Start();
timer.Elapsed += OnTimedEvent;
timer.AutoReset = true; // 设置为true表示重复执行,false表示执行一次后停止
timer.Enabled = true; // 开始计时
Gs.DevApp.ToolBox.MsgHelper.ShowInformation("打开成功!");
}
catch (Exception exe)
{
LogHelper.Debug(this.ToString(), "打开失败:" + exe.Message);
Gs.DevApp.ToolBox.MsgHelper.ShowError("打开失败" + exe.Message);
}
}
///
/// 串收到数据
///
///
///
public void Sp_DataReceived(object sender, System.IO.Ports.SerialDataReceivedEventArgs e)
{
//string start = "\nwn";
string abc = string.Empty;
string strTemp = "";
try
{
LogHelper.Debug(this.ToString(), $"1监听到数据开始: ");
int i = Sp.BytesToRead;
LogHelper.Debug(this.ToString(), $"2监听到字节数:{i}");
if (i > 0)
{
abc = Sp.ReadExisting();
LogHelper.Debug(this.ToString(), $"3监听到数据:{abc}");
//strTemp = abc.Substring(7, 7);
//LogHelper.Debug(this.ToString(), :截取数据:{strTemp}");
//value = Math.Round(float.Parse(strTemp), 2).ToString();
//LogHelper.Debug(this.ToString(), :转换数据:{value}");
//this.Invoke(interfaceUpdataHandle, value);
this.Invoke(interfaceUpdataHandle, abc);
}
}
catch (Exception ex)
{
LogHelper.Debug(this.ToString(), ex.Message);
Gs.DevApp.ToolBox.MsgHelper.ShowError("收到数据:" + ex.Message);
return;
}
}
///
/// 接受到数据,开始处理数据
///
///
private void UpdateTextBox(string text)
{
txtNum.Text = text;
addModel();
}
///
/// 启用或禁用
///
///
private void setEnable(bool bl)
{
comLine.Enabled = bl;
cmbSerialPortNum.Enabled = bl;
cmbBaudRate.Enabled = bl;
comSjw.Enabled = bl;
comStopBits.Enabled = bl;
comParity.Enabled = bl;
btnStart.Enabled = false;
}
///
/// 上传称重数据
///
private void addModel()
{
string _lineId = comLine.GetId();
string _realWeight = txtNum.Text.Trim();
var _obj = new
{
lineId = _lineId,
realWeight = _realWeight,
};
try
{
string strJson = UtilityHelper.HttpPost("", _webServiceName + "EditModel", JsonConvert.SerializeObject(_obj));
ReturnModel _rtn = ToolBox.UtilityHelper.ReturnToDynamic(strJson);
if (_rtn.rtnCode <= 0)
{
Toast vm = new Toast(-1, _rtn.rtnMsg);
vm.Show();
}
}
catch (Exception ex)
{
ToolBox.MsgHelper.Warning("提示:" + ex.Message);
}
}
private void OnTimedEvent(Object source, ElapsedEventArgs e)
{
var _obj = new
{
lineId = comLine.GetId(),
};
try
{
var lst = new List();
var strReturn = UtilityHelper.HttpPost("", _webServiceName + "GetModelList", JsonConvert.SerializeObject(_obj),false);
var dd = UtilityHelper.ReturnToList(strReturn);
var dt = dd.rtnData;
BeginInvoke(new Action(() => {
// txtNum.Text = DateTime.Now.ToString();
gcMx1.BindingContext = new BindingContext();
gcMx1.DataSource = dt;
gcMx1.ForceInitialize();
gvMx1.BestFitColumns();
}));
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
}
}