using System; using System.Collections.Generic; using System.Linq; using System.Net; using System.Net.Sockets; using System.Text; using System.Threading; using System.Threading.Tasks; using System.Timers; using System.Windows.Forms; using Core.Mes.Client.Comm.Tool; using Core.StlMes.Client.LgResMgt.Mcms.entity; using CoreFS.CA06; using Infragistics.Win.UltraWinListView; using Timer = System.Timers.Timer; namespace Core.StlMes.Client.LgResMgt.Mcms { public partial class TruckScaleServer : FrmBase { public TruckScaleServer() { InitializeComponent(); timer.Elapsed += timer_Elapsed; timer.Interval = 1 *2000 * 1000; } private static readonly string _path = Environment.CurrentDirectory + "\\data\\SerialPort.xml"; private SerialPortEntity _serialPortEntity; private CmmPoundBaseEntity cmmPoundBase; private SocketServer socketServer; public override void ToolBar_Click(object sender, string ToolbarKey) { switch (ToolbarKey) { case "start": start(); break; case "end": end(); break; case "close": Close(); break; } } protected override void OnLoad(EventArgs e) { base.OnLoad(e); _serialPortEntity = new SerialPortEntity() { StrBaudRate = XmlHelper.GetXmlData(_path, "StrBaudRate", "9600"), StrDataBits = XmlHelper.GetXmlData(_path, "StrDataBits", "8"), StrParity = XmlHelper.GetXmlData(_path, "StrParity", "NONE"), StrStopBits = XmlHelper.GetXmlData(_path, "StrStopBits", "ONE"), PortName = XmlHelper.GetXmlData(_path, "PortName", "COM1") }; cboNo.DataSource = EntityHelper.GetData( "com.steering.Mcms.PoundBaseServer.getPoudInfo", new object[] { ValidDataPurviewIds }, ob); cboNo.DisplayMember = "PoundNo"; var location = ""; location = XmlHelper.GetXmlData(_path, "cboNo", ""); if ("" == location) { if (cboNo.Items.Count > 0) { cboNo.SelectedIndex = 0; } } else { cboNo.Text = location; } baudRate.Text = _serialPortEntity.StrBaudRate; cmbCom.Text = _serialPortEntity.PortName; socketServer = new SocketServer(); txtIp.Text = socketServer.GetIpAdress(); txtPort.Text = "2333"; _serialPortEntity.ReceiveData += (sender, data, message, type, bData) => ShowMessage(data, message, type, bData); socketServer.ReceiveData += (sender, data, message, type, bData) => ShowMessage(data, message, type, bData); btnTest.Visible = this.UserInfo.GetUserID() == "admin"; chkDetail.Visible = this.UserInfo.GetUserID() == "admin"; } private void ShowMessage(object data, string message, DataType dataType,byte[] dataBytes) { if (dataType == DataType.ReceiveData) { if (chkDetail.Checked) showMsg.SafeRefreshControl(() => showMsg.AddMsg(message)); double wt; if (double.TryParse(data.ToString2(), out wt)) { lblWtNow.SafeRefreshControl(() => { lblWtNow.Text = (wt/100d).ToString("0.00") + "t"; }); } socketServer.SendMsgToClient(dataBytes); } else if (dataType == DataType.Open) { cmbCom.SafeRefreshControl(() => cmbCom.Enabled = false); baudRate.SafeRefreshControl(() => baudRate.Enabled = false); cboNo.SafeRefreshControl(() => cboNo.Enabled = false); showMsg.SafeRefreshControl(() => showMsg.AddMsg(message)); } else if (dataType == DataType.Close) { cmbCom.SafeRefreshControl(() => cmbCom.Enabled = true); baudRate.SafeRefreshControl(() => baudRate.Enabled = true); cboNo.SafeRefreshControl(() => cboNo.Enabled = true); showMsg.SafeRefreshControl(() => showMsg.AddMsg(message)); } else if (dataType == DataType.StartListen) { txtIp.SafeRefreshControl(() => txtIp.Enabled = false); txtPort.SafeRefreshControl(() => txtPort.Enabled = false); showMsg.SafeRefreshControl(() => showMsg.AddMsg(message)); } else if (dataType == DataType.StopListen) { txtPort.SafeRefreshControl(() => txtPort.Enabled = true); showMsg.SafeRefreshControl(() => showMsg.AddMsg(message)); } else if (dataType == DataType.EvenMessage && chkDetail.Checked) { showMsg.SafeRefreshControl(() => showMsg.AddMsg(message)); } else if (dataType == DataType.Error) { showMsg.SafeRefreshControl(() => showMsg.AddError(message)); } else if (dataType == DataType.ClientConnect) { ulvClient.SafeRefreshControl(() => { var temp = new UltraListViewItem(data, null, null) { Key = data.ToString3() }; foreach (var ultraListViewItem in ulvClient.Items) { if(ultraListViewItem.Key==data.ToString3()) ulvClient.Items.Remove(ultraListViewItem); } ulvClient.Items.Add(temp); }); showMsg.SafeRefreshControl(() => showMsg.AddMsg(message)); } else if (dataType == DataType.ClientDisconnect) { ulvClient.SafeRefreshControl(() => { foreach (var ultraListViewItem in ulvClient.Items) { if (ultraListViewItem.Key == data.ToString3()) ulvClient.Items.Remove(ultraListViewItem); } }); showMsg.SafeRefreshControl(() => showMsg.AddMsg(message)); } } private bool ConnectPort(out string showMsg) { showMsg = ""; if (_serialPortEntity == null) return false ; if (string.IsNullOrEmpty(cmbCom.Text)) { showMsg = @"串口号不能为空!"; return false; } if (string.IsNullOrEmpty(baudRate.Text)) { showMsg = @"波特率不能为空!"; return false; } _serialPortEntity.Start(); XmlHelper.SetXmlData(_path, "cboNo", cmmPoundBase.PoundNo); return true; } private void DisconnectPort() { if ((_serialPortEntity != null) && _serialPortEntity.IsOpen) { _serialPortEntity.Stop(); } } public void start() { string msg = ""; if (!ConnectPort(out msg)) { showMsg.AddError(msg); } try { socketServer.Ip = txtIp.Text; socketServer.Port = txtPort.Text; socketServer.Start(); } catch (Exception ex) { showMsg.AddError(ex.Message); } } public void end() { DisconnectPort(); socketServer.Stop(); } private void cboNo_SelectedValueChanged(object sender, EventArgs e) { if (cboNo.SelectedIndex < 0) return; cmmPoundBase = cboNo.SelectedItem as CmmPoundBaseEntity; CmmBaseProtocolEntity cmmBaseProtocol = null; if (cmmPoundBase != null) { List protocols = EntityHelper.GetData( "com.steering.Mcms.ProcotolServer.getProcotolId", new object[] {cmmPoundBase.PoundProtocolId}, ob); if ((protocols != null) && protocols.Any()) cmmBaseProtocol = new CmmBaseProtocolEntity { ProtocolId = cmmPoundBase.PoundProtocolId, ListC = protocols }; } _serialPortEntity.ChangeProtocol(new TruckScaleProtocol(cmmBaseProtocol)); } private void TruckScaleServer_FormClosing(object sender, FormClosingEventArgs e) { end(); } private readonly Timer timer = new Timer(); private void timer_Elapsed(object sender, ElapsedEventArgs e) { byte[] ReceiveData = new[] { (byte) 0x02, (byte) 0x34, (byte) 0x20, (byte) 0x22, (byte) 0x20, (byte) 0x20, (byte) 0x20, (byte) 0x30, (byte) 0x31, (byte) 0x30, (byte) 0x20, (byte) 0x20, (byte) 0x20, (byte) 0x30, (byte) 0x30, (byte) 0x30, (byte) 0x0D, }; Random r = new Random(); int a = (byte)r.Next(0x31, 0x38); ReceiveData[8] = (byte)a; _serialPortEntity.HandleData(ReceiveData.ToList()); } private void btnTest_Click(object sender, EventArgs e) { if (btnTest.Text.StartsWith("开始")) { timer.Start(); btnTest.Text = "结束测试"; timer_Elapsed(null, null); } else { timer.Stop(); btnTest.Text = "开始测试"; } } } }