Commit 0722175b LN

零点IO模块dll更新

1 个父辈 e6cebdb4
...@@ -35,8 +35,8 @@ ...@@ -35,8 +35,8 @@
<Prefer32Bit>false</Prefer32Bit> <Prefer32Bit>false</Prefer32Bit>
</PropertyGroup> </PropertyGroup>
<ItemGroup> <ItemGroup>
<Reference Include="AIOBOX"> <Reference Include="Asa.IOModule.AIOBOX">
<HintPath>..\dll\AIOBOX.dll</HintPath> <HintPath>..\dll\Asa.IOModule.AIOBOX.dll</HintPath>
</Reference> </Reference>
<Reference Include="halcondotnet"> <Reference Include="halcondotnet">
<HintPath>..\dll\halcondotnet.dll</HintPath> <HintPath>..\dll\halcondotnet.dll</HintPath>
......
using log4net; using Asa.IOModule;
using log4net;
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Linq; using System.Linq;
using System.Reflection; using System.Reflection;
using System.Text; using System.Text;
using Asa.AIOBOX;
using System.Threading; using System.Threading;
using System.Threading.Tasks; using System.Threading.Tasks;
using TSA_V.Common; using TSA_V.Common;
...@@ -13,35 +13,48 @@ namespace TSA_V.DeviceLibrary ...@@ -13,35 +13,48 @@ namespace TSA_V.DeviceLibrary
{ {
public class AIOBOXManager : IOBase public class AIOBOXManager : IOBase
{ {
//public static uint DefaultDICount = 16;
//public static uint DefaultDOCount = 16;
//public readonly ILog LOGGER = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
public Dictionary<string, AIOBOX> AIOMap = new Dictionary<string, AIOBOX>();
public readonly ILog LOGGER = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); public Dictionary<string, List<Box_Sta>> DIValueMap = new Dictionary<string, List<Box_Sta>>();
public Dictionary<string, AIOBOX_32> AIOMap = new Dictionary<string, AIOBOX_32>(); public Dictionary<string, List<Box_Sta>> DOValueMap = new Dictionary<string, List<Box_Sta>>();
public string DefaultIP = "";
public Dictionary<string, List<Status>> DIValueMap = new Dictionary<string, List<Status>>();
public Dictionary<string, List<Status>> DOValueMap = new Dictionary<string, List<Status>>();
private object DIMapLock = ""; private object DIMapLock = "";
private object DOMapLock = ""; private object DOMapLock = "";
public System.Timers.Timer timer = null;
private object DILock = ""; private object DILock = "";
private object DOLock = ""; private object DOLock = "";
public AIOBOXManager() public AIOBOXManager()
{ {
DIStartAddress =(int) Addr.DI_1; DIStartAddress = (int)0;
DoStartAddress = (int)Addr.DO_1; DoStartAddress = (int)0;
} }
public override void ConnectionIP(string ioIp, ushort port) private List<string> IoIPLIst = new List<string>();
private System.Timers.Timer conTimer = null;
private bool isProcess = false;
private DateTime lastTime = DateTime.Now;
public void ConnectionIP(string ioIp)
{ {
AIOBOX_32 aioBox = null; AIOBOX aioBox = null;
if (AIOMap.ContainsKey(ioIp)) if (AIOMap.ContainsKey(ioIp))
{ {
aioBox = AIOMap[ioIp]; aioBox = AIOMap[ioIp];
try
{
if (null != aioBox) if (null != aioBox)
{ {
aioBox.Close(); aioBox.Close();
aioBox = null; aioBox = null;
} }
}
catch (Exception ex)
{
LogUtil.error("关闭Io模块【" + ioIp + "】出错:" + ex.ToString());
}
AIOMap.Remove(ioIp); AIOMap.Remove(ioIp);
} }
if (DIValueMap.ContainsKey(ioIp)) if (DIValueMap.ContainsKey(ioIp))
...@@ -52,59 +65,91 @@ namespace TSA_V.DeviceLibrary ...@@ -52,59 +65,91 @@ namespace TSA_V.DeviceLibrary
{ {
DOValueMap.Remove(ioIp); DOValueMap.Remove(ioIp);
} }
int DIMS = ConfigAppSettings.GetIntValue("DIMS");
if (DIMS <= 0)
{
DIMS = 150;
}
else if (DIMS < 20)
{
DIMS = 100;
}
int DOMS = ConfigAppSettings.GetIntValue("DOMS");
if (DOMS <= 0)
{
DOMS = 300;
}
else if (DOMS < 100)
{
DOMS = 300;
}
int DILength = DefaultDILength;
int DOLength = DefaultDOLength;
string logName = "IO模块[" + ioIp + "] DI[" + DILength + "] DO[" + DOLength + "],[" + DIMS + "] [" + DOMS + "]";
try try
{ {
// Create new modbus master and add event functions // Create new modbus master and add event functions
aioBox = new AIOBOX_32(); aioBox = new AIOBOX();
aioBox.SetType(Box_Type.DI, DILength, Box_Type.DO, DOLength);
//aioBox.LogPath(Application.StartupPath + @"\logs\aio\", LogType.OnlyError);
aioBox.IP = ioIp; aioBox.IP = ioIp;
DefaultIP = ioIp;
LogUtil.info("开始连接IO模块【" + ioIp + "】,尝试重连三次"); // bool rtn = aioBox.AutoIP(ioIp);
for (int i = 1; i <= 3; i++)
{ // aioBox.SetInput(Asa.IOModule.Box_Type.DI, DILength);
bool result = aioBox.Connect(); // aioBox.SetOutput(Asa.IOModule.Box_Type.DO, DOLength);
if (result) //DI主动上传
{ // aioBox.AutoReadInput(true, DIMS);
AIOMap.Add(ioIp, aioBox); // aioBox.AutoReadOutput(false, DOMS);
LogUtil.info("第【"+i+"】次连接IO模块【" + ioIp + "】成功:" + aioBox.ErrInfo);
aioBox.AutoReadDI = true;
aioBox.AutoReadDO = true;
aioBox.DI_Changed_Event += AioBox_DI_Changed_Event; ; aioBox.DI_Changed_Event += AioBox_DI_Changed_Event; ;
aioBox.DO_Changed_Event += AioBox_DO_Changed_Event; aioBox.DO_Changed_Event += AioBox_DO_Changed_Event;
Thread.Sleep(10);
bool conRes = aioBox.Connect();
LogUtil.info("开始连接:" + logName + ":" + conRes.ToString());
AIOMap.Add(ioIp, aioBox);
Thread.Sleep(5);
//读取所有的DO //读取所有的DO
ReadAllDI(ioIp, 0); ReadAllDI(ioIp, 0);
break;
Thread.Sleep(5);
GC.Collect();
} }
else catch (Exception error)
{ {
LogUtil.error("第【" + i + "】次连接IO模块【" + ioIp + "】失败:" + aioBox.ErrInfo + ""); LogUtil.error( "连接IO模块 " + logName + " 出错:" + error.ToString());
} }
Thread.Sleep(10);
} }
private DateTime lastLogTime = DateTime.Now;
}
catch (Exception error) private void AioBox_Log_Out_Event(AIOBOX box, string[] s)
{
foreach (string str in s)
{ {
LogUtil.error(LOGGER, "连接IO模块[" + ioIp + "]出错:" + error.ToString()); LogUtil.debug("[" + box.IP + "]" + str);
} }
} }
private void AioBox_DI_Changed_Event(AIOBOX_32 box, Status[] sta) private void AioBox_DI_Changed_Event(AIOBOX box, Box_Sta[] sta)
{ {
try try
{ {
UpdateAllDI(box.IP, sta); UpdateAllDI(box.IP, sta);
//LogUtil.info("ReadAllDI [" + box.IP + "]:" + string.Join(" ", sta));
} }
catch (Exception ex) catch (Exception ex)
{ {
LogUtil.error("AioBox_DI_Changed_Event出错:" + ex.ToString()); LogUtil.error("AioBox_DI_Changed_Event出错:" + ex.ToString());
} }
} }
private void AioBox_DO_Changed_Event(AIOBOX_32 box, Status[] sta) private void AioBox_DO_Changed_Event(AIOBOX box, Box_Sta[] sta)
{ {
try try
{ {
UpdateAllDO(box.IP, sta); UpdateAllDO(box.IP, sta);
} }
catch (Exception ex) catch (Exception ex)
...@@ -113,14 +158,15 @@ namespace TSA_V.DeviceLibrary ...@@ -113,14 +158,15 @@ namespace TSA_V.DeviceLibrary
} }
} }
private void UpdateAllDI(string ip, Status[] sta) private void UpdateAllDI(string ip, Box_Sta[] sta)
{ {
if (sta != null && sta.Length >= DefaultDILength) if (sta != null && sta.Length >= DefaultDILength)
{ {
string updateDi = "[" + ip + "]:";
bool needUpdate = false; bool needUpdate = false;
List<Status> newList = new List<Status>(); List<Box_Sta> newList = new List<Box_Sta>();
newList.AddRange(sta); newList.AddRange(sta);
List<Status> oldList = null; List<Box_Sta> oldList = null;
DIValueMap.TryGetValue(ip, out oldList); DIValueMap.TryGetValue(ip, out oldList);
if (oldList == null || oldList.Count.Equals(newList.Count).Equals(false)) if (oldList == null || oldList.Count.Equals(newList.Count).Equals(false))
{ {
...@@ -150,15 +196,22 @@ namespace TSA_V.DeviceLibrary ...@@ -150,15 +196,22 @@ namespace TSA_V.DeviceLibrary
} }
} }
} }
private void UpdateAllDO(string ip, Status[] sta) private void UpdateAllDO(string ip, Box_Sta[] sta)
{ {
if (sta != null && sta.Length >= DefaultDOLength) if (sta != null && sta.Length >= DefaultDOLength)
{ {
bool needUpdate = false; bool needUpdate = false;
List<Status> newList = new List<Status>(); List<Box_Sta> newList = new List<Box_Sta>();
newList.AddRange(sta); newList.AddRange(sta);
List<Status> oldList = null; List<Box_Sta> oldList = null;
DOValueMap.TryGetValue(ip, out oldList); DOValueMap.TryGetValue(ip, out oldList);
//string result = "UpdateAllDO ip[" + ip + "], sta :";
//for (int i = 0; i < newList.Count; i++)
//{
// result += newList[i] + ",";
//}
//LogUtil.info(result);
if (oldList == null || oldList.Count.Equals(newList.Count).Equals(false)) if (oldList == null || oldList.Count.Equals(newList.Count).Equals(false))
{ {
needUpdate = true; needUpdate = true;
...@@ -187,57 +240,35 @@ namespace TSA_V.DeviceLibrary ...@@ -187,57 +240,35 @@ namespace TSA_V.DeviceLibrary
} }
} }
} }
private void timer_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
{
try
{
List<string> list = new List<string>(AIOMap.Keys);
foreach (string io in list)
{
//判断是否连接,如果没有连接自动重连
AIOBOX_32 clinet = AIOMap[io];
if (!clinet.IsConn)
{
LogUtil.error(LOGGER, io + "当前没有连上:" + clinet.ErrInfo);
}
}
}
catch (Exception ex)
{
LogUtil.error(LOGGER, "出错啦:" + ex.ToString());
}
Thread.Sleep(1);
}
public override void ConnectionKND(List<string> DIONameList)
{
foreach (string ip in DIONameList)
{
ConnectionIP(ip,0 );
}
}
//关闭所有的DO //关闭所有的DO
public override void CloseAllDO() public override void CloseAllDO()
{ {
foreach (AIOBOX_32 aio in AIOMap.Values) foreach (AIOBOX aio in AIOMap.Values)
{ {
Status[] statuses = new Status[16]; ushort length = DefaultDOLength;
for(int i = 0; i < 16; i++) for (ushort i = 0; i < length; i++)
{ {
statuses[i] = Status.Off; aio.WriteDO(i, Box_Sta.Off);
} }
aio.WriteDO(Addr.DI_1, statuses);
} }
} }
public override void CloseAllConnection() public override void CloseAllConnection()
{ {
foreach (AIOBOX_32 aio in AIOMap.Values) foreach (AIOBOX aio in AIOMap.Values)
{
try
{ {
aio.Close(); aio.Close();
} }
catch (Exception ex)
{
LogUtil.error("aio.Close出错:" + ex.ToString());
}
}
AIOMap.Clear(); AIOMap.Clear();
} }
public override void WriteSingleDO(string ioIp, byte slaveId, ushort StartAddress, IO_VALUE onOff) public override void WriteSingleDO(string ioIp, byte slaveId, ushort StartAddress, IO_VALUE onOff)
...@@ -245,45 +276,34 @@ namespace TSA_V.DeviceLibrary ...@@ -245,45 +276,34 @@ namespace TSA_V.DeviceLibrary
try try
{ {
AIOBOX_32 aioBox = getAIO(ioIp); AIOBOX aioBox = getAIO(ioIp);
if (aioBox != null) if (aioBox != null)
{ {
Addr add = GetAddr(StartAddress); bool result = aioBox.WriteDO(StartAddress, GetBox_Sta(onOff));
for (int i = 1; i <= 3; i++)
{
bool result = aioBox.WriteDO(GetAddr(StartAddress), GetStatus(onOff));
if (!result) if (!result)
{ {
LogUtil.error("AIO WriteSingleDO [" + StartAddress + "] 第" + i + "次失败:" + aioBox.ErrInfo); LogUtil.error("AIO WriteSingleDO [" + ioIp + "] [" + StartAddress + "] 失败:");
}
else
{
break;
}
} }
} }
else else
{ {
LogUtil.error(LOGGER, "ReadSingleDO出错没有连接IO模块:" + ioIp); LogUtil.error( "WriteSingleDO出错 没有连接IO模块:" + ioIp);
} }
} }
catch (Exception ex) catch (Exception ex)
{ {
LOGGER.Error("出错啦:" + ex.ToString()); Common.LogUtil.error("AIO WriteSingleDO [" + ioIp + "] [" + StartAddress + "] 出错啦:" + ex.ToString());
} }
} }
public override void WriteSingleDO(string ioIp, byte slaveId, ushort StartAddress, IO_VALUE onOff, int mSeconds) public override void WriteSingleDO(string ioIp, byte slaveId, ushort StartAddress, IO_VALUE onOff, int mSeconds)
{ {
try try
{ {
AIOBOX aioBox = getAIO(ioIp);
AIOBOX_32 aioBox = getAIO(ioIp);
Status currStatus = GetStatus(onOff);
if (aioBox != null) if (aioBox != null)
{ {
Addr add = GetAddr(StartAddress); Box_Sta currBox_Sta = GetBox_Sta(onOff);
aioBox.WriteDO(GetAddr(StartAddress), currStatus); aioBox.WriteDO(StartAddress, currBox_Sta);
//写入之后,等待指定间隔后回写 //写入之后,等待指定间隔后回写
System.Timers.Timer mytimer = new System.Timers.Timer(mSeconds); System.Timers.Timer mytimer = new System.Timers.Timer(mSeconds);
...@@ -291,71 +311,59 @@ namespace TSA_V.DeviceLibrary ...@@ -291,71 +311,59 @@ namespace TSA_V.DeviceLibrary
{ {
try try
{ {
aioBox.WriteDO(GetAddr(StartAddress), aioBox.ReverseStatus(currStatus)); aioBox.WriteDO(StartAddress, aioBox.ReverseStatus(currBox_Sta));
LogUtil.debug(LOGGER, "**********定时回写入 IO【" + ioIp + "," + StartAddress + ",值" + aioBox.ReverseStatus(currStatus) + "】:"); LogUtil.debug( "**********定时回写入 IO [" + ioIp + "] [" + StartAddress + "]值" + aioBox.ReverseStatus(currBox_Sta) + "】:");
} }
catch (Exception ex) catch (Exception ex)
{ {
LogUtil.error(LOGGER, "**********定时回写入 出错:" + ex.StackTrace); LogUtil.error( "**********定时回写入 出错:" + ex.StackTrace);
} }
}; };
mytimer.AutoReset = false;//设置是否自动重启,即自动执行多次; mytimer.AutoReset = false;//设置是否自动重启,即自动执行多次;
mytimer.Enabled = true;//是否执行System.Timers.Timer.Elapsed事件mytask; mytimer.Enabled = true;//是否执行System.Timers.Timer.Elapsed事件mytask;
} }
else else
{ {
LogUtil.error(LOGGER, "WriteSingleDO出错没有连接IO模块:" + ioIp); LogUtil.error( "AIO WriteSingleDO [" + ioIp + "] [" + StartAddress + "] 出错 没有连接IO模块:" + ioIp);
} }
} }
catch (Exception ex) catch (Exception ex)
{ {
LogUtil.error("WriteSingleDO出错:" + ioIp); LogUtil.error("AIO WriteSingleDO [" + ioIp + "] [" + StartAddress + "] 出错:" + ioIp);
} }
} }
public override void ReadAllDI(string ioIp, byte slaveId) public override void ReadAllDI(string ioIp, byte slaveId)
{ {
try try
{ {
AIOBOX_32 aioBox = getAIO(ioIp); AIOBOX aioBox = getAIO(ioIp);
if (aioBox != null) if (aioBox != null)
{ {
Status[] allDi; Box_Sta[] allDi = aioBox.ReadDI(0, DefaultDILength);
if (aioBox.ReadDI(Addr.DI_1, DefaultDILength, out allDi))
{
UpdateAllDI(ioIp, allDi); UpdateAllDI(ioIp, allDi);
} }
else
{
LogUtil.error("读取所有DI出错:" + aioBox.ErrInfo);
}
}
} }
catch (Exception ex) catch (Exception ex)
{ {
LogUtil.error("ReadAllDI出错:" + ioIp); LogUtil.error("ReadAllDI [" + ioIp + "]出错:" + ioIp);
} }
} }
public override void ReadAllDO(string ioIp, byte slaveId) public override void ReadAllDO(string ioIp, byte slaveId)
{ {
try try
{ {
AIOBOX_32 aioBox = getAIO(ioIp); AIOBOX aioBox = getAIO(ioIp);
if (aioBox != null) if (aioBox != null)
{ {
Status[] allDO; // int startIndex = StoreManager.Config.GetDILength(ioIp);
if (aioBox.ReadDO(Addr.DO_1, DefaultDOLength, out allDO)) Box_Sta[] allDO = aioBox.ReadDO(0, DefaultDOLength);
{
UpdateAllDO(ioIp, allDO); UpdateAllDO(ioIp, allDO);
} }
else
{
LogUtil.error("读取所有DO出错:" + aioBox.ErrInfo);
}
}
} }
catch (Exception ex) catch (Exception ex)
{ {
LogUtil.error("ReadAllDO出错:" + ioIp); LogUtil.error("ReadAllDO [" + ioIp + "]出错:" + ioIp);
} }
} }
public override IO_VALUE GetDOValue(string ioIP, byte slaveId, ushort StartAddress) public override IO_VALUE GetDOValue(string ioIP, byte slaveId, ushort StartAddress)
...@@ -363,19 +371,17 @@ namespace TSA_V.DeviceLibrary ...@@ -363,19 +371,17 @@ namespace TSA_V.DeviceLibrary
IO_VALUE value = IO_VALUE.LOW; IO_VALUE value = IO_VALUE.LOW;
try try
{ {
AIOBOX_32 aioBox = getAIO(ioIP); AIOBOX aioBox = getAIO(ioIP);
if (aioBox != null) if (aioBox != null)
{ {
Status status = Status.Off; Box_Sta sta = Box_Sta.Off;
Addr addr = GetAddr(StartAddress); if (DOValueMap.ContainsKey(ioIP) && DOValueMap[ioIP].Count > StartAddress)
int index =(int)StartAddress - (int)DefaultDILength;
if (DOValueMap.ContainsKey(ioIP) && DOValueMap[ioIP].Count>index)
{ {
status = DOValueMap[ioIP][index]; sta = DOValueMap[ioIP][StartAddress];
} }
else else
{ aioBox.ReadDO(addr, out status); } { sta = aioBox.ReadDO(StartAddress); }
if (status.Equals(Status.On)) if (sta.Equals(Box_Sta.On))
{ {
value = IO_VALUE.HIGH; value = IO_VALUE.HIGH;
} }
...@@ -383,7 +389,7 @@ namespace TSA_V.DeviceLibrary ...@@ -383,7 +389,7 @@ namespace TSA_V.DeviceLibrary
} }
catch (Exception ex) catch (Exception ex)
{ {
LogUtil.error("ReadDI 出错:" + ex.ToString()); LogUtil.error("GetDOValue [" + ioIP + "] [" + StartAddress + "] 出错:" + ex.ToString());
} }
return value; return value;
} }
...@@ -391,23 +397,25 @@ namespace TSA_V.DeviceLibrary ...@@ -391,23 +397,25 @@ namespace TSA_V.DeviceLibrary
public override IO_VALUE GetDIValue(string ioIP, byte slaveId, ushort StartAddress) public override IO_VALUE GetDIValue(string ioIP, byte slaveId, ushort StartAddress)
{ {
IO_VALUE value = IO_VALUE.LOW; IO_VALUE value = IO_VALUE.LOW;
for (int i = 1; i <= 3; i++)
{
try try
{ {
AIOBOX_32 aioBox = getAIO(ioIP); AIOBOX aioBox = getAIO(ioIP);
if (aioBox != null) if (aioBox != null)
{ {
Status status = Status.Off; Box_Sta sta = Box_Sta.Off;
Addr addr = GetAddr(StartAddress); // Box_Addr addr = GetAddr(StartAddress);
int index = StartAddress; int index = StartAddress;
if (DIValueMap.ContainsKey(ioIP) && DIValueMap[ioIP].Count> index) if (DIValueMap.ContainsKey(ioIP) && DIValueMap[ioIP].Count > index)
{ {
status = DIValueMap[ioIP][index]; sta = DIValueMap[ioIP][index];
} }
else else
{ {
aioBox.ReadDI(addr, out status); sta = aioBox.ReadDI(StartAddress);
} }
if (status.Equals(Status.On)) if (sta.Equals(Box_Sta.On))
{ {
value = IO_VALUE.HIGH; value = IO_VALUE.HIGH;
} }
...@@ -415,7 +423,8 @@ namespace TSA_V.DeviceLibrary ...@@ -415,7 +423,8 @@ namespace TSA_V.DeviceLibrary
} }
catch (Exception ex) catch (Exception ex)
{ {
LogUtil.error("GetDIValue 出错:" + ex.ToString()); LogUtil.error("GetDIValue [" + ioIP + "] [" + StartAddress + "] ["+i+"] 出错:" + ex.ToString());
}
} }
return value; return value;
} }
...@@ -435,30 +444,26 @@ namespace TSA_V.DeviceLibrary ...@@ -435,30 +444,26 @@ namespace TSA_V.DeviceLibrary
} }
catch (Exception ex) catch (Exception ex)
{ {
LogUtil.error(LOGGER, "GetIOValue获取数据出错:" + ex.ToString()); LogUtil.error( " GetIOValue [" + configIO.DeviceName + "] [" + configIO.IOIndex + "] 获取数据出错:" + ex.ToString());
} }
return value; return value;
} }
private Addr GetAddr(ushort StartAddress) private Box_Sta GetBox_Sta(IO_VALUE onOff)
{
return (Addr)(StartAddress );
}
private Status GetStatus(IO_VALUE onOff)
{ {
if (onOff.Equals(IO_VALUE.HIGH)) if (onOff.Equals(IO_VALUE.HIGH))
{ {
return Status.On; return Box_Sta.On;
} }
else else
{ {
return Status.Off; return Box_Sta.Off;
} }
} }
private AIOBOX_32 getAIO(string ioIp) private AIOBOX getAIO(string ioIp)
{ {
AIOBOX_32 aioBox = null; AIOBOX aioBox = null;
if (AIOMap.ContainsKey(ioIp)) if (AIOMap.ContainsKey(ioIp))
{ {
aioBox = AIOMap[ioIp]; aioBox = AIOMap[ioIp];
...@@ -466,13 +471,28 @@ namespace TSA_V.DeviceLibrary ...@@ -466,13 +471,28 @@ namespace TSA_V.DeviceLibrary
return aioBox; return aioBox;
} }
public override void ConnectionKND(List<string> dIODeviceNameList)
{
foreach (string ip in dIODeviceNameList)
{
ConnectionIP(ip);
}
}
public override void ConnectionIP(string kNDIP, ushort kNDPort)
{
ConnectionIP(kNDIP);
}
public override bool IsConnection(string kNDIP) public override bool IsConnection(string kNDIP)
{ {
AIOBOX_32 aioBox = getAIO(kNDIP); AIOBOX aioBox = getAIO(kNDIP);
if (aioBox != null) if (aioBox != null && aioBox.IsConn)
{ {
return aioBox.IsConn; return true;
}return false; }
return false;
} }
} }
} }
\ No newline at end of file \ No newline at end of file
此文件类型无法预览
<?xml version="1.0"?>
<doc>
<assembly>
<name>AIOBOX</name>
</assembly>
<members>
<member name="T:Asa.AIOBOX.AIOBOX_32">
<summary>
AIOBOX-32
</summary>
</member>
<member name="T:Asa.AIOBOX.AIOBOX_32.DI_Changed">
<summary>
自动读取DI委托
</summary>
<param name="box">AIOBOX</param>
<param name="sta">所有DI状态</param>
</member>
<member name="E:Asa.AIOBOX.AIOBOX_32.DI_Changed_Event">
<summary>
自动读取DI事件触发
</summary>
</member>
<member name="T:Asa.AIOBOX.AIOBOX_32.DO_Changed">
<summary>
自动读取DO委托
</summary>
<param name="box">AIOBOX</param>
<param name="sta">所有DO状态</param>
</member>
<member name="E:Asa.AIOBOX.AIOBOX_32.DO_Changed_Event">
<summary>
自动读取DO事件触发
</summary>
</member>
<member name="M:Asa.AIOBOX.AIOBOX_32.#ctor">
<summary>
AIOBOX-32
</summary>
</member>
<member name="P:Asa.AIOBOX.AIOBOX_32.IP">
<summary>
IP地址
</summary>
</member>
<member name="P:Asa.AIOBOX.AIOBOX_32.Mask">
<summary>
子网掩码
</summary>
</member>
<member name="P:Asa.AIOBOX.AIOBOX_32.Gateway">
<summary>
子网网关
</summary>
</member>
<member name="P:Asa.AIOBOX.AIOBOX_32.Port">
<summary>
ModBus端口
</summary>
</member>
<member name="P:Asa.AIOBOX.AIOBOX_32.IsConn">
<summary>
是否连接
</summary>
</member>
<member name="P:Asa.AIOBOX.AIOBOX_32.ErrInfo">
<summary>
错误信息
</summary>
</member>
<member name="P:Asa.AIOBOX.AIOBOX_32.AutoReadDI">
<summary>
自动读取DI状态,触发DI_Changed_Event
</summary>
</member>
<member name="P:Asa.AIOBOX.AIOBOX_32.AutoReadDO">
<summary>
自动读取DO状态,触发DO_Changed_Event
</summary>
</member>
<member name="M:Asa.AIOBOX.AIOBOX_32.Connect">
<summary>
连接
</summary>
<returns></returns>
</member>
<member name="M:Asa.AIOBOX.AIOBOX_32.Close">
<summary>
关闭连接
</summary>
</member>
<member name="M:Asa.AIOBOX.AIOBOX_32.ReverseStatus(Asa.AIOBOX.Status)">
<summary>
相反状态
</summary>
<param name="sta"></param>
<returns></returns>
</member>
<member name="M:Asa.AIOBOX.AIOBOX_32.WriteDO(Asa.AIOBOX.Addr,Asa.AIOBOX.Status)">
<summary>
写入单个DO
</summary>
<param name="add"></param>
<param name="sta"></param>
<returns></returns>
</member>
<member name="M:Asa.AIOBOX.AIOBOX_32.WriteDO_Reverse(Asa.AIOBOX.Addr,Asa.AIOBOX.Status@)">
<summary>
先把状态取反,然后写入单个DO
</summary>
<param name="add"></param>
<param name="sta"></param>
<returns></returns>
</member>
<member name="M:Asa.AIOBOX.AIOBOX_32.WriteDO(Asa.AIOBOX.Addr,Asa.AIOBOX.Status[])">
<summary>
写入多个DO
</summary>
<param name="add"></param>
<param name="sta"></param>
<returns></returns>
</member>
<member name="M:Asa.AIOBOX.AIOBOX_32.ReadDO(Asa.AIOBOX.Addr,Asa.AIOBOX.Status@)">
<summary>
读取单个DO
</summary>
<param name="add"></param>
<param name="sta"></param>
<returns></returns>
</member>
<member name="M:Asa.AIOBOX.AIOBOX_32.ReadDO(Asa.AIOBOX.Addr,System.UInt32,Asa.AIOBOX.Status[]@)">
<summary>
读取多个DO
</summary>
<param name="add">起始地址</param>
<param name="count">数量</param>
<param name="sta">状态</param>
<returns></returns>
</member>
<member name="M:Asa.AIOBOX.AIOBOX_32.ReadDI(Asa.AIOBOX.Addr,Asa.AIOBOX.Status@)">
<summary>
读取单个DI
</summary>
<param name="add"></param>
<param name="sta"></param>
<returns></returns>
</member>
<member name="M:Asa.AIOBOX.AIOBOX_32.ReadDI(Asa.AIOBOX.Addr,System.UInt32,Asa.AIOBOX.Status[]@)">
<summary>
读取多个DI
</summary>
<param name="add"></param>
<param name="count"></param>
<param name="sta"></param>
<returns></returns>
</member>
<member name="M:Asa.AIOBOX.AIOBOX_32.Command(System.Byte[]@)">
<summary>
命令,前7个字节
</summary>
<param name="data"></param>
</member>
<member name="M:Asa.AIOBOX.AIOBOX_32.Target(System.IAsyncResult)">
<summary>
回调函数,开启监听线程
</summary>
<param name="args"></param>
</member>
<member name="M:Asa.AIOBOX.AIOBOX_32.Listen">
<summary>
监听结果线程,把读取到的数据保存到buff
</summary>
</member>
<member name="M:Asa.AIOBOX.AIOBOX_32.Auto_Read_DIO">
<summary>
自动读取DIO线程
</summary>
</member>
<member name="M:Asa.AIOBOX.AIOBOX_32.Trigger_DIO">
<summary>
触发DIO改变事件
</summary>
</member>
<member name="M:Asa.AIOBOX.AIOBOX_32.ReadDI">
<summary>
读取所有DI状态
</summary>
<returns></returns>
</member>
<member name="M:Asa.AIOBOX.AIOBOX_32.ReadDO">
<summary>
读取所有DO状态
</summary>
<returns></returns>
</member>
<member name="T:Asa.AIOBOX.Reg">
<summary>
寄存器
</summary>
</member>
<member name="F:Asa.AIOBOX.Reg.ID">
<summary>
标识
</summary>
</member>
<member name="F:Asa.AIOBOX.Reg.Text">
<summary>
显示文本
</summary>
</member>
<member name="F:Asa.AIOBOX.Reg.Addr">
<summary>
寄存器地址
</summary>
</member>
<member name="F:Asa.AIOBOX.Reg.Status">
<summary>
当前的状态
</summary>
</member>
<member name="M:Asa.AIOBOX.Reg.#ctor(Asa.AIOBOX.Addr)">
<summary>
寄存器,文本空,状态OFF
</summary>
<param name="address">地址</param>
</member>
<member name="M:Asa.AIOBOX.Reg.#ctor(System.String,Asa.AIOBOX.Addr)">
<summary>
寄存器,状态OFF
</summary>
<param name="text">文本</param>
<param name="addr">地址</param>
</member>
<member name="M:Asa.AIOBOX.Reg.#ctor(System.Int32,System.String,Asa.AIOBOX.Addr)">
<summary>
寄存器,状态OFF
</summary>
<param name="id">标志</param>
<param name="text">文本</param>
<param name="addr">地址</param>
</member>
<member name="M:Asa.AIOBOX.Reg.#ctor(System.String,Asa.AIOBOX.Addr,Asa.AIOBOX.Status)">
<summary>
寄存器
</summary>
<param name="text">文本</param>
<param name="addr">地址</param>
<param name="status">状态</param>
</member>
<member name="M:Asa.AIOBOX.Reg.#ctor(System.Int32,System.String,Asa.AIOBOX.Addr,Asa.AIOBOX.Status)">
<summary>
寄存器
</summary>
<param name="id">标志</param>
<param name="text">文本</param>
<param name="address">地址</param>
<param name="status">状态</param>
</member>
<member name="T:Asa.AIOBOX.Addr">
<summary>
寄存器地址
</summary>
</member>
<member name="F:Asa.AIOBOX.Addr.DI_1">
<summary>
输入点,A1
</summary>
</member>
<member name="F:Asa.AIOBOX.Addr.DI_2">
<summary>
输入点,A2
</summary>
</member>
<member name="F:Asa.AIOBOX.Addr.DI_3">
<summary>
输入点,A3
</summary>
</member>
<member name="F:Asa.AIOBOX.Addr.DI_4">
<summary>
输入点,A4
</summary>
</member>
<member name="F:Asa.AIOBOX.Addr.DI_5">
<summary>
输入点,A5
</summary>
</member>
<member name="F:Asa.AIOBOX.Addr.DI_6">
<summary>
输入点,A6
</summary>
</member>
<member name="F:Asa.AIOBOX.Addr.DI_7">
<summary>
输入点,A7
</summary>
</member>
<member name="F:Asa.AIOBOX.Addr.DI_8">
<summary>
输入点,A8
</summary>
</member>
<member name="F:Asa.AIOBOX.Addr.DI_9">
<summary>
输入点,A9
</summary>
</member>
<member name="F:Asa.AIOBOX.Addr.DI_10">
<summary>
输入点,A10
</summary>
</member>
<member name="F:Asa.AIOBOX.Addr.DI_11">
<summary>
输入点,A11
</summary>
</member>
<member name="F:Asa.AIOBOX.Addr.DI_12">
<summary>
输入点,A12
</summary>
</member>
<member name="F:Asa.AIOBOX.Addr.DI_13">
<summary>
输入点,A13
</summary>
</member>
<member name="F:Asa.AIOBOX.Addr.DI_14">
<summary>
输入点,A14
</summary>
</member>
<member name="F:Asa.AIOBOX.Addr.DI_15">
<summary>
输入点,A15
</summary>
</member>
<member name="F:Asa.AIOBOX.Addr.DI_16">
<summary>
输入点,A16
</summary>
</member>
<member name="F:Asa.AIOBOX.Addr.DO_1">
<summary>
输出点,B1
</summary>
</member>
<member name="F:Asa.AIOBOX.Addr.DO_2">
<summary>
输出点,B2
</summary>
</member>
<member name="F:Asa.AIOBOX.Addr.DO_3">
<summary>
输出点,B3
</summary>
</member>
<member name="F:Asa.AIOBOX.Addr.DO_4">
<summary>
输出点,B4
</summary>
</member>
<member name="F:Asa.AIOBOX.Addr.DO_5">
<summary>
输出点,B5
</summary>
</member>
<member name="F:Asa.AIOBOX.Addr.DO_6">
<summary>
输出点,B6
</summary>
</member>
<member name="F:Asa.AIOBOX.Addr.DO_7">
<summary>
输出点,B7
</summary>
</member>
<member name="F:Asa.AIOBOX.Addr.DO_8">
<summary>
输出点,B8
</summary>
</member>
<member name="F:Asa.AIOBOX.Addr.DO_9">
<summary>
输出点,B9
</summary>
</member>
<member name="F:Asa.AIOBOX.Addr.DO_10">
<summary>
输出点,B10
</summary>
</member>
<member name="F:Asa.AIOBOX.Addr.DO_11">
<summary>
输出点,B11
</summary>
</member>
<member name="F:Asa.AIOBOX.Addr.DO_12">
<summary>
输出点,B12
</summary>
</member>
<member name="F:Asa.AIOBOX.Addr.DO_13">
<summary>
输出点,B13
</summary>
</member>
<member name="F:Asa.AIOBOX.Addr.DO_14">
<summary>
输出点,B14
</summary>
</member>
<member name="F:Asa.AIOBOX.Addr.DO_15">
<summary>
输出点,B15
</summary>
</member>
<member name="F:Asa.AIOBOX.Addr.DO_16">
<summary>
输出点,B16
</summary>
</member>
<member name="F:Asa.AIOBOX.Addr.NONE">
<summary>
</summary>
</member>
<member name="T:Asa.AIOBOX.Status">
<summary>
寄存器状态
</summary>
</member>
<member name="F:Asa.AIOBOX.Status.Off">
<summary>
断开,关闭,低电平
</summary>
</member>
<member name="F:Asa.AIOBOX.Status.On">
<summary>
闭合,打开,高电平
</summary>
</member>
</members>
</doc>
此文件类型无法预览
<?xml version="1.0"?>
<doc>
<assembly>
<name>Asa.IOModule.AIOBOX</name>
</assembly>
<members>
<member name="T:Asa.IOModule.AIOBOX">
<summary>
零点IO模块操作类
</summary>
</member>
<member name="T:Asa.IOModule.AIOBOX.DIO_Changed">
<summary>
自动读取DI委托
</summary>
<param name="box">AIOBOX</param>
<param name="sta">所有DI状态</param>
</member>
<member name="E:Asa.IOModule.AIOBOX.DI_Changed_Event">
<summary>
自动读取DI事件触发
</summary>
</member>
<member name="E:Asa.IOModule.AIOBOX.DO_Changed_Event">
<summary>
自动读取DO事件触发
</summary>
</member>
<member name="M:Asa.IOModule.AIOBOX.#ctor(System.String)">
<summary>
零点IO模块操作类
</summary>
<param name="logName"></param>
</member>
<member name="P:Asa.IOModule.AIOBOX.IP">
<summary>
IP地址
</summary>
</member>
<member name="P:Asa.IOModule.AIOBOX.Upload">
<summary>
输入主动上传
</summary>
</member>
<member name="P:Asa.IOModule.AIOBOX.IsConn">
<summary>
是否连接
</summary>
</member>
<member name="P:Asa.IOModule.AIOBOX.InputCount">
<summary>
DI总数
</summary>
</member>
<member name="P:Asa.IOModule.AIOBOX.OutputCount">
<summary>
DO总数
</summary>
</member>
<member name="M:Asa.IOModule.AIOBOX.SetType(Asa.IOModule.Box_Type,System.Int32,Asa.IOModule.Box_Type,System.Int32)">
<summary>
设置输入输出的类型
</summary>
<param name="input"></param>
<param name="inputCount"></param>
<param name="output"></param>
<param name="outputCount"></param>
</member>
<member name="M:Asa.IOModule.AIOBOX.Connect">
<summary>
连接
</summary>
<returns></returns>
</member>
<member name="M:Asa.IOModule.AIOBOX.Close">
<summary>
关闭连接
</summary>
</member>
<member name="M:Asa.IOModule.AIOBOX.ReverseStatus(Asa.IOModule.Box_Sta)">
<summary>
相反状态(ON/OFF)
</summary>
<param name="sta"></param>
<returns></returns>
</member>
<member name="M:Asa.IOModule.AIOBOX.ReverseStatus(Asa.IOModule.Box_Sta@)">
<summary>
相反状态(ON/OFF)
</summary>
<param name="sta"></param>
</member>
<member name="M:Asa.IOModule.AIOBOX.ReadDI(System.Int32)">
<summary>
读取单个DI输入状态(ON/OFF)
</summary>
<param name="add">输入地址,从0开始</param>
<returns></returns>
</member>
<member name="M:Asa.IOModule.AIOBOX.ReadDI(System.Int32,System.Int32)">
<summary>
读取多个DI输入状态(ON/OFF)
</summary>
<param name="add">起始地址,从0开始</param>
<param name="count">数量</param>
<returns></returns>
</member>
<member name="M:Asa.IOModule.AIOBOX.ReadAI(System.Int32)">
<summary>
读取单个AI模拟量的值
</summary>
<param name="add">模拟量地址,从0开始</param>
<returns></returns>
</member>
<member name="M:Asa.IOModule.AIOBOX.ReadAI(System.Int32,System.Int32)">
<summary>
读取多个AI模拟量的值
</summary>
<param name="add">起始地址,从0开始</param>
<param name="count">数量</param>
<returns></returns>
</member>
<member name="M:Asa.IOModule.AIOBOX.ReadDO(System.Int32)">
<summary>
读取单个DO输出状态(ON/OFF)
</summary>
<param name="add">输出地址,从0开始</param>
<returns></returns>
</member>
<member name="M:Asa.IOModule.AIOBOX.ReadDO(System.Int32,System.Int32)">
<summary>
读取多个DO输出状态(ON/OFF)
</summary>
<param name="add">起始地址,从0开始</param>
<param name="count">数量</param>
<returns></returns>
</member>
<member name="M:Asa.IOModule.AIOBOX.ReadAO(System.Int32)">
<summary>
读取单个AO模拟量的值
</summary>
<param name="add">输出地址,从0开始</param>
<returns></returns>
</member>
<member name="M:Asa.IOModule.AIOBOX.ReadAO(System.Int32,System.Int32)">
<summary>
读取多个AO模拟量的值
</summary>
<param name="add">起始地址,从0开始</param>
<param name="count">数量</param>
<returns></returns>
</member>
<member name="M:Asa.IOModule.AIOBOX.WriteDO(System.Int32,Asa.IOModule.Box_Sta)">
<summary>
写入单个DO输出状态(ON/OFF)
</summary>
<param name="add">输出地址,从0开始</param>
<param name="sta"></param>
<returns></returns>
</member>
<member name="M:Asa.IOModule.AIOBOX.GetLocalIP">
<summary>
获取本地IPv4地址
</summary>
<returns></returns>
</member>
<member name="M:Asa.IOModule.AIOBOX.Send">
<summary>
发送命令线程
</summary>
</member>
<member name="M:Asa.IOModule.AIOBOX.GetReadDI_Command">
<summary>
获取ReadDI的命令
</summary>
<returns></returns>
</member>
<member name="M:Asa.IOModule.AIOBOX.GetReadDO_Command">
<summary>
获取ReadDO的命令
</summary>
<returns></returns>
</member>
<member name="M:Asa.IOModule.AIOBOX.Listen">
<summary>
监听网络线程
</summary>
</member>
<member name="M:Asa.IOModule.AIOBOX.CommandProcess(System.Byte[])">
<summary>
接收到的命令处理方法,(task多线程)
</summary>
<param name="cmd"></param>
</member>
<member name="M:Asa.IOModule.AIOBOX.Reconn">
<summary>
重连线程
</summary>
</member>
<member name="M:Asa.IOModule.AIOBOX.Open">
<summary>
打开socket建立连接
</summary>
</member>
<member name="M:Asa.IOModule.AIOBOX.CheckIP(System.String)">
<summary>
检查IP地址
</summary>
<param name="ip"></param>
<returns></returns>
</member>
<member name="M:Asa.IOModule.AIOBOX.AutoIP(System.String)">
<summary>
自动获取IP地址,未连接前使用,必须在同一网段
</summary>
<param name="localIP">本地IP地址</param>
<returns></returns>
</member>
<member name="M:Asa.IOModule.AIOBOX.GetIP">
<summary>
获取IO模块IP地址
</summary>
</member>
<member name="M:Asa.IOModule.AIOBOX.Command">
<summary>
命令,前7个字节
</summary>
<returns></returns>
</member>
<member name="T:Asa.IOModule.Box_Type">
<summary>
IO模块类型
</summary>
</member>
<member name="F:Asa.IOModule.Box_Type.DI">
<summary>
数字信号输入
</summary>
</member>
<member name="F:Asa.IOModule.Box_Type.DO">
<summary>
数字信号输出
</summary>
</member>
<member name="F:Asa.IOModule.Box_Type.AI">
<summary>
模拟量输入
</summary>
</member>
<member name="F:Asa.IOModule.Box_Type.AO">
<summary>
模拟量输出
</summary>
</member>
<member name="T:Asa.IOModule.Box_Sta">
<summary>
IO模块寄存器状态
</summary>
</member>
<member name="F:Asa.IOModule.Box_Sta.Off">
<summary>
断开,关闭,低电平
</summary>
</member>
<member name="F:Asa.IOModule.Box_Sta.On">
<summary>
闭合,打开,高电平
</summary>
</member>
</members>
</doc>
支持 Markdown 格式
你添加了 0 到此讨论。请谨慎行事。
Finish editing this message first!