Browse Source

Revert "添加注释"

This reverts commit cdb4b099ff.
pull/17/head
zhangfl0220 8 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;
}
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);
var simpcond = cond as SimpleCondition;

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

@ -11,7 +11,7 @@ namespace CoreTest
/// <summary>
/// Interaction logic for App.xaml
/// </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 MYCOSLOGNAME = "MyWEM";
@ -20,9 +20,8 @@ namespace CoreTest
static readonly string machine = Environment.MachineName;
public static readonly DAServer Server = new DAServer();
#region 定义当前用户的名称
static IPrincipal _princ;
public static IPrincipal Principal//定义用户对象的基本功能
public static IPrincipal Principal
{
get
{
@ -34,7 +33,7 @@ namespace CoreTest
}
}
public static string LogSource//获取当前用户的名称
public static string LogSource
{
get
{
@ -47,7 +46,7 @@ namespace CoreTest
{
get { return eventLog; }
}
#endregion
static App()
{
var curr = Process.GetCurrentProcess();
@ -87,7 +86,7 @@ namespace CoreTest
Current.DispatcherUnhandledException += App_DispatcherUnhandledException;
base.OnStartup(e);
#region
#region
if (Screen.AllScreens.Length == 1)//Server.SD.ScreenCount
{
w1 = new MainWindow();

90
SCADA/Program/SiemensPLCDriver/SiemensPLCDriver.cs

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

Loading…
Cancel
Save