| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167 |
- using System;
- using System.Collections.Generic;
- using System.IO;
- using System.Linq;
- using DBConn;
- namespace Core.ONH.Collection.comm
- {
- public class SerialPortHelper
- {
- private static volatile SerialPortHelper _instance;
- private static readonly object LockHelper = new object();
- private List<SerialPortEntity> _serialPorts;
- public Action<string> ShowMessage = null;
- private string ComPath;
- private IDataBase _dataBase;
- /// <summary>
- /// 构造
- /// </summary>
- private SerialPortHelper()
- {
- _serialPorts = new List<SerialPortEntity>();
- ComPath = Environment.CurrentDirectory + "\\SerialPort.xml";
-
- string connect = @"Data Source=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST={0})(PORT={1})))(CONNECT_DATA=(SERVER=DEDICATED)(SERVICE_NAME={2})));User Id={3};Password={4};";
- //@"Data Source=(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=172.16.2.126)(PORT=1521))(CONNECT_DATA=(SERVICE_NAME=tgjhy)));User Id=limsuser;Password=limsuser_2015";
- _dataBase = DataBaseFactory.Create(DataBaseType.Oracle, string.Format(connect, "172.16.2.126", "1521", "tgjhy", "limsuser", "limsuser_2015"));
- }
- /// <summary>
- /// 单列模式
- /// </summary>
- /// <returns></returns>
- public static SerialPortHelper Instance()
- {
- if (_instance == null)
- lock (LockHelper)
- {
- if (_instance == null)
- _instance = new SerialPortHelper();
- }
- return _instance;
- }
- public void SendData(string data, string Path)
- {
- /* string Type = IniFileHelper.ReadIniData("系统", "类型", "1", Path).ToUpper();
- if (Type == "1")
- {*/
- ONHData ONHData = new ONHData();
- ONHDataHelper.AnalysisString(data, out ONHData);
- ONHData.DeviceName = IniFileHelper.ReadIniData("系统", "设备", "", Path).ToUpper();
- _dataBase.ExecuteNonQuery(ONHDataHelper.Instance().getONHSql(ONHData));
- /* }
- else
- {
- SendDataWithReplay(data, Path);
- }*/
- }
- public void SendDataWithReplay(string data, string Path)
- {
- var serialPortEntity =
- new SerialPortEntity
- {
- PortName = IniFileHelper.ReadIniData("串口", "Com", "COM1", Path).ToUpper(),
- StrBaudRate = IniFileHelper.ReadIniData("串口", "BaudRate", "2400", Path),
- StrDataBits = IniFileHelper.ReadIniData("串口", "DataBits", "8", Path),
- StrStopBits = IniFileHelper.ReadIniData("串口", "StopBits", "ONE", Path).ToUpper(),
- StrParity = IniFileHelper.ReadIniData("串口", "Parity", "NONE", Path).ToUpper()
- };
- serialPortEntity.SendDataWithReplay(data);
- }
- public List<SerialPortEntity> SerialPorts
- {
- get { return _serialPorts; }
- }
- public void AddSerialPorts(SerialPortEntity SerialPortEntity)
- {
- _serialPorts.Add(SerialPortEntity);
- XmlHelper.AddNodes(ComPath, "COM", SerialPortEntity, "PortName",SerialPortEntity.PortName,
- new List<string>() {"PortName", "StrBaudRate", "StrDataBits", "StrStopBits", "StrParity", "DeviceName"});
- if (ShowMessage != null)
- SerialPortEntity.ReceiveData += (sender, data, message) => ShowMessage(message + data);
- SerialPortEntity.Start();
- }
-
- public void ChangeSerialPorts(SerialPortEntity SerialPortEntity)
- {
- SerialPortEntity.Stop();
- XmlHelper.ChangeNodes(ComPath, "COM", SerialPortEntity, "PortName", SerialPortEntity.PortName,
- new List<string>() { "PortName", "StrBaudRate", "StrDataBits", "StrStopBits", "StrParity", "DeviceName" });
- SerialPortEntity.Start();
- }
- public void DeleteSerialPorts( SerialPortEntity SerialPortEntity)
- {
- SerialPortEntity.Stop();
- _serialPorts.Remove(SerialPortEntity);
- XmlHelper.DeleteNodes(ComPath, "COM", "PortName", SerialPortEntity.PortName);
- GC.Collect();
- }
- public void InitRecive()
- {
- _serialPorts.ForEach(p=>p.Stop());
- _serialPorts = new List<SerialPortEntity>();
- _serialPorts = XmlHelper.GetXmlAttributes<SerialPortEntity>(ComPath, "COM");
- _serialPorts.ForEach(p =>
- {
- p.ReceiveData += OnReceiveData;
- p.Start();
- });
- GC.Collect();
-
- }
- private void OnReceiveData(object sender, ONHData data, string message)
- {
- ShowMessage(message);
- if (data==null) return;
- if (!data.Valid)
- {
- ShowMessage(data.DeviceName + " " +"数据无效,无法同步到产销系统");
- return;
- }
- try
- {
- _dataBase.ExecuteNonQuery(ONHDataHelper.Instance().getONHSql(data));
- ShowMessage(data.DeviceName + " " + "成功同步到产销系统");
- }
- catch (Exception ex)
- {
- ShowMessage(data.DeviceName + " " + "同步到产销系统失败:" + ex.Message);
- }
- }
- public void CloseRecive()
- {
- _serialPorts.ForEach(p=>p.Stop());
- GC.Collect();
- }
- }
- }
|