Browse Source

Revert "添加注释"

This reverts commit cdb4b099ff.
pull/17/head
zhangfl0220 9 years ago
parent
commit
f1a014bc00
  1. 2
      SCADA/Program/BatchCoreService/DAService.cs
  2. 11
      SCADA/Program/CoreTest/App.xaml.cs
  3. 90
      SCADA/Program/SiemensPLCDriver/SiemensPLCDriver.cs

2
SCADA/Program/BatchCoreService/DAService.cs

@ -530,7 +530,7 @@ namespace BatchCoreService
break; break;
} }
cond.AddSubCondition(new SubCondition((SubAlarmType)dataReader.GetInt32(9), dataReader.GetFloat(10), cond.AddSubCondition(new SubCondition((SubAlarmType)dataReader.GetInt32(9), dataReader.GetFloat(10),
(Severity)dataReader.GetByte(11), dataReader.GetString(12), dataReader.GetBoolean(13)));//读取数据库表Meta_SubCondition里的值 (Severity)dataReader.GetByte(11), dataReader.GetString(12), dataReader.GetBoolean(13)));
cond.IsEnabled = dataReader.GetBoolean(3); cond.IsEnabled = dataReader.GetBoolean(3);
var simpcond = cond as SimpleCondition; var simpcond = cond as SimpleCondition;

11
SCADA/Program/CoreTest/App.xaml.cs

@ -11,7 +11,7 @@ namespace CoreTest
/// <summary> /// <summary>
/// Interaction logic for App.xaml /// Interaction logic for App.xaml
/// </summary> /// </summary>
public partial class App : System.Windows.Application//App类另一段代码是自动生成的,App类是程序的起点,可以搜索App看到。 public partial class App : System.Windows.Application
{ {
const string MYCOSLOGSOURCE = "MyWEM Application"; const string MYCOSLOGSOURCE = "MyWEM Application";
const string MYCOSLOGNAME = "MyWEM"; const string MYCOSLOGNAME = "MyWEM";
@ -20,9 +20,8 @@ namespace CoreTest
static readonly string machine = Environment.MachineName; static readonly string machine = Environment.MachineName;
public static readonly DAServer Server = new DAServer(); public static readonly DAServer Server = new DAServer();
#region 定义当前用户的名称
static IPrincipal _princ; static IPrincipal _princ;
public static IPrincipal Principal//定义用户对象的基本功能 public static IPrincipal Principal
{ {
get get
{ {
@ -34,7 +33,7 @@ namespace CoreTest
} }
} }
public static string LogSource//获取当前用户的名称 public static string LogSource
{ {
get get
{ {
@ -47,7 +46,7 @@ namespace CoreTest
{ {
get { return eventLog; } get { return eventLog; }
} }
#endregion
static App() static App()
{ {
var curr = Process.GetCurrentProcess(); var curr = Process.GetCurrentProcess();
@ -87,7 +86,7 @@ namespace CoreTest
Current.DispatcherUnhandledException += App_DispatcherUnhandledException; Current.DispatcherUnhandledException += App_DispatcherUnhandledException;
base.OnStartup(e); base.OnStartup(e);
#region #region
if (Screen.AllScreens.Length == 1)//Server.SD.ScreenCount if (Screen.AllScreens.Length == 1)//Server.SD.ScreenCount
{ {
w1 = new MainWindow(); w1 = new MainWindow();

90
SCADA/Program/SiemensPLCDriver/SiemensPLCDriver.cs

@ -89,93 +89,86 @@ namespace SiemensPLCDriver
_server = server; _server = server;
_name = name; _name = name;
} }
#region 西门子驱动所有的变量组列表,通过组来划分循环时间不同的变量。
List<IGroup> _groups = new List<IGroup>(); List<IGroup> _groups = new List<IGroup>();
public IEnumerable<IGroup> Groups public IEnumerable<IGroup> Groups
{ {
get { return _groups; } get { return _groups; }
} }
IDataServer _server;//通讯服务器IDataServer IDataServer _server;
public IDataServer Parent public IDataServer Parent
{ {
get { return _server; } get { return _server; }
} }
#endregion public IGroup AddGroup(string name, short id, int updateRate, float deadBand, bool active)
#region 添加和移除组
public IGroup AddGroup(string name, short id, int updateRate, float deadBand, bool active)//添加变量组
{ {
NetBytePLCGroup grp = new NetBytePLCGroup(id, name, updateRate, active, this); NetBytePLCGroup grp = new NetBytePLCGroup(id, name, updateRate, active, this);
_groups.Add(grp); _groups.Add(grp);
return grp; return grp;
} }
public bool RemoveGroup(IGroup grp)//移除变量组
public bool RemoveGroup(IGroup grp)
{ {
grp.IsActive = false; grp.IsActive = false;
return _groups.Remove(grp); return _groups.Remove(grp);
} }
#endregion
#region 建立M,I,Q对应的地址区域的字典
private static readonly Dictionary<char, int> dict = new Dictionary<char, int>(){ {'M',libnodave.daveFlags}, private static readonly Dictionary<char, int> dict = new Dictionary<char, int>(){ {'M',libnodave.daveFlags},
{'I',libnodave.daveInputs},{'Q',libnodave.daveOutputs}};// {'I',libnodave.daveInputs},{'Q',libnodave.daveOutputs}};
#endregion
#region 根据数据库里的设备地址(DeviceAddress)获取下位机PLC绝对地址(string) public string GetAddress(DeviceAddress address)
public string GetAddress(DeviceAddress address)//获取PLC地址 {
{//如果PLC地址区域是Area,则字符串为“DB+DBNumer,D";如果是PLC区域是daveFlags,则字符串为M;如果是daveInputs,则字符串为I,否则为Q
string addr = (address.Area == libnodave.daveDB ? string.Concat("DB", address.DBNumber, ",D") : string addr = (address.Area == libnodave.daveDB ? string.Concat("DB", address.DBNumber, ",D") :
address.Area == libnodave.daveFlags ? "M" : address.Area == libnodave.daveFlags ? "M" :
address.Area == libnodave.daveInputs ? "I" : "Q"); address.Area == libnodave.daveInputs ? "I" : "Q");
switch (address.VarType)//根据变量类型Type来确定后面的字符。以DB1,D为例 switch (address.VarType)
{ {
case DataType.BOOL: case DataType.BOOL:
return string.Concat(addr, address.Start, ".", address.Bit);//如果是布尔型,则如DB1,D2.1 return string.Concat(addr, address.Start, ".", address.Bit);
case DataType.BYTE: case DataType.BYTE:
return string.Concat(addr, "BB", address.Start);//如果是字节型,则如DB1,DBB1 return string.Concat(addr, "BB", address.Start);
case DataType.WORD: case DataType.WORD:
case DataType.SHORT: case DataType.SHORT:
return string.Concat(addr, "W", address.Start);//如果是短整型型,则如DB1,DW1 return string.Concat(addr, "W", address.Start);
case DataType.FLOAT: case DataType.FLOAT:
case DataType.INT: case DataType.INT:
return string.Concat(addr, "D", address.Start);//如果是浮点型或整型(32位),则如DB1,DD1 return string.Concat(addr, "D", address.Start);
default: default:
return string.Concat(addr, "BB", address.Start);//其他情况则如DB1,DBB1 return string.Concat(addr, "BB", address.Start);
} }
} }
#endregion
#region 根据下位机PLC绝对地址(string)获取数据库里的设备地址(DeviceAddress)
public DeviceAddress GetDeviceAddress(string address) public DeviceAddress GetDeviceAddress(string address)
{ {
DeviceAddress plcAddr = new DeviceAddress(); DeviceAddress plcAddr = new DeviceAddress();
if (string.IsNullOrEmpty(address) || address.Length < 2) return plcAddr;//如果地址为空或者字符长度小于2,则返回空的地址。 if (string.IsNullOrEmpty(address) || address.Length < 2) return plcAddr;
#region 是DB存储器的处理 if (address.Substring(0, 2) == "DB")
if (address.Substring(0, 2) == "DB")//PLC绝对地址(string)前两位是DB时,DB1,D2.1
{ {
int index = 2; int index = 2;
for (int i = index; i < address.Length; i++)//从第三位开始,如果不是十进制数,则返回索引号。 for (int i = index; i < address.Length; i++)
{ {
if (!char.IsDigit(address[i])) if (!char.IsDigit(address[i]))
{ {
index = i; break;//index=3 index = i; break;
} }
} }
plcAddr.Area = libnodave.daveDB; plcAddr.Area = libnodave.daveDB;
plcAddr.DBNumber = ushort.Parse(address.Substring(2, index - 2));//截取DB块的号,如DB1,D2.1,不是十进制的索引号是3,3-2=1,因此截取的长度为1 plcAddr.DBNumber = ushort.Parse(address.Substring(2, index - 2));
string str = address.Substring(index + 1);//截取从索引4开始的字符串,包括索引4号位置D2.1 string str = address.Substring(index + 1);
if (!char.IsDigit(str[0]))//如果第一位不是数字的话, if (!char.IsDigit(str[0]))
{ {
for (int i = 1; i < str.Length; i++)//则从第二位查找是数字的索引号,这里是1 for (int i = 1; i < str.Length; i++)
{ {
if (char.IsDigit(str[i])) if (char.IsDigit(str[i]))
{ {
index = i; break;//index=1 index = i; break;
} }
} }
if (str[2] == 'W')// if (str[2] == 'W')
{ {
int index1 = str.IndexOf('.');//index1=2 int index1 = str.IndexOf('.');
if (index1 > 0) if (index1 > 0)
{ {
int start = int.Parse(str.Substring(3, index1 - 3)); int start = int.Parse(str.Substring(3, index1 - 3));
@ -196,35 +189,29 @@ namespace SiemensPLCDriver
plcAddr.Bit = byte.Parse(str.RightFrom(index)); plcAddr.Bit = byte.Parse(str.RightFrom(index));
} }
} }
#endregion
#region 不是DB存储区的处理
else else
{ {
plcAddr.DBNumber = 0; plcAddr.DBNumber = 0;
char chr = address[0]; char chr = address[0];
#region 是M I Q 地址区时的处理
if (dict.ContainsKey(chr)) if (dict.ContainsKey(chr))
{ {
plcAddr.Area = dict[chr]; plcAddr.Area = dict[chr];
int index = address.IndexOf('.');//MW1时,index=0;M1.0时,index=2 int index = address.IndexOf('.');
if (address[1] == 'W')//当是字地址时,如MW1 if (address[1] == 'W')
{ {
#region 不可能执行的 if (index > 0)
if (index > 0)//那index就不可能>0
{ {
int start = int.Parse(address.Substring(2, index - 2)); int start = int.Parse(address.Substring(2, index - 2));
byte bit = byte.Parse(address.RightFrom(index)); byte bit = byte.Parse(address.RightFrom(index));
plcAddr.Start = bit > 8 ? start : start + 1; plcAddr.Start = bit > 8 ? start : start + 1;
plcAddr.Bit = (byte)(bit > 7 ? bit - 8 : bit); plcAddr.Bit = (byte)(bit > 7 ? bit - 8 : bit);
} }
#endregion
else else
{ {
plcAddr.Start = int.Parse(address.Substring(2));//只有Start位,没有Bit位 plcAddr.Start = int.Parse(address.Substring(2));
} }
} }
else//当不是字地址时,如M1.0 else
{ {
if (index > 0) if (index > 0)
{ {
@ -233,17 +220,14 @@ namespace SiemensPLCDriver
} }
else else
{ {
plcAddr.Start = int.Parse(address.Substring(1));//只有Start位,没有Bit位 plcAddr.Start = int.Parse(address.Substring(1));
} }
} }
} }
#endregion
} }
#endregion
return plcAddr; return plcAddr;
} }
#endregion
#region 通过集成于PLC上的以太网建立通讯连接
public bool Connect() public bool Connect()
{ {
lock (_async) lock (_async)
@ -273,7 +257,7 @@ namespace SiemensPLCDriver
_closed = true; _closed = true;
return false; return false;
} }
#endregion
public void Dispose() public void Dispose()
{ {
lock (_async) lock (_async)
@ -287,7 +271,7 @@ namespace SiemensPLCDriver
_closed = true; _closed = true;
} }
} }
#region 报错处理
string daveStrerror(int code) string daveStrerror(int code)
{ {
switch (code) switch (code)
@ -352,7 +336,7 @@ namespace SiemensPLCDriver
default: return "no message defined!"; default: return "no message defined!";
} }
} }
#endregion
public byte[] ReadBytes(DeviceAddress address, ushort len)//从PLC中读取自己数组 public byte[] ReadBytes(DeviceAddress address, ushort len)//从PLC中读取自己数组
{ {
if (dc != null) if (dc != null)

Loading…
Cancel
Save