using System; using System.IO; using System.Text; using System.Data; using Mesnac.Equips; using Mesnac.Equips.BaseInfo; using System.Runtime.InteropServices; using Mesnac.Codd.Session; namespace Mesnac.Equip.FictitiousPlc.SqlitePlc.Default { public class Equip : BaseEquip { #region 执行函数 private bool isOpened = false; private bool eOpen() { if (isOpened) { return true; } DbHelper dbHelper = DbHelperFactory.Instance.NewDbHelper(); string sqlstr = "select tbl_name from sqlite_master where type='table' limit 1"; dbHelper.CommandText = sqlstr; object obj = dbHelper.ToScalar(); if (obj != null && obj != DBNull.Value) { isOpened = true; } return isOpened; } private bool eRead(string block, int start, int len, out object[] buff) { string fileName = "N" + block.Trim(); buff = new object[len]; DbHelper dbHelper = DbHelperFactory.Instance.NewDbHelper(); string sqlstr = "SELECT DataFile FROM NDATA WHERE DataFileName='" + fileName + "'"; dbHelper.CommandText = sqlstr; object obj = dbHelper.ToScalar(); if (obj == null || obj == DBNull.Value) { return false; } string[] ss = obj.ToString().Split(','); for (int i = 0; i < buff.Length; i++) { buff[i] = Convert.ToInt32(ss[start + i]); } return true; } private bool eWrite(int block, int start, object[] buff) { string fileName = "N" + block.ToString(); DbHelper dbHelper = DbHelperFactory.Instance.NewDbHelper(); string sqlstr = "SELECT DataFile FROM NDATA WHERE DataFileName='" + fileName + "'"; dbHelper.CommandText = sqlstr; object obj = dbHelper.ToScalar(); if (obj == null || obj == DBNull.Value) { return false; } string[] ss = obj.ToString().Split(','); if (ss.Length < start + buff.Length) { return false; } for (int i = 0; i < buff.Length; i++) { ss[start + i] = buff[i].ToString(); } StringBuilder sqlsb = new StringBuilder(); for (int d = 0; d < ss.Length; d++) { if (d == ss.Length - 1) { sqlsb.Append(ss[d]); } else { sqlsb.Append(ss[d]).Append(","); } } sqlstr = "UPDATE NDATA SET DataFile=@DataFile WHERE DataFileName=@DataFileName"; dbHelper.CommandType = CommandType.Text; dbHelper.CommandText = sqlstr; dbHelper.ClearParameter(); dbHelper.AddParameter("@DataFile", sqlsb.ToString()); dbHelper.AddParameter("@DataFileName", fileName); dbHelper.ExecuteNonQuery(); return true; } private void eClose() { } #endregion #region BaseEquip 实现函数 public override bool Open() { base.State = eOpen(); return base.State; } public override bool Read(string block, int start, int len, out object[] buff) { bool Result = false; buff = new object[len]; try { Result = eRead(block, start, len, out buff); base.State = Result; return Result; } catch(Exception ex) { ICSharpCode.Core.LoggingService.Error(String.Format("读取SQLite设备变量失败!-({0})", ex.Message)); //ICSharpCode.Core.LoggingService.Error(ex.StackTrace); base.State = false; return false; } } public override bool Write(int block, int start, object[] buff) { bool Result = false; try { Result = eWrite(block, start, buff); return Result; } catch(Exception ex) { ICSharpCode.Core.LoggingService.Error(String.Format("写入SQLite设备变量失败!-({0})", ex.Message)); //ICSharpCode.Core.LoggingService.Error(ex.StackTrace); return false; } } public override void Close() { this.State = false; eClose(); } #endregion } }