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#

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