You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
143 lines
4.7 KiB
C#
143 lines
4.7 KiB
C#
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
|
|
}
|
|
}
|