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); } } } }