Commit 0c4b4886 几米阳光

修改AIO

1 个父辈 8e192785
此文件类型无法预览
此文件类型无法预览
......@@ -36,9 +36,6 @@
<Prefer32Bit>false</Prefer32Bit>
</PropertyGroup>
<ItemGroup>
<Reference Include="Asa.IOModule.AIOBOX">
<HintPath>..\..\dll\Asa.IOModule.AIOBOX.dll</HintPath>
</Reference>
<Reference Include="CodeLibrary">
<HintPath>..\..\dll\CodeLibrary.dll</HintPath>
</Reference>
......@@ -66,6 +63,8 @@
<Compile Include="acSingleStore\AutomaticBaiting.cs" />
<Compile Include="DeviceLibrary\halcon\CodeManager.cs" />
<Compile Include="DeviceLibrary\IO\AIOBOX\AIOBOXManager.cs" />
<Compile Include="DeviceLibrary\IO\AIOBOX\BLL.cs" />
<Compile Include="DeviceLibrary\IO\AIOBOX\Common.cs" />
<Compile Include="DeviceLibrary\IO\IOManager.cs" />
<Compile Include="DeviceLibrary\IO\KangNaiDe\KNDManager.cs" />
<Compile Include="DeviceLibrary\IO\KangNaiDe\MasterTcpClient.cs" />
......
......@@ -69,6 +69,7 @@ namespace OnlineStore.DeviceLibrary
aioBox.AutoReadDO (true, DOMS);
aioBox.LogOut = true;
aioBox.Reconnect_Event += AioBox_Reconnect_Event;
if (StoreManager.Config.GetDILength(ioIp).Equals(8))
{
aioBox.Type = Box_Type.DIO_16;
......@@ -82,7 +83,7 @@ namespace OnlineStore.DeviceLibrary
aioBox.Log_Out_Event += AioBox_Log_Out_Event;
aioBox.Log_RxTx_Event += AioBox_Log_RxTx_Event;
AIOMap.Add(ioIp, aioBox);
LogUtil.info("开始连接IO模块[" + ioIp + "["+DIMS+"]["+DOMS+"],尝试重连三次");
LogUtil.info("开始连接IO模块[" + ioIp + "]["+DIMS+"]["+DOMS+"],尝试重连三次");
for (int i = 1; i <= 3; i++)
{
bool result = aioBox.Connect();
......@@ -115,10 +116,16 @@ namespace OnlineStore.DeviceLibrary
}
}
private void AioBox_Reconnect_Event(AIOBOX box, int times, ref bool conn)
private void AioBox_Reconnect_Event(AIOBOX box, int times, ref bool conn, Dictionary<string, string> dict)
{
conn = true;
LogUtil.error("重连AIO模块【" + box.IP + "】次数:" + times+"【"+box.ErrInfo+"】");
string msg = "重连AIO块【" + box.IP + "】次数:" + times + "【" + box.ErrInfo + "】,连接信息如下\r\n";
foreach (string key in dict.Keys)
{
msg = msg + "\t" + "[" + key + "]=[" + dict[key] + "],";
}
LogUtil.error(msg);
}
private DateTime lastLogTime = DateTime.Now;
......
/*
* @Description: 用于AIOBOX-32系列一体化IO模块
* @CreateDate: 2019-02-28
* @UpdateDate: 2019-05-13
* @Author: Asa
* @Version: 1.8
*
*/
using System;
using System.Net;
using System.Net.Sockets;
using System.Threading;
using System.Collections.Generic;
using OnlineStore.Common;
namespace Asa.IOModule
{
/// <summary>
/// AIOBOX操作类
/// </summary>
public class AIOBOX
{
private ushort _flag; //ModBusTCP标识
private Socket _client; //客户端
private Box_Type _type; //类型
private byte[] _addr; //地址
private Box_Sta[] _sta; //状态
private int _unrevd; //没有收到数据的时间
private int _unrevdRemote; //本地还是远程没有收到数据
private bool _readDI; //自动读取DI
private bool _readDO; //自动读取DO
private int _readDISleep; //自动读取DI间隔
private int _readDOSleep; //自动读取DO间隔
private List<string> _log; //日志
private List<string> _logRxTx; //日志
private List<byte[]> _send; //发送的命令
private List<byte[]> _receive; //接收的数据
private Thread tSend; //发送命令处理
private Thread tReceive; //接收信息处理
private Thread tListen; //监听网络
private Thread tTrigger; //触发DI、DO改变事件
private Thread tReadDI; //自动读取DI线程
private Thread tReadDO; //自动读取DO线程
private Thread tLogOut; //日志输出
private Thread tReconn; //断开重连
private const int SEND_SLEEP = 10; //发送命令间隔
private const int NET_SLEEP = 10; //接收网络间隔
private const int TRIG_SLEEP = 20; //触发事件间隔
/// <summary>
/// 自动读取DI委托
/// </summary>
/// <param name="box">AIOBOX</param>
/// <param name="sta">所有DI状态</param>
public delegate void DI_Changed(AIOBOX box, Box_Sta[] sta);
/// <summary>
/// 自动读取DI事件触发
/// </summary>
public event DI_Changed DI_Changed_Event;
/// <summary>
/// 自动读取DO委托
/// </summary>
/// <param name="box">AIOBOX</param>
/// <param name="sta">所有DO状态</param>
public delegate void DO_Changed(AIOBOX box, Box_Sta[] sta);
/// <summary>
/// 自动读取DO事件触发
/// </summary>
public event DO_Changed DO_Changed_Event;
/// <summary>
/// 日志输出
/// </summary>
/// <param name="box"></param>
/// <param name="s"></param>
public delegate void Log_Out(AIOBOX box, string[] s);
/// <summary>
/// 日志输出事件
/// </summary>
public event Log_Out Log_Out_Event;
/// <summary>
/// 日志输出
/// </summary>
/// <param name="box"></param>
/// <param name="s"></param>
public delegate void Log_RxTx(AIOBOX box, string[] s);
/// <summary>
/// 日志输出事件,发送命令的标识减去接收命令的标识
/// </summary>
public event Log_RxTx Log_RxTx_Event;
/// <summary>
/// 断开重连
/// </summary>
/// <param name="box"></param>
/// <param name="times">断开次数</param>
/// <param name="conn"></param>
public delegate void Reconnect(AIOBOX box, int times, ref bool conn, Dictionary<string, string> dict);
/// <summary>
/// 断开重连事件
/// </summary>
public event Reconnect Reconnect_Event;
/// <summary>
/// AIOBOX
/// </summary>
public AIOBOX()
{
_unrevd = 0;
_unrevdRemote = 0;
_readDI = false;
_readDO = false;
_readDISleep = 100;
_readDOSleep = 100;
_addr = new byte[32];
_sta = new Box_Sta[32];
_log = new List<string>();
_logRxTx = new List<string>();
_send = new List<byte[]>();
_receive = new List<byte[]>();
Type = Box_Type.DIO_32;
tReconn = new Thread(new ThreadStart(Reconn));
tReconn.Start();
}
/// <summary>
/// IP地址
/// </summary>
public string IP { set; get; } = "192.168.1.100";
/// <summary>
/// ModBus端口
/// </summary>
public int Port { set; get; } = 502;
/// <summary>
/// 是否连接
/// </summary>
public bool IsConn { get; private set; } = false;
/// <summary>
/// 错误信息
/// </summary>
public string ErrInfo { get; private set; } = "";
/// <summary>
/// 日志输出
/// </summary>
public bool LogOut { set; get; } = false;
/// <summary>
/// 模块的类型
/// </summary>
public Box_Type Type
{
set
{
_type = value;
if (value == Box_Type.DIO_16)
{
_addr[(int)Box_Addr.DI_1] = 0;
_addr[(int)Box_Addr.DI_2] = 1;
_addr[(int)Box_Addr.DI_3] = 2;
_addr[(int)Box_Addr.DI_4] = 3;
_addr[(int)Box_Addr.DI_5] = 4;
_addr[(int)Box_Addr.DI_6] = 5;
_addr[(int)Box_Addr.DI_7] = 6;
_addr[(int)Box_Addr.DI_8] = 7;
_addr[(int)Box_Addr.DI_9] = 255;
_addr[(int)Box_Addr.DI_10] = 255;
_addr[(int)Box_Addr.DI_11] = 255;
_addr[(int)Box_Addr.DI_12] = 255;
_addr[(int)Box_Addr.DI_13] = 255;
_addr[(int)Box_Addr.DI_14] = 255;
_addr[(int)Box_Addr.DI_15] = 255;
_addr[(int)Box_Addr.DI_16] = 255;
_addr[(int)Box_Addr.DO_1] = 8;
_addr[(int)Box_Addr.DO_2] = 9;
_addr[(int)Box_Addr.DO_3] = 10;
_addr[(int)Box_Addr.DO_4] = 11;
_addr[(int)Box_Addr.DO_5] = 12;
_addr[(int)Box_Addr.DO_6] = 13;
_addr[(int)Box_Addr.DO_7] = 14;
_addr[(int)Box_Addr.DO_8] = 15;
_addr[(int)Box_Addr.DO_9] = 255;
_addr[(int)Box_Addr.DO_10] = 255;
_addr[(int)Box_Addr.DO_11] = 255;
_addr[(int)Box_Addr.DO_12] = 255;
_addr[(int)Box_Addr.DO_13] = 255;
_addr[(int)Box_Addr.DO_14] = 255;
_addr[(int)Box_Addr.DO_15] = 255;
_addr[(int)Box_Addr.DO_16] = 255;
}
else if (value == Box_Type.DIO_32)
{
_addr[(int)Box_Addr.DI_1] = 0;
_addr[(int)Box_Addr.DI_2] = 1;
_addr[(int)Box_Addr.DI_3] = 2;
_addr[(int)Box_Addr.DI_4] = 3;
_addr[(int)Box_Addr.DI_5] = 4;
_addr[(int)Box_Addr.DI_6] = 5;
_addr[(int)Box_Addr.DI_7] = 6;
_addr[(int)Box_Addr.DI_8] = 7;
_addr[(int)Box_Addr.DI_9] = 8;
_addr[(int)Box_Addr.DI_10] = 9;
_addr[(int)Box_Addr.DI_11] = 10;
_addr[(int)Box_Addr.DI_12] = 11;
_addr[(int)Box_Addr.DI_13] = 12;
_addr[(int)Box_Addr.DI_14] = 13;
_addr[(int)Box_Addr.DI_15] = 14;
_addr[(int)Box_Addr.DI_16] = 15;
_addr[(int)Box_Addr.DO_1] = 16;
_addr[(int)Box_Addr.DO_2] = 17;
_addr[(int)Box_Addr.DO_3] = 18;
_addr[(int)Box_Addr.DO_4] = 19;
_addr[(int)Box_Addr.DO_5] = 20;
_addr[(int)Box_Addr.DO_6] = 21;
_addr[(int)Box_Addr.DO_7] = 22;
_addr[(int)Box_Addr.DO_8] = 23;
_addr[(int)Box_Addr.DO_9] = 24;
_addr[(int)Box_Addr.DO_10] = 25;
_addr[(int)Box_Addr.DO_11] = 26;
_addr[(int)Box_Addr.DO_12] = 27;
_addr[(int)Box_Addr.DO_13] = 28;
_addr[(int)Box_Addr.DO_14] = 29;
_addr[(int)Box_Addr.DO_15] = 30;
_addr[(int)Box_Addr.DO_16] = 31;
}
else if (value == Box_Type.DO_16)
{
_addr[(int)Box_Addr.DO_1] = 0;
_addr[(int)Box_Addr.DO_2] = 1;
_addr[(int)Box_Addr.DO_3] = 2;
_addr[(int)Box_Addr.DO_4] = 3;
_addr[(int)Box_Addr.DO_5] = 4;
_addr[(int)Box_Addr.DO_6] = 5;
_addr[(int)Box_Addr.DO_7] = 6;
_addr[(int)Box_Addr.DO_8] = 7;
_addr[(int)Box_Addr.DO_9] = 8;
_addr[(int)Box_Addr.DO_10] = 9;
_addr[(int)Box_Addr.DO_11] = 10;
_addr[(int)Box_Addr.DO_12] = 11;
_addr[(int)Box_Addr.DO_13] = 12;
_addr[(int)Box_Addr.DO_14] = 13;
_addr[(int)Box_Addr.DO_15] = 14;
_addr[(int)Box_Addr.DO_16] = 15;
}
}
get
{
return _type;
}
}
/// <summary>
/// 连接
/// </summary>
/// <returns></returns>
public bool Connect()
{
IsConn = false;
try
{
//IP合法
string pattern = @"^((2[0-4]\d|25[0-5]|[01]?\d\d?)\.){3}(2[0-4]\d|25[0-5]|[01]?\d\d?)$";
bool rtn = System.Text.RegularExpressions.Regex.IsMatch(IP, pattern);
if (!rtn)
{
ErrInfo = "非法的IP地址 " + IP;
return false;
}
//Ping服务端
System.Net.NetworkInformation.Ping ping = new System.Net.NetworkInformation.Ping();
System.Net.NetworkInformation.PingReply result = ping.Send(IP, 5000);
if (result.Status != System.Net.NetworkInformation.IPStatus.Success)
{
ErrInfo = "Ping " + IP + " 请求没有回应";
return false;
}
_unrevd = 0;
_unrevdRemote = 0;
_flag = 0;
_send.Clear();
_receive.Clear();
_log.Clear();
_logRxTx.Clear();
//建立连接
//_client.Blocking = true;
_client = new Socket(IPAddress.Parse(IP).AddressFamily, SocketType.Stream, ProtocolType.Tcp);
_client.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.SendTimeout, 500);
_client.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.ReceiveTimeout, 500);
_client.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.NoDelay, 1);
_client.BeginConnect(IP, Port, new AsyncCallback(Target), null);
Thread.Sleep(100); //需要等待一会才能获取连接状态
tReadDI = new Thread(new ThreadStart(AutoReadDI));
tReadDO = new Thread(new ThreadStart(AutoReadDO));
tSend = new Thread(new ThreadStart(Send));
tReceive = new Thread(new ThreadStart(Receive));
tLogOut = new Thread(new ThreadStart(LogPrint));
tSend.Start();
tReceive.Start();
tLogOut.Start();
tReadDI.Start();
tReadDO.Start();
ErrInfo = "OK";
IsConn = true;
return true;
}
catch (Exception ex)
{
ErrInfo = ex.Message;
LogUtil.error(ex.ToString());
return false;
}
}
/// <summary>
/// 关闭连接
/// </summary>
public void Close()
{
if (tReconn != null)
tReconn.Abort();
tReconn = null;
CloseConn();
}
/// <summary>
/// 自动读取DI状态,触发DI_Changed_Event
/// </summary>
/// <param name="read">是否自动读取</param>
/// <param name="sleep">间隔,必须大于10ms</param>
public void AutoReadDI(bool read, int sleep)
{
if (_type == Box_Type.DO_16)
{
_readDI = false;
_readDISleep = 10000;
}
else
{
if (sleep < 10)
{
_readDI = false;
_readDISleep = 100;
}
else
{
if (read)
{
_readDI = true;
_readDISleep = sleep;
}
else
{
_readDI = false;
_readDISleep = 100;
}
}
}
}
/// <summary>
/// 自动读取DO状态,触发DO_Changed_Event
/// </summary>
/// <param name="read">是否自动读取</param>
/// <param name="sleep">间隔,必须大于10ms</param>
public void AutoReadDO(bool read, int sleep)
{
if (sleep < 10)
{
_readDO = false;
_readDOSleep = 100;
}
else
{
if (read)
{
_readDO = true;
_readDOSleep = sleep;
}
else
{
_readDO = false;
_readDOSleep = 100;
}
}
}
/// <summary>
/// 相反状态
/// </summary>
/// <param name="sta"></param>
/// <returns></returns>
public Box_Sta ReverseStatus(Box_Sta sta)
{
return sta == Box_Sta.On ? Box_Sta.Off : Box_Sta.On;
}
/// <summary>
/// 读取单个DI
/// </summary>
/// <param name="add"></param>
/// <returns></returns>
public Box_Sta ReadDI(Box_Addr add)
{
return _sta[(int)add];
}
/// <summary>
/// 读取多个DI
/// </summary>
/// <param name="add"></param>
/// <param name="count"></param>
/// <returns></returns>
public Box_Sta[] ReadDI(Box_Addr add, int count)
{
Box_Sta[] sta = new Box_Sta[count];
Array.Copy(_sta, (int)add, sta, 0, count);
return sta;
}
/// <summary>
/// 读取单个DO
/// </summary>
/// <param name="add"></param>
/// <returns></returns>
public Box_Sta ReadDO(Box_Addr add)
{
return _sta[(int)add];
}
/// <summary>
/// 读取多个DO
/// </summary>
/// <param name="add"></param>
/// <param name="count"></param>
/// <returns></returns>
public Box_Sta[] ReadDO(Box_Addr add, int count)
{
Box_Sta[] sta = new Box_Sta[count];
Array.Copy(_sta, (int)add, sta, 0, count);
return sta;
}
/// <summary>
/// 写入单个DO
/// </summary>
/// <param name="add"></param>
/// <param name="sta"></param>
/// <returns></returns>
public bool WriteDO(Box_Addr add, Box_Sta sta)
{
try
{
byte[] data = Command();
byte[] buff = new byte[12];
Array.Copy(data, 0, buff, 0, data.Length);
buff[7] = 5; //功能码
buff[9] = _addr[(int)add]; //地址
buff[10] = (byte)sta; //写入值
if (LogOut)
{
byte[] bb = new byte[2];
bb[0] = buff[1];
bb[1] = buff[0];
ushort flag = BitConverter.ToUInt16(bb, 0);
string s = string.Format("{0:HH:mm:ss:fff} WriteDO {1} ({2},{3})", DateTime.Now, flag, add.ToString(), sta.ToString());
_log.Add(s);
}
_send.Add(buff);
if (_unrevdRemote == 0) ErrInfo = "OK";
return true;
}
catch (Exception ex)
{
ErrInfo = ex.Message;
LogUtil.error(ex.ToString());
return false;
}
}
/// <summary>
/// 获取本地IPv4地址
/// </summary>
/// <returns></returns>
public string[] GetLocalIP()
{
List<string> str = new List<string>();
IPAddress[] add = Dns.GetHostEntry(Dns.GetHostName()).AddressList;
foreach (IPAddress ip in add)
{
if (ip.AddressFamily.ToString() == "InterNetwork")
str.Add(ip.ToString());
}
return str.ToArray();
}
/// <summary>
/// 发送命令
/// </summary>
private void Send()
{
string s;
ushort flag;
while (true)
{
if (_send.Count > 0)
{
if (_send[0] != null)
{
try
{
_client.Send(_send[0]);
if (LogOut)
{
byte[] bb = new byte[2];
bb[0] = _send[0][1];
bb[1] = _send[0][0];
flag = BitConverter.ToUInt16(bb, 0);
s = string.Format("{0:HH:mm:ss:fff} Send {1}", DateTime.Now, flag);
_log.Add(s);
_logRxTx.Add(flag + "," + _send[0][7]);
}
_send.RemoveAt(0);
}
catch (Exception ex)
{
ErrInfo = ex.Message;
LogUtil.error(ex.ToString());
_unrevdRemote = 1;
break;
}
}
}
Thread.Sleep(SEND_SLEEP);
}
}
/// <summary>
/// 接收命令
/// </summary>
private void Receive()
{
while (true)
{
if (_receive.Count > 0)
{
if (_receive[0] != null)
{
if (_receive[0][7] == 1)
ReadDO(_receive[0]);
else if (_receive[0][7] == 2)
ReadDI(_receive[0]);
else if (_receive[0][7] == 5)
ReadSingle(_receive[0]);
if (LogOut)
{
byte[] bb = new byte[2];
bb[0] = _receive[0][1];
bb[1] = _receive[0][0];
ushort flag = BitConverter.ToUInt16(bb, 0);
_logRxTx.Remove(flag + "," + _receive[0][7]);
}
_receive.RemoveAt(0);
}
}
Thread.Sleep(10);
}
}
/// <summary>
/// 读取单个DO
/// </summary>
/// <param name="buff"></param>
private void ReadSingle(byte[] buff)
{
//try
//{
string s;
if (LogOut)
{
byte[] bb = new byte[2];
bb[0] = buff[1];
bb[1] = buff[0];
ushort flag = BitConverter.ToUInt16(bb, 0);
s = string.Format("{0:HH:mm:ss:fff} WriteDO Receive {1}", DateTime.Now, flag);
_log.Add(s);
}
// int n = 0;
// int move = 0;
// byte val = _receive[0][9];
// for (int i = 0; i < 8; i++)
// {
// n = (val & Convert.ToInt32(Math.Pow(2, move))) >> move;
// _sta[i + 16] = n == 1 ? Box_Sta.On : Box_Sta.Off;
// move++;
// }
// if (_receive[0][8] == 2)
// {
// move = 0;
// val = _receive[0][10];
// for (int i = 8; i < 16; i++)
// {
// n = (val & Convert.ToInt32(Math.Pow(2, move))) >> move;
// _sta[i + 16] = n == 1 ? Box_Sta.On : Box_Sta.Off;
// move++;
// }
// }
// ErrInfo = "OK";
//}
//catch (Exception ex)
//{
// ErrInfo = ex.Message;
//}
}
/// <summary>
/// 读取所有DO状态
/// </summary>
/// <param name="buff"></param>
/// <returns></returns>
private bool ReadDO(byte[] buff)
{
try
{
string s;
if (LogOut)
{
byte[] bb = new byte[2];
bb[0] = buff[1];
bb[1] = buff[0];
ushort flag = BitConverter.ToUInt16(bb, 0);
s = string.Format("{0:HH:mm:ss:fff} ReadDO {1} ", DateTime.Now, flag);
s += Convert.ToString(buff[9], 2);
if (buff[8] == 2)
s += "," + Convert.ToString(buff[10], 2);
_log.Add(s);
}
int n = 0;
int move = 0;
byte val = buff[9];
for (int i = 0; i < 8; i++)
{
n = (val & Convert.ToInt32(Math.Pow(2, move))) >> move;
_sta[i + 16] = n == 1 ? Box_Sta.On : Box_Sta.Off;
move++;
}
if (buff[8] == 2)
{
move = 0;
val = buff[10];
for (int i = 8; i < 16; i++)
{
n = (val & Convert.ToInt32(Math.Pow(2, move))) >> move;
_sta[i + 16] = n == 1 ? Box_Sta.On : Box_Sta.Off;
move++;
}
}
if (_unrevdRemote == 0) ErrInfo = "OK";
return true;
}
catch (Exception ex)
{
ErrInfo = ex.Message;
LogUtil.error(ex.ToString());
return false;
}
}
/// <summary>
/// 读取所有DI状态
/// </summary>
/// <returns></returns>
private bool ReadDI(byte[] buff)
{
try
{
string s;
if (LogOut)
{
byte[] bb = new byte[2];
bb[0] = buff[1];
bb[1] = buff[0];
ushort flag = BitConverter.ToUInt16(bb, 0);
s = string.Format("{0:HH:mm:ss:fff} ReadDI {1} ", DateTime.Now, flag);
s += Convert.ToString(buff[9], 2);
if (buff[8] == 2)
s += "," + Convert.ToString(buff[10], 2);
_log.Add(s);
}
int n = 0;
int move = 0;
byte val = buff[9];
for (int i = 0; i < 8; i++)
{
n = (val & Convert.ToInt32(Math.Pow(2, move))) >> move;
_sta[i] = n == 1 ? Box_Sta.On : Box_Sta.Off;
move++;
}
if (buff[8] == 2)
{
move = 0;
val = buff[10];
for (int i = 8; i < 16; i++)
{
n = (val & Convert.ToInt32(Math.Pow(2, move))) >> move;
_sta[i] = n == 1 ? Box_Sta.On : Box_Sta.Off;
move++;
}
}
if (_unrevdRemote == 0) ErrInfo = "OK";
return true;
}
catch (Exception ex)
{
ErrInfo = ex.Message;
LogUtil.error(ex.ToString());
return false;
}
}
/// <summary>
/// 命令,前7个字节
/// </summary>
/// <returns></returns>
private byte[] Command()
{
byte[] add = BitConverter.GetBytes(++_flag);
byte[] data = new byte[7];
data[0] = add[1];
data[1] = add[0];
data[2] = 0;
data[3] = 0;
data[4] = 0;
data[5] = 0;
data[6] = 1;
if (_flag == ushort.MaxValue) _flag = 0;
return data;
}
/// <summary>
/// 触发DIO改变事件
/// </summary>
private void TriggerDIO()
{
int n;
Box_Sta[] sta = null;
while (true)
{
n = 0;
if (_readDI && DI_Changed_Event != null)
{
if (_type == Box_Type.DIO_16) sta = new Box_Sta[8];
else if (_type == Box_Type.DIO_32) sta = new Box_Sta[16];
Array.Copy(_sta, 0, sta, 0, sta.Length);
DI_Changed_Event.Invoke(this, sta);
Thread.Sleep(TRIG_SLEEP);
n++;
}
if (_readDO && DO_Changed_Event != null)
{
if (_type == Box_Type.DIO_16) sta = new Box_Sta[8];
else if (_type == Box_Type.DIO_32) sta = new Box_Sta[16];
else if (_type == Box_Type.DO_16) sta = new Box_Sta[16];
Array.Copy(_sta, 16, sta, 0, sta.Length);
DO_Changed_Event.Invoke(this, sta);
Thread.Sleep(TRIG_SLEEP);
n++;
}
if (n == 0)
Thread.Sleep(TRIG_SLEEP);
}
}
/// <summary>
/// 日志输出线程
/// </summary>
private void LogPrint()
{
int len = 0;
while (true)
{
if (LogOut && _log.Count > len)
{
len = _log.Count;
string[] ss = new string[len + 1];
_log.CopyTo(0, ss, 0, len);
Log_Out_Event?.Invoke(this, ss);
_log.RemoveRange(0, len);
len = 0;
}
if (LogOut)
{
Log_RxTx_Event?.Invoke(this, _logRxTx.ToArray());
}
Thread.Sleep(1000);
}
}
/// <summary>
/// 自动读取DI线程
/// </summary>
private void AutoReadDI()
{
while (true)
{
if (IsConn && _readDI)
{
byte[] data = Command();
byte[] buff = new byte[12];
Array.Copy(data, 0, buff, 0, data.Length);
buff[7] = 2; //功能码
buff[9] = _addr[(int)Box_Addr.DI_1]; //地址
if (_type == Box_Type.DIO_16)
buff[11] = 8; //个数
else if (_type == Box_Type.DIO_32)
buff[11] = 16; //个数
_send.Add(buff);
}
Thread.Sleep(_readDISleep);
}
}
/// <summary>
/// 自动读取DO线程
/// </summary>
private void AutoReadDO()
{
while (true)
{
if (IsConn && _readDO)
{
byte[] data = Command();
byte[] buff = new byte[12];
Array.Copy(data, 0, buff, 0, data.Length);
buff[7] = 1; //功能码
buff[9] = _addr[(int)Box_Addr.DO_1]; //地址
if (_type == Box_Type.DIO_16)
buff[11] = 8; //个数
else if (_type == Box_Type.DIO_32)
buff[11] = 16; //个数
else if (_type == Box_Type.DO_16)
buff[11] = 16; //个数
_send.Add(buff);
}
Thread.Sleep(_readDOSleep);
}
}
/// <summary>
/// 监听结果线程
/// </summary>
private void Listen()
{
byte[] bb = new byte[100];
while (true)
{
if (_client.Available > 0)
{
Thread.Sleep(2);
int len = _client.Receive(bb);
byte[] buff = new byte[len];
Array.Copy(bb, buff, len);
_receive.Add(buff);
_unrevd = 0;
}
_unrevd += NET_SLEEP;
Thread.Sleep(NET_SLEEP);
}
}
/// <summary>
/// 回调函数,开启监听线程
/// </summary>
/// <param name="args"></param>
private void Target(IAsyncResult args)
{
if (!args.IsCompleted) return;
if (_client == null || !_client.Connected) return;
tListen = new Thread(new ThreadStart(Listen)) { IsBackground = true };
tTrigger = new Thread(new ThreadStart(TriggerDIO)) { IsBackground = true };
tListen.Start();
tTrigger.Start();
}
/// <summary>
/// 断开重连
/// </summary>
private void Reconn()
{
bool rtn = false;
bool loop = false;
bool conn = false;
int times = 0;
while (true)
{
try
{
if (IsConn)
{
if (_unrevd > 10000 || _unrevdRemote > 0) //断开10s后重连
{
//临时
Dictionary<string, string> dic = new Dictionary<string, string>();
foreach (System.Reflection.PropertyInfo info in _client.GetType().GetProperties())
try {
dic.Add(info.Name, info.GetValue(_client) == null ? "null" : info.GetValue(_client).ToString());
} catch(Exception ex)
{
dic.Add("错误"+info.Name, ex.Message);
}
CloseConn();
Thread.Sleep(100);
if (Reconnect_Event != null)
{
loop = false;
conn = false;
do
{
if (!loop)
{
if (_unrevdRemote == 0)
ErrInfo = "本地缓存连续10s未收到数据";
}
times++;
Reconnect_Event.Invoke(this, times, ref conn, dic);
if (conn)
{
rtn = Connect();
if (rtn)
{
loop = false;
times = 0;
}
else
{
conn = false;
loop = true;
}
}
else
{
loop = false;
}
} while (loop);
}
}
}
}
catch (Exception ex)
{
LogUtil.error("Reconn出错:"+ex.ToString());
}
Thread.Sleep(1000);
}
}
/// <summary>
/// 关闭连接
/// </summary>
private void CloseConn()
{
IsConn = false;
if (tListen != null) tListen.Abort();
tListen = null;
if (tReadDI != null) tReadDI.Abort();
tReadDI = null;
if (tReadDO != null) tReadDO.Abort();
tReadDO = null;
if (tTrigger != null) tTrigger.Abort();
tTrigger = null;
if (tLogOut != null) tLogOut.Abort();
tLogOut = null;
if (tSend != null) tSend.Abort();
tSend = null;
if (tReceive != null) tReceive.Abort();
tReceive = null;
if (_client != null)
{
_client.Shutdown(SocketShutdown.Both);
_client.Close();
}
_client = null;
}
}
}
\ No newline at end of file

namespace Asa.IOModule
{
/// <summary>
/// IO模块寄存器
/// </summary>
public class Reg
{
/// <summary>
/// 标识
/// </summary>
public int ID;
/// <summary>
/// 文本,仅用于显示
/// </summary>
public string Text;
/// <summary>
/// 寄存器地址
/// </summary>
public Box_Addr Address;
/// <summary>
/// 当前的状态
/// </summary>
public Box_Sta Status;
/// <summary>
/// 寄存器,文本空,状态OFF
/// </summary>
/// <param name="address">地址</param>
public Reg(Box_Addr address) : this(0, "", address, Box_Sta.Off)
{
}
/// <summary>
/// 寄存器,状态OFF
/// </summary>
/// <param name="text">文本</param>
/// <param name="addr">地址</param>
public Reg(string text, Box_Addr addr) : this(0, text, addr, Box_Sta.Off)
{
}
/// <summary>
/// 寄存器,状态OFF
/// </summary>
/// <param name="id">标志</param>
/// <param name="text">文本</param>
/// <param name="addr">地址</param>
public Reg(int id, string text, Box_Addr addr) : this(id, text, addr, Box_Sta.Off)
{
}
/// <summary>
/// 寄存器
/// </summary>
/// <param name="text">文本</param>
/// <param name="addr">地址</param>
/// <param name="status">状态</param>
public Reg(string text, Box_Addr addr, Box_Sta status) : this(0, text, addr, status)
{
}
/// <summary>
/// 寄存器
/// </summary>
/// <param name="id">标志</param>
/// <param name="text">文本</param>
/// <param name="address">地址</param>
/// <param name="status">状态</param>
public Reg(int id, string text, Box_Addr address, Box_Sta status)
{
ID = id;
Text = text;
Address = address;
Status = status;
}
}
/// <summary>
/// IO模块寄存器地址
/// </summary>
public enum Box_Addr : int
{
/// <summary>
/// 输入点,DI01
/// </summary>
DI_1,
/// <summary>
/// 输入点,DI02
/// </summary>
DI_2,
/// <summary>
/// 输入点,DI03
/// </summary>
DI_3,
/// <summary>
/// 输入点,DI04
/// </summary>
DI_4,
/// <summary>
/// 输入点,DI05
/// </summary>
DI_5,
/// <summary>
/// 输入点,DI06
/// </summary>
DI_6,
/// <summary>
/// 输入点,DI07
/// </summary>
DI_7,
/// <summary>
/// 输入点,DI08
/// </summary>
DI_8,
/// <summary>
/// 输入点,DI09
/// </summary>
DI_9,
/// <summary>
/// 输入点,DI10
/// </summary>
DI_10,
/// <summary>
/// 输入点,DI11
/// </summary>
DI_11,
/// <summary>
/// 输入点,DI12
/// </summary>
DI_12,
/// <summary>
/// 输入点,DI13
/// </summary>
DI_13,
/// <summary>
/// 输入点,DI14
/// </summary>
DI_14,
/// <summary>
/// 输入点,DI15
/// </summary>
DI_15,
/// <summary>
/// 输入点,DI16
/// </summary>
DI_16,
/// <summary>
/// 输出点,DO01
/// </summary>
DO_1,
/// <summary>
/// 输出点,DO02
/// </summary>
DO_2,
/// <summary>
/// 输出点,DO03
/// </summary>
DO_3,
/// <summary>
/// 输出点,DO04
/// </summary>
DO_4,
/// <summary>
/// 输出点,DO05
/// </summary>
DO_5,
/// <summary>
/// 输出点,DO06
/// </summary>
DO_6,
/// <summary>
/// 输出点,DO07
/// </summary>
DO_7,
/// <summary>
/// 输出点,DO08
/// </summary>
DO_8,
/// <summary>
/// 输出点,DO09
/// </summary>
DO_9,
/// <summary>
/// 输出点,DO10
/// </summary>
DO_10,
/// <summary>
/// 输出点,DO11
/// </summary>
DO_11,
/// <summary>
/// 输出点,DO12
/// </summary>
DO_12,
/// <summary>
/// 输出点,DO13
/// </summary>
DO_13,
/// <summary>
/// 输出点,DO14
/// </summary>
DO_14,
/// <summary>
/// 输出点,DO15
/// </summary>
DO_15,
/// <summary>
/// 输出点,DO16
/// </summary>
DO_16,
/// <summary>
/// 无
/// </summary>
NONE = 255
}
/// <summary>
/// IO模块类型
/// </summary>
public enum Box_Type : int
{
/// <summary>
/// 16位,8DI + 8DO
/// </summary>
DIO_16,
/// <summary>
/// 32位,16DI + 16DO
/// </summary>
DIO_32,
/// <summary>
/// 16位DO
/// </summary>
DO_16
}
/// <summary>
/// IO模块寄存器状态
/// </summary>
public enum Box_Sta : int
{
/// <summary>
/// 断开,关闭,低电平
/// </summary>
Off = 0,
/// <summary>
/// 闭合,打开,高电平
/// </summary>
On = 255
}
}
\ No newline at end of file
......@@ -49,15 +49,15 @@ AXIS,(轴三)进出轴,InOut_Axis,3,COM1,0,,,,,
AXIS,(轴五)批量上下料轴,Batch_Axis,4,COM1,0,,,,,
,,,,,,,,,,
,,,,,,,,,,
PRO,升降轴 仓门位置P7(人工拿走盘的位置),UpDownAxis_Door_P7,347550,,,,,,,
PRO,升降轴 仓门位置P7(人工拿走盘的位置),UpDownAxis_Door_P7,345000,,,,,,,
PRO,升降轴 出库高点P2,UpDownAxis_OutHigh_P2,247000,,,,,,,
PRO,升降轴 出库低点P8,UpDownAxis_OutLow_P8,230000,,,,,,,
PRO,升降轴从吸盘下方接料后下降的高度,UpDownAxis_DownValue,10000,,,,,,,
PRO,升降轴 入库P1点集合,UpDownAxis_P1_List,8#398000;12#398000;16#393000;20#393000;24#390500;28#390500;32#390500;36#390500;40#390500;52#390500;,,,,,,,
PRO,旋转轴(轴一)P1 待机原位点,MiddleAxis_P1_Position,217400,,,,,,,
PRO,旋转轴(轴一)P1 待机原位点,MiddleAxis_P1_Position,218900,,,,,,,
PRO,进出轴(轴三)P1待机原位点,InOutAxis_P1_Position,1000,,,,,,,
PRO,压紧轴(轴4)P1待机原位点,CompressAxis_P1_Position,-25000,,,,,,,
PRO,压紧轴(轴4)P2压紧点集合,CompressAxis_P2_List,8#-110000;12#-110000;16#-90000;20#-90000;24#-110000;28#-70000;32#-70000;36#-70000;40#-70000;44#-70000;48#-70000;52#-70000;,,,,,,,
PRO,压紧轴(轴4)P2压紧点集合,CompressAxis_P2_List,8#-135000;12#-135000;16#-125000;20#-120000;24#-115000;28#-90000;32#-80000;36#-70000;40#-70000;44#-70000;48#-70000;52#-70000;,,,,,,,
PRO,是否使用定位气缸,IsHasLocationCylinder,0,,,,,,,
PRO,是否有左右侧门,IsHasDoorLimit,1,,,,,,,
PRO,是否使用压紧轴(1=使用),IsHasCompress_Axis,1,,,,,,,
......@@ -74,8 +74,8 @@ PRO,(轴一)旋转轴原点低速度,MiddleAxis_HomeLowSpeed,1000,,,,,,,
PRO,(轴一)旋转轴原点高速,MiddleAxis_HomeHighSpeed,1000,,,,,,,
PRO,(轴一)旋转轴原点加速度,MiddleAxis_HomeAddSpeed,1000,,,,,,,
PRO,(轴二)升降轴轴目标速度,UpdownAxis_TargetSpeed,200,,,,,,,
PRO,(轴二)升降轴轴加速度,UpdownAxis_AddSpeed,200,,,,,,,
PRO,(轴二)升降轴轴减速度,UpdownAxis_DelSpeed,200,,,,,,,
PRO,(轴二)升降轴轴加速度,UpdownAxis_AddSpeed,150,,,,,,,
PRO,(轴二)升降轴轴减速度,UpdownAxis_DelSpeed,150,,,,,,,
PRO,(轴二)升降轴轴原点低速度,UpdownAxis_HomeLowSpeed,200,,,,,,,
PRO,(轴二)升降轴轴原点高速,UpdownAxis_HomeHighSpeed,200,,,,,,,
PRO,(轴二)升降轴轴原点加速度,UpdownAxis_HomeAddSpeed,200,,,,,,,
......@@ -85,20 +85,20 @@ PRO,(轴三)进出轴减速度,InoutAxis_DelSpeed,200,,,,,,,
PRO,(轴三)进出轴原点低速,InoutAxis_HomeLowSpeed,200,,,,,,,
PRO,(轴三)进出轴原点高速,InoutAxis_HomeHighSpeed,200,,,,,,,
PRO,(轴三)进出轴原点加速度,InoutAxis_HomeAddSpeed,200,,,,,,,
PRO,升降轴(轴二)到仓门速度,UpDownAxis_Door_Speed,250,,,,,,,
PRO,升降轴(轴二)P1速度,UpDownAxis_P1_Speed,1000,,,,,,,
PRO,升降轴(轴二)P2速度,UpDownAxis_P2_Speed,1000,,,,,,,
PRO,升降轴(轴二)P3速度,UpDownAxis_P3_Speed,1000,,,,,,,
PRO,升降轴(轴二)P4速度,UpDownAxis_P4_Speed,500,,,,,,,
PRO,升降轴(轴二)P5速度,UpDownAxis_P5_Speed,1000,,,,,,,
PRO,升降轴(轴二)P6速度,UpDownAxis_P6_Speed,500,,,,,,,
PRO,升降轴(轴二)到仓门P7速度,UpDownAxis_P7_Speed,1000,,,,,,,
PRO,升降轴(轴二)P8速度,UpDownAxis_P8_Speed,500,,,,,,,
PRO,旋转轴(轴一)P1速度,MiddleAxis_P1_Speed,500,,,,,,,
PRO,旋转轴(轴一)P2速度,MiddleAxis_P2_Speed,500,,,,,,,
PRO,进出轴(轴三)P1速度,InOutAxis_P1_Speed,500,,,,,,,
PRO,进出轴(轴三)P2速度,InOutAxis_P2_Speed,500,,,,,,,
PRO,进出轴(轴三)P3速度,InOutAxis_P3_Speed,500,,,,,,,
PRO,升降轴(轴二)到仓门速度,UpDownAxis_Door_Speed,300,,,,,,,
PRO,升降轴(轴二)P1速度,UpDownAxis_P1_Speed,2200,,,,,,,
PRO,升降轴(轴二)P2速度,UpDownAxis_P2_Speed,2200,,,,,,,
PRO,升降轴(轴二)P3速度,UpDownAxis_P3_Speed,2200,,,,,,,
PRO,升降轴(轴二)P4速度,UpDownAxis_P4_Speed,400,,,,,,,
PRO,升降轴(轴二)P5速度,UpDownAxis_P5_Speed,2200,,,,,,,
PRO,升降轴(轴二)P6速度,UpDownAxis_P6_Speed,400,,,,,,,
PRO,升降轴(轴二)到仓门P7速度,UpDownAxis_P7_Speed,2000,,,,,,,
PRO,升降轴(轴二)P8速度,UpDownAxis_P8_Speed,400,,,,,,,
PRO,旋转轴(轴一)P1速度,MiddleAxis_P1_Speed,800,,,,,,,
PRO,旋转轴(轴一)P2速度,MiddleAxis_P2_Speed,800,,,,,,,
PRO,进出轴(轴三)P1速度,InOutAxis_P1_Speed,800,,,,,,,
PRO,进出轴(轴三)P2速度,InOutAxis_P2_Speed,800,,,,,,,
PRO,进出轴(轴三)P3速度,InOutAxis_P3_Speed,800,,,,,,,
PRO,(轴一)旋转轴最小误差脉冲值,MiddleAxis_ErrorCountMin,10,,,,,, ,
PRO,(轴二)升降轴轴最小误差脉冲值,UpdownAxis_ErrorCountMin,10,,,,,,,
PRO,(轴三)进出轴最小误差脉冲值,InoutAxis_ErrorCountMin,10,,,,,,,
......@@ -125,12 +125,12 @@ PRO,硕科步进电机(压紧轴)控制端口号,CompressAxis_PortName,COM6,,,,,,,
PRO,硕科步进电机(压紧轴)控制波特率,CompressAxis_PortBaudrate,9600,,,,,,,
PRO,硕科步进电机(压紧轴)控制奇偶校验,CompressAxis_PortParity,0,,,,,,,
PRO,硕科步进电机(压紧轴)控制停止位,CompressAxis_StopBits,1,,,,,,,
PRO,硕科步进电机(压紧轴)控制初速度,CompressAxis_StartSpeed,30000,,,,,,,
PRO,硕科步进电机(压紧轴)控制最大速度,CompressAxis_MaxSpeed,40000,,,,,,,
PRO,硕科步进电机(压紧轴)控制末速度,CompressAxis_EndSpeed,40000,,,,,,,
PRO,硕科步进电机(压紧轴)控制加速度,CompressAxis_AddSpeed,4000,,,,,,,
PRO,硕科步进电机(压紧轴)控制减速度,CompressAxis_DelSpeed,4000,,,,,,,
PRO,硕科步进电机(压紧轴)原点返回速度,CompressAxis_HomeSpeed,4000,,,,,,,
PRO,硕科步进电机(压紧轴)控制初速度,CompressAxis_StartSpeed,60000,,,,,,,
PRO,硕科步进电机(压紧轴)控制最大速度,CompressAxis_MaxSpeed,100000,,,,,,,
PRO,硕科步进电机(压紧轴)控制末速度,CompressAxis_EndSpeed,100000,,,,,,,
PRO,硕科步进电机(压紧轴)控制加速度,CompressAxis_AddSpeed,40000,,,,,,,
PRO,硕科步进电机(压紧轴)控制减速度,CompressAxis_DelSpeed,40000,,,,,,,
PRO,硕科步进电机(压紧轴)原点返回速度,CompressAxis_HomeSpeed,10000,,,,,,,
PRO,硕科步进电机轴地址(压紧轴),CompressAxis_Slv,1,,,,,, ,
,,,,,,,,,,
PRO,(轴五)上料轴目标速度,BatchAxis_TargetSpeed,800,,,,,,,
......@@ -142,16 +142,16 @@ PRO,(轴五)上料轴原点高速,BatchAxis_HomeHighSpeed,60,,,,,,,
PRO,(轴五)上料轴原点加速度,BatchAxis_HomeAddSpeed,200,,,,,,,
PRO,(轴五)上料轴P1点(出库时接料盘的位置),BatchAxis_P1,1750000,,,,,, ,
PRO,(轴五)上料轴P2点(待机点),BatchAxis_P2,30000,,,,,, ,
PRO,(轴五)上料轴P2速度,BatchAxis_P2_Speed,2500,,,,,,,
PRO,(轴五)上料轴P2速度,BatchAxis_P2_Speed,2800,,,,,,,
PRO,(轴五)上料轴最小误差脉冲值,BatchAxis_ErrorCountMin,10,,,,,,,
PRO,(轴五)上料轴最大误差脉冲值,BatchAxis_ErrorCountMax,1000,,,,,,,
PRO,(轴五)上料轴最小限位,BatchAxis_PositionMin,0,,,,,,,
PRO,(轴五)上料轴最大限位,BatchAxis_PositionMax,0,,,,,,,
PRO,(轴五)上料轴P1速度,BatchAxis_P1_Speed,2000,,,,,,,
PRO,(轴五)上料轴出料时距离检测信号需要下降的高度,BatchAxis_OutDownPosition,80000,,,,,,,
PRO,(轴五)上料轴最最大料盘高度,到达后无法批量出库,BatchAxis_MaxHeight,360,,,,,,,
PRO,最后一盘料需要补充的高度,LastTrayAddHeight,12,,,,,,,
PRO,(轴五)上料轴P1速度,BatchAxis_P1_Speed,2800,,,,,,,
PRO,(轴五)上料轴出料时距离检测信号需要下降的高度,BatchAxis_OutDownPosition,100000,,,,,,,
PRO,(轴五)上料轴最最大料盘高度,到达后无法批量出库,BatchAxis_MaxHeight,250,,,,,,,
PRO,最后一盘料需要补充的高度,LastTrayAddHeight,4,,,,,,,
,,,,,,,,,,
,,,,,,,,,,
PRO,IO模块对应的DI数量,IO_DILength,192.168.200.11#16;192.168.200.12#4,,,,,, ,
PRO,模块对应的DO数量,IO_DOLength,192.168.200.11#16;192.168.200.12#4,,,,,,,
PRO,IO模块对应的DI数量,IO_DILength,192.168.200.21#16;192.168.200.22#4,,,,,, ,
PRO,模块对应的DO数量,IO_DOLength,192.168.200.21#16;192.168.200.22#4,,,,,,,
位置,优先级,高度,宽度,料仓ID,中轴位置P2,升降轴库位出料前点P5,升降轴库位出料缓冲点P6,升降轴库位入料前点P3,升降轴库位入料缓冲点P4,进出轴库位点取料点P3,压紧轴压紧点P2,压紧轴压紧前点P3,进出轴仓门出料点P4,进出轴吸盘取料点P2
1#AC2_2_1_1,208,24,13,1,73490,0,6500,6500,0,86000,-110000,-25000,88750,88750
1#AC2_2_1_2,207,24,13,1,73490,30250,36750,36750,30250,86000,-110000,-25000,88750,88750
1#AC2_2_1_3,206,24,13,1,73490,60500,67000,67000,60500,86000,-110000,-25000,88750,88750
1#AC2_2_1_4,205,24,13,1,73490,90750,97250,97250,90750,86000,-110000,-25000,88750,88750
1#AC2_2_1_5,204,24,13,1,73490,121000,127500,127500,121000,86000,-110000,-25000,88750,88750
1#AC2_2_1_6,203,24,13,1,73490,151250,157750,157750,151250,86000,-110000,-25000,88750,88750
1#AC2_2_1_7,202,24,13,1,73490,181500,188000,188000,181500,86000,-110000,-25000,88750,88750
1#AC2_2_1_8,201,24,13,1,73490,211750,218250,218250,211750,86000,-110000,-25000,88750,88750
1#AC2_2_1_9,200,24,13,1,73490,242000,248500,248500,242000,86000,-110000,-25000,88750,88750
1#AC2_2_1_10,199,24,13,1,73490,272250,278750,278750,272250,86000,-110000,-25000,88750,88750
1#AC2_2_1_11,198,24,13,1,73490,302500,309000,309000,302500,86000,-110000,-25000,88750,88750
1#AC2_2_1_12,197,24,13,1,73490,331250,339250,339250,331250,86000,-110000,-25000,88750,88750
1#AC2_2_1_13,196,24,13,1,73490,362000,369500,369500,362000,86000,-110000,-25000,88750,88750
1#AC2_2_2_1,195,24,13,1,73490,393250,399750,399750,393250,86000,-110000,-25000,88750,88750
1#AC2_2_2_2,194,24,13,1,73530,423350,429850,429850,423350,86000,-110000,-25000,88750,88750
1#AC2_2_2_3,193,24,13,1,73570,453450,459950,459950,453450,86000,-110000,-25000,88750,88750
1#AC2_2_2_4,192,24,13,1,73610,483550,490050,490050,483550,86000,-110000,-25000,88750,88750
1#AC2_2_2_5,191,24,13,1,73650,513650,520150,520150,513650,86000,-110000,-25000,88750,88750
1#AC2_2_2_6,190,24,13,1,73690,543750,550250,550250,543750,86000,-110000,-25000,88750,88750
1#AC2_2_2_7,189,24,13,1,73730,573850,580350,580350,573850,86000,-110000,-25000,88750,88750
1#AC2_2_2_8,188,24,13,1,73770,603950,610450,610450,603950,86000,-110000,-25000,88750,88750
1#AC2_2_2_9,187,24,13,1,73810,634050,640550,640550,634050,86000,-110000,-25000,88750,88750
1#AC2_2_2_10,186,24,13,1,73850,664150,670650,670650,664150,86000,-110000,-25000,88750,88750
1#AC2_2_2_11,185,24,13,1,73890,694250,700750,700750,694250,86000,-110000,-25000,88750,88750
1#AC2_2_2_12,184,24,13,1,73930,724350,730850,730850,724350,86000,-110000,-25000,88750,88750
1#AC2_2_2_13,183,24,13,1,73970,754450,760950,760950,754450,86000,-110000,-25000,88750,88750
1#AC2_2_3_1,182,24,13,1,74000,784500,791500,791500,784500,86000,-110000,-25000,88750,88750
1#AC2_2_3_2,181,24,13,1,74020,814750,821750,821750,814750,86000,-110000,-25000,88750,88750
1#AC2_2_3_3,180,24,13,1,74040,845000,852000,852000,845000,86000,-110000,-25000,88750,88750
1#AC2_2_3_4,179,24,13,1,74060,875250,882250,882250,875250,86000,-110000,-25000,88750,88750
1#AC2_2_3_5,178,24,13,1,74080,905500,912500,912500,905500,86000,-110000,-25000,88750,88750
1#AC2_2_3_6,177,24,13,1,74100,935750,942750,942750,935750,86000,-110000,-25000,88750,88750
1#AC2_2_3_7,176,24,13,1,74120,966000,973000,973000,966000,86000,-110000,-25000,88750,88750
1#AC2_2_3_8,175,24,13,1,74140,996250,1003250,1003250,996250,86000,-110000,-25000,88750,88750
1#AC2_2_3_9,174,24,13,1,74160,1026500,1033500,1033500,1026500,86000,-110000,-25000,88750,88750
1#AC2_2_3_10,173,24,13,1,74180,1056750,1063750,1063750,1056750,86000,-110000,-25000,88750,88750
1#AC2_2_3_11,172,24,13,1,74200,1087000,1094000,1094000,1087000,86000,-110000,-25000,88750,88750
1#AC2_2_3_12,171,24,13,1,74220,1117250,1124250,1124250,1117250,86000,-110000,-25000,88750,88750
1#AC2_2_3_13,170,24,13,1,74240,1147500,1154500,1154500,1147500,86000,-110000,-25000,88750,88750
1#AC2_3_1_1,169,24,13,1,1200,0,6500,6500,0,86000,-110000,-25000,88750,88750
1#AC2_3_1_2,168,24,13,1,1200,30250,36750,36750,30250,86000,-110000,-25000,88750,88750
1#AC2_3_1_3,167,24,13,1,1200,60500,67000,67000,60500,86000,-110000,-25000,88750,88750
1#AC2_3_1_4,166,24,13,1,1200,90750,97250,97250,90750,86000,-110000,-25000,88750,88750
1#AC2_3_1_5,165,24,13,1,1200,121000,127500,127500,121000,86000,-110000,-25000,88750,88750
1#AC2_3_1_6,164,24,13,1,1200,151250,157750,157750,151250,86000,-110000,-25000,88750,88750
1#AC2_3_1_7,163,24,13,1,1200,181500,188000,188000,181500,86000,-110000,-25000,88750,88750
1#AC2_3_1_8,162,24,13,1,1200,211750,218250,218250,211750,86000,-110000,-25000,88750,88750
1#AC2_3_1_9,161,24,13,1,1200,242000,248500,248500,242000,86000,-110000,-25000,88750,88750
1#AC2_3_1_10,160,24,13,1,1200,272250,278750,278750,272250,86000,-110000,-25000,88750,88750
1#AC2_3_1_11,159,24,13,1,1200,302500,309000,309000,302500,86000,-110000,-25000,88750,88750
1#AC2_3_1_12,158,24,13,1,1200,332750,339250,339250,332750,86000,-110000,-25000,88750,88750
1#AC2_3_1_13,157,24,13,1,1200,363000,369500,369500,363000,86000,-110000,-25000,88750,88750
1#AC2_3_2_1,156,24,13,1,1200,393250,399750,399750,393250,86000,-110000,-25000,88750,88750
1#AC2_3_2_2,155,24,13,1,1250,423350,429850,429850,423350,86000,-110000,-25000,88750,88750
1#AC2_3_2_3,154,24,13,1,1300,453450,459950,459950,453450,86000,-110000,-25000,88750,88750
1#AC2_3_2_4,153,24,13,1,1350,483550,490050,490050,483550,86000,-110000,-25000,88750,88750
1#AC2_3_2_5,152,24,13,1,1400,513650,520150,520150,513650,86000,-110000,-25000,88750,88750
1#AC2_3_2_6,151,24,13,1,1450,543750,550250,550250,543750,86000,-110000,-25000,88750,88750
1#AC2_3_2_7,150,24,13,1,1500,573850,580350,580350,573850,86000,-110000,-25000,88750,88750
1#AC2_3_2_8,149,24,13,1,1550,603950,610450,610450,603950,86000,-110000,-25000,88750,88750
1#AC2_3_2_9,148,24,13,1,1600,634050,640550,640550,634050,86000,-110000,-25000,88750,88750
1#AC2_3_2_10,147,24,13,1,1650,664150,670650,670650,664150,86000,-110000,-25000,88750,88750
1#AC2_3_2_11,146,24,13,1,1700,694250,700750,700750,694250,86000,-110000,-25000,88750,88750
1#AC2_3_2_12,145,24,13,1,1750,724350,730850,730850,724350,86000,-110000,-25000,88750,88750
1#AC2_3_2_13,144,24,13,1,1800,754450,760950,760950,754450,86000,-110000,-25000,88750,88750
1#AC2_3_3_1,143,24,13,1,2000,784500,791500,791500,784500,86000,-110000,-25000,88750,88750
1#AC2_3_3_2,142,24,13,1,2050,814750,821750,821750,814750,86000,-110000,-25000,88750,88750
1#AC2_3_3_3,141,24,13,1,2100,845000,852000,852000,845000,86000,-110000,-25000,88750,88750
1#AC2_3_3_4,140,24,13,1,2150,875250,882250,882250,875250,86000,-110000,-25000,88750,88750
1#AC2_3_3_5,139,24,13,1,2200,905500,912500,912500,905500,86000,-110000,-25000,88750,88750
1#AC2_3_3_6,138,24,13,1,2250,935750,942750,942750,935750,86000,-110000,-25000,88750,88750
1#AC2_3_3_7,137,24,13,1,2300,966000,973000,973000,966000,86000,-110000,-25000,88750,88750
1#AC2_3_3_8,136,24,13,1,2350,996250,1003250,1003250,996250,86000,-110000,-25000,88750,88750
1#AC2_3_3_9,135,24,13,1,2400,1026500,1033500,1033500,1026500,86000,-110000,-25000,88750,88750
1#AC2_3_3_10,134,24,13,1,2450,1056750,1063750,1063750,1056750,86000,-110000,-25000,88750,88750
1#AC2_3_3_11,133,24,13,1,2500,1087000,1094000,1094000,1087000,86000,-110000,-25000,88750,88750
1#AC2_3_3_12,132,24,13,1,2550,1117250,1124250,1124250,1117250,86000,-110000,-25000,88750,88750
1#AC2_3_3_13,131,24,13,1,2600,1147500,1154500,1154500,1147500,86000,-110000,-25000,88750,88750
1#AC2_4_1_1,130,24,13,1,505500,0,6500,6500,0,86000,-110000,-25000,88750,88750
1#AC2_4_1_2,129,24,13,1,505500,30250,36750,36750,30250,86000,-110000,-25000,88750,88750
1#AC2_4_1_3,128,24,13,1,505500,60500,67000,67000,60500,86000,-110000,-25000,88750,88750
1#AC2_4_1_4,127,24,13,1,505500,90750,97250,97250,90750,86000,-110000,-25000,88750,88750
1#AC2_4_1_5,126,24,13,1,505500,121000,127500,127500,121000,86000,-110000,-25000,88750,88750
1#AC2_4_1_6,125,24,13,1,505500,151250,157750,157750,151250,86000,-110000,-25000,88750,88750
1#AC2_4_1_7,124,24,13,1,505500,181500,188000,188000,181500,86000,-110000,-25000,88750,88750
1#AC2_4_1_8,123,24,13,1,505500,211750,218250,218250,211750,86000,-110000,-25000,88750,88750
1#AC2_4_1_9,122,24,13,1,505500,242000,248500,248500,242000,86000,-110000,-25000,88750,88750
1#AC2_4_1_10,121,24,13,1,505500,272250,278750,278750,272250,86000,-110000,-25000,88750,88750
1#AC2_4_1_11,120,24,13,1,505500,302500,309000,309000,302500,86000,-110000,-25000,88750,88750
1#AC2_4_1_12,119,24,13,1,505500,332750,339250,339250,332750,86000,-110000,-25000,88750,88750
1#AC2_4_1_13,118,24,13,1,505500,363000,369500,369500,363000,86000,-110000,-25000,88750,88750
1#AC2_4_2_1,117,24,13,1,505500,393250,399750,399750,393250,86000,-110000,-25000,88750,88750
1#AC2_4_2_2,116,24,13,1,505550,423350,429850,429850,423350,86000,-110000,-25000,88750,88750
1#AC2_4_2_3,115,24,13,1,505600,453450,459950,459950,453450,86000,-110000,-25000,88750,88750
1#AC2_4_2_4,114,24,13,1,505650,483550,490050,490050,483550,86000,-110000,-25000,88750,88750
1#AC2_4_2_5,113,24,13,1,505700,513650,520150,520150,513650,86000,-110000,-25000,88750,88750
1#AC2_4_2_6,112,24,13,1,505750,543750,550250,550250,543750,86000,-110000,-25000,88750,88750
1#AC2_4_2_7,111,24,13,1,505800,573850,580350,580350,573850,86000,-110000,-25000,88750,88750
1#AC2_4_2_8,110,24,13,1,505850,603950,610450,610450,603950,86000,-110000,-25000,88750,88750
1#AC2_4_2_9,109,24,13,1,505900,634050,640550,640550,634050,86000,-110000,-25000,88750,88750
1#AC2_4_2_10,108,24,13,1,505950,664150,670650,670650,664150,86000,-110000,-25000,88750,88750
1#AC2_4_2_11,107,24,13,1,506000,694250,700750,700750,694250,86000,-110000,-25000,88750,88750
1#AC2_4_2_12,106,24,13,1,506050,724350,730850,730850,724350,86000,-110000,-25000,88750,88750
1#AC2_4_2_13,105,24,13,1,506100,754450,760950,760950,754450,86000,-110000,-25000,88750,88750
1#AC2_4_3_1,104,24,13,1,506300,784500,791500,791500,784500,86000,-110000,-25000,88750,88750
1#AC2_4_3_2,103,24,13,1,506350,814750,821750,821750,814750,86000,-110000,-25000,88750,88750
1#AC2_4_3_3,102,24,13,1,506400,845000,852000,852000,845000,86000,-110000,-25000,88750,88750
1#AC2_4_3_4,101,24,13,1,506450,875250,882250,882250,875250,86000,-110000,-25000,88750,88750
1#AC2_4_3_5,100,24,13,1,506500,905500,912500,912500,905500,86000,-110000,-25000,88750,88750
1#AC2_4_3_6,99,24,13,1,506550,935750,942750,942750,935750,86000,-110000,-25000,88750,88750
1#AC2_4_3_7,98,24,13,1,506600,966000,973000,973000,966000,86000,-110000,-25000,88750,88750
1#AC2_4_3_8,97,24,13,1,506650,996250,1003250,1003250,996250,86000,-110000,-25000,88750,88750
1#AC2_4_3_9,96,24,13,1,506700,1026500,1033500,1033500,1026500,86000,-110000,-25000,88750,88750
1#AC2_4_3_10,95,24,13,1,506750,1056750,1063750,1063750,1056750,86000,-110000,-25000,88750,88750
1#AC2_4_3_11,94,24,13,1,506800,1087000,1094000,1094000,1087000,86000,-110000,-25000,88750,88750
1#AC2_4_3_12,93,24,13,1,506850,1117250,1124250,1124250,1117250,86000,-110000,-25000,88750,88750
1#AC2_4_3_13,92,24,13,1,506900,1147500,1154500,1154500,1147500,86000,-110000,-25000,88750,88750
1#AC2_5_1_1,91,24,13,1,433700,0,6500,6500,0,86000,-110000,-25000,88750,88750
1#AC2_5_1_2,90,24,13,1,433700,30250,36750,36750,30250,86000,-110000,-25000,88750,88750
1#AC2_5_1_3,89,24,13,1,433700,60500,67000,67000,60500,86000,-110000,-25000,88750,88750
1#AC2_5_1_4,88,24,13,1,433700,90750,97250,97250,90750,86000,-110000,-25000,88750,88750
1#AC2_5_1_5,87,24,13,1,433700,121000,127500,127500,121000,86000,-110000,-25000,88750,88750
1#AC2_5_1_6,86,24,13,1,433700,151250,157750,157750,151250,86000,-110000,-25000,88750,88750
1#AC2_5_1_7,85,24,13,1,433700,181500,188000,188000,181500,86000,-110000,-25000,88750,88750
1#AC2_5_1_8,84,24,13,1,433700,211750,218250,218250,211750,86000,-110000,-25000,88750,88750
1#AC2_5_1_9,83,24,13,1,433700,242000,248500,248500,242000,86000,-110000,-25000,88750,88750
1#AC2_5_1_10,82,24,13,1,433700,272250,278750,278750,272250,86000,-110000,-25000,88750,88750
1#AC2_5_1_11,81,24,13,1,433700,302500,309000,309000,302500,86000,-110000,-25000,88750,88750
1#AC2_5_1_12,80,24,13,1,433700,332750,339250,339250,332750,86000,-110000,-25000,88750,88750
1#AC2_5_1_13,79,24,13,1,433700,363000,369500,369500,363000,86000,-110000,-25000,88750,88750
1#AC2_5_2_1,78,24,13,1,433700,393250,399750,399750,393250,86000,-110000,-25000,88750,88750
1#AC2_5_2_2,77,24,13,1,433700,423350,429850,429850,423350,86000,-110000,-25000,88750,88750
1#AC2_5_2_3,76,24,13,1,433700,453450,459950,459950,453450,86000,-110000,-25000,88750,88750
1#AC2_5_2_4,75,24,13,1,433700,483550,490050,490050,483550,86000,-110000,-25000,88750,88750
1#AC2_5_2_5,74,24,13,1,433700,513650,520150,520150,513650,86000,-110000,-25000,88750,88750
1#AC2_5_2_6,73,24,13,1,433700,543750,550250,550250,543750,86000,-110000,-25000,88750,88750
1#AC2_5_2_7,72,24,13,1,433700,573850,580350,580350,573850,86000,-110000,-25000,88750,88750
1#AC2_5_2_8,71,24,13,1,433700,603950,610450,610450,603950,86000,-110000,-25000,88750,88750
1#AC2_5_2_9,70,24,13,1,433700,634050,640550,640550,634050,86000,-110000,-25000,88750,88750
1#AC2_5_2_10,69,24,13,1,433700,664150,670650,670650,664150,86000,-110000,-25000,88750,88750
1#AC2_5_2_11,68,24,13,1,433700,694250,700750,700750,694250,86000,-110000,-25000,88750,88750
1#AC2_5_2_12,67,24,13,1,433700,724350,730850,730850,724350,86000,-110000,-25000,88750,88750
1#AC2_5_2_13,66,24,13,1,433700,754450,760950,760950,754450,86000,-110000,-25000,88750,88750
1#AC2_5_3_1,65,24,13,1,433900,784500,791500,791500,784500,86000,-110000,-25000,88750,88750
1#AC2_5_3_2,64,24,13,1,433950,814750,821750,821750,814750,86000,-110000,-25000,88750,88750
1#AC2_5_3_3,63,24,13,1,434000,845000,852000,852000,845000,86000,-110000,-25000,88750,88750
1#AC2_5_3_4,62,24,13,1,434050,875250,882250,882250,875250,86000,-110000,-25000,88750,88750
1#AC2_5_3_5,61,24,13,1,434100,905500,912500,912500,905500,86000,-110000,-25000,88750,88750
1#AC2_5_3_6,60,24,13,1,434150,935750,942750,942750,935750,86000,-110000,-25000,88750,88750
1#AC2_5_3_7,59,24,13,1,434200,966000,973000,973000,966000,86000,-110000,-25000,88750,88750
1#AC2_5_3_8,58,24,13,1,434250,996250,1003250,1003250,996250,86000,-110000,-25000,88750,88750
1#AC2_5_3_9,57,24,13,1,434300,1026500,1033500,1033500,1026500,86000,-110000,-25000,88750,88750
1#AC2_5_3_10,56,24,13,1,434350,1056750,1063750,1063750,1056750,86000,-110000,-25000,88750,88750
1#AC2_5_3_11,55,24,13,1,434400,1087000,1094000,1094000,1087000,86000,-110000,-25000,88750,88750
1#AC2_5_3_12,54,24,13,1,434450,1117250,1124250,1124250,1117250,86000,-110000,-25000,88750,88750
1#AC2_5_3_13,53,24,13,1,434500,1147500,1154500,1154500,1147500,86000,-110000,-25000,88750,88750
1#AC2_6_1_1,52,24,13,1,362000,0,6500,6500,0,86000,-110000,-25000,88750,88750
1#AC2_6_1_2,51,24,13,1,361970,30250,36750,36750,30250,86000,-110000,-25000,88750,88750
1#AC2_6_1_3,50,24,13,1,361940,60500,67000,67000,60500,86000,-110000,-25000,88750,88750
1#AC2_6_1_4,49,24,13,1,361910,90750,97250,97250,90750,86000,-110000,-25000,88750,88750
1#AC2_6_1_5,48,24,13,1,361880,121000,127500,127500,121000,86000,-110000,-25000,88750,88750
1#AC2_6_1_6,47,24,13,1,361850,151250,157750,157750,151250,86000,-110000,-25000,88750,88750
1#AC2_6_1_7,46,24,13,1,361820,181500,188000,188000,181500,86000,-110000,-25000,88750,88750
1#AC2_6_1_8,45,24,13,1,361790,211750,218250,218250,211750,86000,-110000,-25000,88750,88750
1#AC2_6_1_9,44,24,13,1,361760,242000,248500,248500,242000,86000,-110000,-25000,88750,88750
1#AC2_6_1_10,43,24,13,1,361730,272250,278750,278750,272250,86000,-110000,-25000,88750,88750
1#AC2_6_1_11,42,24,13,1,361700,302500,309000,309000,302500,86000,-110000,-25000,88750,88750
1#AC2_6_1_12,41,24,13,1,361670,332750,339250,339250,332750,86000,-110000,-25000,88750,88750
1#AC2_6_1_13,40,24,13,1,361640,363000,369500,369500,363000,86000,-110000,-25000,88750,88750
1#AC2_6_2_1,39,24,13,1,362000,393250,399750,399750,393250,86000,-110000,-25000,88750,88750
1#AC2_6_2_2,38,24,13,1,362000,423350,429850,429850,423350,86000,-110000,-25000,88750,88750
1#AC2_6_2_3,37,24,13,1,362000,453450,459950,459950,453450,86000,-110000,-25000,88750,88750
1#AC2_6_2_4,36,24,13,1,362000,483550,490050,490050,483550,86000,-110000,-25000,88750,88750
1#AC2_6_2_5,35,24,13,1,362000,513650,520150,520150,513650,86000,-110000,-25000,88750,88750
1#AC2_6_2_6,34,24,13,1,362000,543750,550250,550250,543750,86000,-110000,-25000,88750,88750
1#AC2_6_2_7,33,24,13,1,362000,573850,580350,580350,573850,86000,-110000,-25000,88750,88750
1#AC2_6_2_8,32,24,13,1,362000,603950,610450,610450,603950,86000,-110000,-25000,88750,88750
1#AC2_6_2_9,31,24,13,1,362000,634050,640550,640550,634050,86000,-110000,-25000,88750,88750
1#AC2_6_2_10,30,24,13,1,362000,664150,670650,670650,664150,86000,-110000,-25000,88750,88750
1#AC2_6_2_11,29,24,13,1,362000,694250,700750,700750,694250,86000,-110000,-25000,88750,88750
1#AC2_6_2_12,28,24,13,1,362000,724350,730850,730850,724350,86000,-110000,-25000,88750,88750
1#AC2_6_2_13,27,24,13,1,362000,754450,760950,760950,754450,86000,-110000,-25000,88750,88750
1#AC2_6_3_1,26,24,13,1,362000,784500,791500,791500,784500,86000,-110000,-25000,88750,88750
1#AC2_6_3_2,25,24,13,1,362050,814750,821750,821750,814750,86000,-110000,-25000,88750,88750
1#AC2_6_3_3,24,24,13,1,362100,845000,852000,852000,845000,86000,-110000,-25000,88750,88750
1#AC2_6_3_4,23,24,13,1,362150,875250,882250,882250,875250,86000,-110000,-25000,88750,88750
1#AC2_6_3_5,22,24,13,1,362200,905500,912500,912500,905500,86000,-110000,-25000,88750,88750
1#AC2_6_3_6,21,24,13,1,362250,935750,942750,942750,935750,86000,-110000,-25000,88750,88750
1#AC2_6_3_7,20,24,13,1,362300,966000,973000,973000,966000,86000,-110000,-25000,88750,88750
1#AC2_6_3_8,19,24,13,1,362350,996250,1003250,1003250,996250,86000,-110000,-25000,88750,88750
1#AC2_6_3_9,18,24,13,1,362400,1026500,1033500,1033500,1026500,86000,-110000,-25000,88750,88750
1#AC2_6_3_10,17,24,13,1,362450,1056750,1063750,1063750,1056750,86000,-110000,-25000,88750,88750
1#AC2_6_3_11,16,24,13,1,362500,1087000,1094000,1094000,1087000,86000,-110000,-25000,88750,88750
1#AC2_6_3_12,15,24,13,1,362550,1117250,1124250,1124250,1117250,86000,-110000,-25000,88750,88750
1#AC2_6_3_13,14,24,13,1,362600,1147500,1154500,1154500,1147500,86000,-110000,-25000,88750,88750
1#AC2_0_1_1,1,24,13,1,218800,781000,793000,793000,781000,86000,-125000,-30000,90000,88000
1#AC2_0_1_2,2,24,13,1,218800,810000,822000,822000,810000,86000,-125000,-30000,90000,88000
1#AC2_0_1_3,3,24,13,1,218800,840500,852500,852500,840500,86000,-125000,-30000,90000,88000
1#AC2_0_1_4,4,24,13,1,218800,871000,883000,883000,871000,86000,-125000,-30000,90000,88000
1#AC2_0_1_5,5,24,13,1,218800,900000,912000,912000,900000,86000,-125000,-30000,90000,88000
1#AC2_0_1_6,6,24,13,1,218800,931000,943000,943000,931000,86000,-125000,-30000,90000,88000
1#AC2_0_1_7,7,24,13,1,218800,960000,972000,972000,960000,86000,-125000,-30000,90000,88000
1#AC2_0_1_8,8,24,13,1,218800,990000,1002000,1002000,990000,86000,-125000,-30000,90000,88000
1#AC2_0_1_9,9,24,13,1,218800,1020000,1032000,1032000,1020000,86000,-125000,-30000,90000,88000
1#AC2_0_1_10,10,24,13,1,218800,1051000,1063000,1063000,1051000,86000,-125000,-30000,90000,88000
1#AC2_0_1_11,11,24,13,1,218800,1081000,1093000,1093000,1081000,86000,-125000,-30000,90000,88000
1#AC2_0_1_12,12,24,13,1,218800,1110000,1122000,1122000,1110000,86000,-125000,-30000,90000,88000
1#AC2_0_1_13,13,24,13,1,218800,1141000,1153000,1153000,1141000,86000,-125000,-30000,90000,88000
1#AC2_1_1_1,,24,13,1,146700,0,12000,12000,0,86000,-125000,-30000,90000,88000
1#AC2_1_1_2,,24,13,1,146700,30000,42000,42000,30000,86000,-125000,-30000,90000,88000
1#AC2_1_1_3,,24,13,1,146700,59000,71000,71000,59000,86000,-125000,-30000,90000,88000
1#AC2_1_1_4,,24,13,1,146700,89000,101000,101000,89000,86000,-125000,-30000,90000,88000
1#AC2_1_1_5,,24,13,1,146700,120000,132000,132000,120000,86000,-125000,-30000,90000,88000
1#AC2_1_1_6,,24,13,1,146700,150000,162000,162000,150000,86000,-125000,-30000,90000,88000
1#AC2_1_1_7,,24,13,1,146700,180000,192000,192000,180000,86000,-125000,-30000,90000,88000
1#AC2_1_1_8,,24,13,1,146700,210000,222000,222000,210000,86000,-125000,-30000,90000,88000
1#AC2_1_1_9,,24,13,1,146700,240000,252000,252000,240000,86000,-125000,-30000,90000,88000
1#AC2_1_1_10,,24,13,1,146700,270000,282000,282000,270000,86000,-125000,-30000,90000,88000
1#AC2_1_1_11,,24,13,1,146700,299000,311000,311000,299000,86000,-125000,-30000,90000,88000
1#AC2_1_1_12,,24,13,1,146700,329000,341000,341000,329000,86000,-125000,-30000,90000,88000
1#AC2_1_1_13,,24,13,1,146700,360000,372000,372000,360000,86000,-125000,-30000,90000,88000
1#AC2_1_2_1,,24,13,1,146700,392000,404000,404000,392000,86000,-125000,-30000,90000,88000
1#AC2_1_2_2,,24,13,1,146700,420000,432000,432000,420000,86000,-125000,-30000,90000,88000
1#AC2_1_2_3,,24,13,1,146700,451500,463500,463500,451500,86000,-125000,-30000,90000,88000
1#AC2_1_2_4,,24,13,1,146700,482000,494000,494000,482000,86000,-125000,-30000,90000,88000
1#AC2_1_2_5,,24,13,1,146700,511000,523000,523000,511000,86000,-125000,-30000,90000,88000
1#AC2_1_2_6,,24,13,1,146700,542000,554000,554000,542000,86000,-125000,-30000,90000,88000
1#AC2_1_2_7,,24,13,1,146700,571000,583000,583000,571000,86000,-125000,-30000,90000,88000
1#AC2_1_2_8,,24,13,1,146700,601000,613000,613000,601000,86000,-125000,-30000,90000,88000
1#AC2_1_2_9,,24,13,1,146700,631000,643000,643000,631000,86000,-125000,-30000,90000,88000
1#AC2_1_2_10,,24,13,1,146700,662000,674000,674000,662000,86000,-125000,-30000,90000,88000
1#AC2_1_2_11,,24,13,1,146700,692000,704000,704000,692000,86000,-125000,-30000,90000,88000
1#AC2_1_2_12,,24,13,1,146700,721000,733000,733000,721000,86000,-125000,-30000,90000,88000
1#AC2_1_2_13,,24,13,1,146700,752000,764000,764000,752000,86000,-125000,-30000,90000,88000
1#AC2_1_3_1,,24,13,1,146700,781000,793000,793000,781000,86000,-125000,-30000,90000,88000
1#AC2_1_3_2,,24,13,1,146700,810000,822000,822000,810000,86000,-125000,-30000,90000,88000
1#AC2_1_3_3,,24,13,1,146700,840500,852500,852500,840500,86000,-125000,-30000,90000,88000
1#AC2_1_3_4,,24,13,1,146700,871000,883000,883000,871000,86000,-125000,-30000,90000,88000
1#AC2_1_3_5,,24,13,1,146700,900000,912000,912000,900000,86000,-125000,-30000,90000,88000
1#AC2_1_3_6,,24,13,1,146700,931000,943000,943000,931000,86000,-125000,-30000,90000,88000
1#AC2_1_3_7,,24,13,1,146700,960000,972000,972000,960000,86000,-125000,-30000,90000,88000
1#AC2_1_3_8,,24,13,1,146700,990000,1002000,1002000,990000,86000,-125000,-30000,90000,88000
1#AC2_1_3_9,,24,13,1,146700,1020000,1032000,1032000,1020000,86000,-125000,-30000,90000,88000
1#AC2_1_3_10,,24,13,1,146700,1051000,1063000,1063000,1051000,86000,-125000,-30000,90000,88000
1#AC2_1_3_11,,24,13,1,146700,1081000,1093000,1093000,1081000,86000,-125000,-30000,90000,88000
1#AC2_1_3_12,,24,13,1,146700,1110000,1122000,1122000,1110000,86000,-125000,-30000,90000,88000
1#AC2_1_3_13,,24,13,1,146700,1141000,1153000,1153000,1141000,86000,-125000,-30000,90000,88000
1#AC2_2_1_1,14,24,13,1,75400,0,12000,12000,0,86000,-125000,-30000,90000,88000
1#AC2_2_1_2,15,24,13,1,75400,30000,42000,42000,30000,86000,-125000,-30000,90000,88000
1#AC2_2_1_3,16,24,13,1,75400,59000,71000,71000,59000,86000,-125000,-30000,90000,88000
1#AC2_2_1_4,17,24,13,1,75400,89000,101000,101000,89000,86000,-125000,-30000,90000,88000
1#AC2_2_1_5,18,24,13,1,75400,120000,132000,132000,120000,86000,-125000,-30000,90000,88000
1#AC2_2_1_6,19,24,13,1,75400,150000,162000,162000,150000,86000,-125000,-30000,90000,88000
1#AC2_2_1_7,20,24,13,1,75300,180000,192000,192000,180000,86000,-125000,-30000,90000,88000
1#AC2_2_1_8,21,24,13,1,75300,210000,222000,222000,210000,86000,-125000,-30000,90000,88000
1#AC2_2_1_9,22,24,13,1,75200,240000,252000,252000,240000,86000,-125000,-30000,90000,88000
1#AC2_2_1_10,23,24,13,1,75200,270000,282000,282000,270000,86000,-125000,-30000,90000,88000
1#AC2_2_1_11,24,24,13,1,75000,299000,311000,311000,299000,86000,-125000,-30000,90000,88000
1#AC2_2_1_12,25,24,13,1,75000,329000,341000,341000,329000,86000,-125000,-30000,90000,88000
1#AC2_2_1_13,26,24,13,1,75000,360000,372000,372000,360000,86000,-125000,-30000,90000,88000
1#AC2_2_2_1,27,24,13,1,74700,392000,404000,404000,392000,86000,-125000,-30000,90000,88000
1#AC2_2_2_2,28,24,13,1,74700,420000,432000,432000,420000,86000,-125000,-30000,90000,88000
1#AC2_2_2_3,29,24,13,1,74700,451500,463500,463500,451500,86000,-125000,-30000,90000,88000
1#AC2_2_2_4,30,24,13,1,74700,482000,494000,494000,482000,86000,-125000,-30000,90000,88000
1#AC2_2_2_5,31,24,13,1,74700,511000,523000,523000,511000,86000,-125000,-30000,90000,88000
1#AC2_2_2_6,32,24,13,1,74700,542000,554000,554000,542000,86000,-125000,-30000,90000,88000
1#AC2_2_2_7,33,24,13,1,74700,571000,583000,583000,571000,86000,-125000,-30000,90000,88000
1#AC2_2_2_8,34,24,13,1,74700,601000,613000,613000,601000,86000,-125000,-30000,90000,88000
1#AC2_2_2_9,35,24,13,1,74500,631000,643000,643000,631000,86000,-125000,-30000,90000,88000
1#AC2_2_2_10,36,24,13,1,74500,662000,674000,674000,662000,86000,-125000,-30000,90000,88000
1#AC2_2_2_11,37,24,13,1,74500,692000,704000,704000,692000,86000,-125000,-30000,90000,88000
1#AC2_2_2_12,38,24,13,1,74500,721000,733000,733000,721000,86000,-125000,-30000,90000,88000
1#AC2_2_2_13,39,24,13,1,74500,752000,764000,764000,752000,86000,-125000,-30000,90000,88000
1#AC2_2_3_1,40,24,13,1,74700,781000,793000,793000,781000,86000,-125000,-30000,90000,88000
1#AC2_2_3_2,41,24,13,1,74700,810000,822000,822000,810000,86000,-125000,-30000,90000,88000
1#AC2_2_3_3,42,24,13,1,74700,840500,852500,852500,840500,86000,-125000,-30000,90000,88000
1#AC2_2_3_4,43,24,13,1,74700,871000,883000,883000,871000,86000,-125000,-30000,90000,88000
1#AC2_2_3_5,44,24,13,1,74700,900000,912000,912000,900000,86000,-125000,-30000,90000,88000
1#AC2_2_3_6,45,24,13,1,74700,931000,943000,943000,931000,86000,-125000,-30000,90000,88000
1#AC2_2_3_7,46,24,13,1,74700,960000,972000,972000,960000,86000,-125000,-30000,90000,88000
1#AC2_2_3_8,47,24,13,1,74700,990000,1002000,1002000,990000,86000,-125000,-30000,90000,88000
1#AC2_2_3_9,48,24,13,1,74700,1020000,1032000,1032000,1020000,86000,-125000,-30000,90000,88000
1#AC2_2_3_10,49,24,13,1,74700,1051000,1063000,1063000,1051000,86000,-125000,-30000,90000,88000
1#AC2_2_3_11,50,24,13,1,74700,1081000,1093000,1093000,1081000,86000,-125000,-30000,90000,88000
1#AC2_2_3_12,51,24,13,1,74700,1110000,1122000,1122000,1110000,86000,-125000,-30000,90000,88000
1#AC2_2_3_13,52,24,13,1,74700,1141000,1153000,1153000,1141000,86000,-125000,-30000,90000,88000
1#AC2_3_1_1,53,24,13,1,3600,0,12000,12000,0,86000,-125000,-30000,90000,88000
1#AC2_3_1_2,54,24,13,1,3600,30000,42000,42000,30000,86000,-125000,-30000,90000,88000
1#AC2_3_1_3,55,24,13,1,3600,59000,71000,71000,59000,86000,-125000,-30000,90000,88000
1#AC2_3_1_4,56,24,13,1,3600,89000,101000,101000,89000,86000,-125000,-30000,90000,88000
1#AC2_3_1_5,57,24,13,1,3500,120000,132000,132000,120000,86000,-125000,-30000,90000,88000
1#AC2_3_1_6,58,24,13,1,3500,150000,162000,162000,150000,86000,-125000,-30000,90000,88000
1#AC2_3_1_7,59,24,13,1,3500,180000,192000,192000,180000,86000,-125000,-30000,90000,88000
1#AC2_3_1_8,60,24,13,1,3500,210000,222000,222000,210000,86000,-125000,-30000,90000,88000
1#AC2_3_1_9,61,24,13,1,3500,240000,252000,252000,240000,86000,-125000,-30000,90000,88000
1#AC2_3_1_10,62,24,13,1,3500,270000,282000,282000,270000,86000,-125000,-30000,90000,88000
1#AC2_3_1_11,63,24,13,1,3500,299000,311000,311000,299000,86000,-125000,-30000,90000,88000
1#AC2_3_1_12,64,24,13,1,3500,329000,341000,341000,329000,86000,-125000,-30000,90000,88000
1#AC2_3_1_13,65,24,13,1,3500,360000,372000,372000,360000,86000,-125000,-30000,90000,88000
1#AC2_3_2_1,66,24,13,1,3200,392000,404000,404000,392000,86000,-125000,-30000,90000,88000
1#AC2_3_2_2,67,24,13,1,3200,420000,432000,432000,420000,86000,-125000,-30000,90000,88000
1#AC2_3_2_3,68,24,13,1,3200,451500,463500,463500,451500,86000,-125000,-30000,90000,88000
1#AC2_3_2_4,69,24,13,1,3200,482000,494000,494000,482000,86000,-125000,-30000,90000,88000
1#AC2_3_2_5,70,24,13,1,3200,511000,523000,523000,511000,86000,-125000,-30000,90000,88000
1#AC2_3_2_6,71,24,13,1,3200,542000,554000,554000,542000,86000,-125000,-30000,90000,88000
1#AC2_3_2_7,72,24,13,1,3200,571000,583000,583000,571000,86000,-125000,-30000,90000,88000
1#AC2_3_2_8,73,24,13,1,3200,601000,613000,613000,601000,86000,-125000,-30000,90000,88000
1#AC2_3_2_9,74,24,13,1,3200,631000,643000,643000,631000,86000,-125000,-30000,90000,88000
1#AC2_3_2_10,75,24,13,1,3200,662000,674000,674000,662000,86000,-125000,-30000,90000,88000
1#AC2_3_2_11,76,24,13,1,3200,692000,704000,704000,692000,86000,-125000,-30000,90000,88000
1#AC2_3_2_12,77,24,13,1,3200,721000,733000,733000,721000,86000,-125000,-30000,90000,88000
1#AC2_3_2_13,78,24,13,1,3200,752000,764000,764000,752000,86000,-125000,-30000,90000,88000
1#AC2_3_3_1,79,24,13,1,2800,781000,793000,793000,781000,86000,-125000,-30000,90000,88000
1#AC2_3_3_2,80,24,13,1,2800,810000,822000,822000,810000,86000,-125000,-30000,90000,88000
1#AC2_3_3_3,81,24,13,1,2800,840500,852500,852500,840500,86000,-125000,-30000,90000,88000
1#AC2_3_3_4,82,24,13,1,2800,871000,883000,883000,871000,86000,-125000,-30000,90000,88000
1#AC2_3_3_5,83,24,13,1,2800,900000,912000,912000,900000,86000,-125000,-30000,90000,88000
1#AC2_3_3_6,84,24,13,1,2800,931000,943000,943000,931000,86000,-125000,-30000,90000,88000
1#AC2_3_3_7,85,24,13,1,2800,960000,972000,972000,960000,86000,-125000,-30000,90000,88000
1#AC2_3_3_8,86,24,13,1,2800,990000,1002000,1002000,990000,86000,-125000,-30000,90000,88000
1#AC2_3_3_9,87,24,13,1,2800,1020000,1032000,1032000,1020000,86000,-125000,-30000,90000,88000
1#AC2_3_3_10,88,24,13,1,2800,1051000,1063000,1063000,1051000,86000,-125000,-30000,90000,88000
1#AC2_3_3_11,89,24,13,1,2800,1081000,1093000,1093000,1081000,86000,-125000,-30000,90000,88000
1#AC2_3_3_12,90,24,13,1,2800,1110000,1122000,1122000,1110000,86000,-125000,-30000,90000,88000
1#AC2_3_3_13,,24,13,1,2800,1141000,1153000,1153000,1141000,86000,-125000,-30000,90000,88000
1#AC2_4_1_1,92,24,13,1,507800,0,12000,12000,0,86000,-125000,-30000,90000,88000
1#AC2_4_1_2,93,24,13,1,507800,30000,42000,42000,30000,86000,-125000,-30000,90000,88000
1#AC2_4_1_3,94,24,13,1,507700,59000,71000,71000,59000,86000,-125000,-30000,90000,88000
1#AC2_4_1_4,95,24,13,1,507600,89000,101000,101000,89000,86000,-125000,-30000,90000,88000
1#AC2_4_1_5,96,24,13,1,507500,120000,132000,132000,120000,86000,-125000,-30000,90000,88000
1#AC2_4_1_6,97,24,13,1,507500,150000,162000,162000,150000,86000,-125000,-30000,90000,88000
1#AC2_4_1_7,98,24,13,1,507500,180000,192000,192000,180000,86000,-125000,-30000,90000,88000
1#AC2_4_1_8,99,24,13,1,507500,210000,222000,222000,210000,86000,-125000,-30000,90000,88000
1#AC2_4_1_9,100,24,13,1,507500,240000,252000,252000,240000,86000,-125000,-30000,90000,88000
1#AC2_4_1_10,101,24,13,1,507300,270000,282000,282000,270000,86000,-125000,-30000,90000,88000
1#AC2_4_1_11,102,24,13,1,507300,299000,311000,311000,299000,86000,-125000,-30000,90000,88000
1#AC2_4_1_12,103,24,13,1,507300,329000,341000,341000,329000,86000,-125000,-30000,90000,88000
1#AC2_4_1_13,104,24,13,1,507300,360000,372000,372000,360000,86000,-125000,-30000,90000,88000
1#AC2_4_2_1,,24,13,1,507300,392000,404000,404000,392000,86000,-125000,-30000,90000,88000
1#AC2_4_2_2,,24,13,1,507300,420000,432000,432000,420000,86000,-125000,-30000,90000,88000
1#AC2_4_2_3,,24,13,1,507300,451500,463500,463500,451500,86000,-125000,-30000,90000,88000
1#AC2_4_2_4,,24,13,1,507300,482000,494000,494000,482000,86000,-125000,-30000,90000,88000
1#AC2_4_2_5,,24,13,1,507300,511000,523000,523000,511000,86000,-125000,-30000,90000,88000
1#AC2_4_2_6,,24,13,1,507300,542000,554000,554000,542000,86000,-125000,-30000,90000,88000
1#AC2_4_2_7,,24,13,1,507300,571000,583000,583000,571000,86000,-125000,-30000,90000,88000
1#AC2_4_2_8,,24,13,1,507300,601000,613000,613000,601000,86000,-125000,-30000,90000,88000
1#AC2_4_2_9,,24,13,1,507300,631000,643000,643000,631000,86000,-125000,-30000,90000,88000
1#AC2_4_2_10,,24,13,1,507300,662000,674000,674000,662000,86000,-125000,-30000,90000,88000
1#AC2_4_2_11,,24,13,1,507300,692000,704000,704000,692000,86000,-125000,-30000,90000,88000
1#AC2_4_2_12,,24,13,1,507300,721000,733000,733000,721000,86000,-125000,-30000,90000,88000
1#AC2_4_2_13,,24,13,1,507300,752000,764000,764000,752000,86000,-125000,-30000,90000,88000
1#AC2_4_3_1,105,24,13,1,507100,781000,793000,793000,781000,86000,-125000,-30000,90000,88000
1#AC2_4_3_2,106,24,13,1,507100,810000,822000,822000,810000,86000,-125000,-30000,90000,88000
1#AC2_4_3_3,107,24,13,1,507100,840500,852500,852500,840500,86000,-125000,-30000,90000,88000
1#AC2_4_3_4,108,24,13,1,507100,871000,883000,883000,871000,86000,-125000,-30000,90000,88000
1#AC2_4_3_5,109,24,13,1,506900,900000,912000,912000,900000,86000,-125000,-30000,90000,88000
1#AC2_4_3_6,110,24,13,1,506900,931000,943000,943000,931000,86000,-125000,-30000,90000,88000
1#AC2_4_3_7,111,24,13,1,506900,960000,972000,972000,960000,86000,-125000,-30000,90000,88000
1#AC2_4_3_8,112,24,13,1,506800,990000,1002000,1002000,990000,86000,-125000,-30000,90000,88000
1#AC2_4_3_9,113,24,13,1,506800,1020000,1032000,1032000,1020000,86000,-125000,-30000,90000,88000
1#AC2_4_3_10,114,24,13,1,506800,1051000,1063000,1063000,1051000,86000,-125000,-30000,90000,88000
1#AC2_4_3_11,115,24,13,1,506800,1081000,1093000,1093000,1081000,86000,-125000,-30000,90000,88000
1#AC2_4_3_12,116,24,13,1,506800,1110000,1122000,1122000,1110000,86000,-125000,-30000,90000,88000
1#AC2_4_3_13,117,24,13,1,506800,1141000,1153000,1153000,1141000,86000,-125000,-30000,90000,88000
1#AC2_5_1_1,,24,13,1,435500,0,12000,12000,0,86000,-125000,-30000,90000,88000
1#AC2_5_1_2,,24,13,1,435500,30000,42000,42000,30000,86000,-125000,-30000,90000,88000
1#AC2_5_1_3,,24,13,1,435500,59000,71000,71000,59000,86000,-125000,-30000,90000,88000
1#AC2_5_1_4,,24,13,1,435500,89000,101000,101000,89000,86000,-125000,-30000,90000,88000
1#AC2_5_1_5,,24,13,1,435500,120000,132000,132000,120000,86000,-125000,-30000,90000,88000
1#AC2_5_1_6,,24,13,1,435500,150000,162000,162000,150000,86000,-125000,-30000,90000,88000
1#AC2_5_1_7,,24,13,1,435500,180000,192000,192000,180000,86000,-125000,-30000,90000,88000
1#AC2_5_1_8,,24,13,1,435500,210000,222000,222000,210000,86000,-125000,-30000,90000,88000
1#AC2_5_1_9,,24,13,1,435500,240000,252000,252000,240000,86000,-125000,-30000,90000,88000
1#AC2_5_1_10,,24,13,1,435500,270000,282000,282000,270000,86000,-125000,-30000,90000,88000
1#AC2_5_1_11,,24,13,1,435500,299000,311000,311000,299000,86000,-125000,-30000,90000,88000
1#AC2_5_1_12,,24,13,1,435500,329000,341000,341000,329000,86000,-125000,-30000,90000,88000
1#AC2_5_1_13,,24,13,1,435500,360000,372000,372000,360000,86000,-125000,-30000,90000,88000
1#AC2_5_2_1,118,24,13,1,435400,389000,401000,401000,389000,86000,-125000,-30000,90000,88000
1#AC2_5_2_2,119,24,13,1,435400,420000,432000,432000,420000,86000,-125000,-30000,90000,88000
1#AC2_5_2_3,120,24,13,1,435200,451500,463500,463500,451500,86000,-125000,-30000,90000,88000
1#AC2_5_2_4,121,24,13,1,435200,482000,494000,494000,482000,86000,-125000,-30000,90000,88000
1#AC2_5_2_5,122,24,13,1,435000,511000,523000,523000,511000,86000,-125000,-30000,90000,88000
1#AC2_5_2_6,123,24,13,1,435000,542000,554000,554000,542000,86000,-125000,-30000,90000,88000
1#AC2_5_2_7,124,24,13,1,434900,571000,583000,583000,571000,86000,-125000,-30000,90000,88000
1#AC2_5_2_8,125,24,13,1,434900,601000,613000,613000,601000,86000,-125000,-30000,90000,88000
1#AC2_5_2_9,126,24,13,1,434900,631000,643000,643000,631000,86000,-125000,-30000,90000,88000
1#AC2_5_2_10,127,24,13,1,434900,662000,674000,674000,662000,86000,-125000,-30000,90000,88000
1#AC2_5_2_11,128,24,13,1,434900,692000,704000,704000,692000,86000,-125000,-30000,90000,88000
1#AC2_5_2_12,129,24,13,1,434900,721000,733000,733000,721000,86000,-125000,-30000,90000,88000
1#AC2_5_2_13,130,24,13,1,434900,752000,764000,764000,752000,86000,-125000,-30000,90000,88000
1#AC2_5_3_1,131,24,13,1,434900,781000,793000,793000,781000,86000,-125000,-30000,90000,88000
1#AC2_5_3_2,132,24,13,1,434900,810000,822000,822000,810000,86000,-125000,-30000,90000,88000
1#AC2_5_3_3,133,24,13,1,434900,840500,852500,852500,840500,86000,-125000,-30000,90000,88000
1#AC2_5_3_4,134,24,13,1,434900,871000,883000,883000,871000,86000,-125000,-30000,90000,88000
1#AC2_5_3_5,135,24,13,1,434700,900000,912000,912000,900000,86000,-125000,-30000,90000,88000
1#AC2_5_3_6,136,24,13,1,434700,931000,943000,943000,931000,86000,-125000,-30000,90000,88000
1#AC2_5_3_7,137,24,13,1,434700,960000,972000,972000,960000,86000,-125000,-30000,90000,88000
1#AC2_5_3_8,138,24,13,1,434700,990000,1002000,1002000,990000,86000,-125000,-30000,90000,88000
1#AC2_5_3_9,139,24,13,1,434700,1020000,1032000,1032000,1020000,86000,-125000,-30000,90000,88000
1#AC2_5_3_10,140,24,13,1,434600,1051000,1063000,1063000,1051000,86000,-125000,-30000,90000,88000
1#AC2_5_3_11,141,24,13,1,434600,1081000,1093000,1093000,1081000,86000,-125000,-30000,90000,88000
1#AC2_5_3_12,142,24,13,1,434600,1110000,1122000,1122000,1110000,86000,-125000,-30000,90000,88000
1#AC2_5_3_13,143,24,13,1,434600,1141000,1153000,1153000,1141000,86000,-125000,-30000,90000,88000
1#AC2_6_1_1,144,24,13,1,363600,0,12000,12000,0,86000,-125000,-30000,90000,88000
1#AC2_6_1_2,145,24,13,1,363700,30000,42000,42000,30000,86000,-125000,-30000,90000,88000
1#AC2_6_1_3,146,24,13,1,363800,59000,71000,71000,59000,86000,-125000,-30000,90000,88000
1#AC2_6_1_4,147,24,13,1,363800,89000,101000,101000,89000,86000,-125000,-30000,90000,88000
1#AC2_6_1_5,148,24,13,1,363300,120000,132000,132000,120000,86000,-125000,-30000,90000,88000
1#AC2_6_1_6,149,24,13,1,363300,150000,162000,162000,150000,86000,-125000,-30000,90000,88000
1#AC2_6_1_7,150,24,13,1,363300,180000,192000,192000,180000,86000,-125000,-30000,90000,88000
1#AC2_6_1_8,151,24,13,1,363300,210000,222000,222000,210000,86000,-125000,-30000,90000,88000
1#AC2_6_1_9,152,24,13,1,363300,240000,252000,252000,240000,86000,-125000,-30000,90000,88000
1#AC2_6_1_10,153,24,13,1,363300,270000,282000,282000,270000,86000,-125000,-30000,90000,88000
1#AC2_6_1_11,154,24,13,1,363300,299000,311000,311000,299000,86000,-125000,-30000,90000,88000
1#AC2_6_1_12,155,24,13,1,363300,329000,341000,341000,329000,86000,-125000,-30000,90000,88000
1#AC2_6_1_13,156,24,13,1,363300,360000,372000,372000,360000,86000,-125000,-30000,90000,88000
1#AC2_6_2_1,157,24,13,1,363000,392000,404000,404000,392000,86000,-125000,-30000,90000,88000
1#AC2_6_2_2,158,24,13,1,363000,420000,432000,432000,420000,86000,-125000,-30000,90000,88000
1#AC2_6_2_3,159,24,13,1,363000,451500,463500,463500,451500,86000,-125000,-30000,90000,88000
1#AC2_6_2_4,160,24,13,1,363000,482000,494000,494000,482000,86000,-125000,-30000,90000,88000
1#AC2_6_2_5,161,24,13,1,363000,511000,523000,523000,511000,86000,-125000,-30000,90000,88000
1#AC2_6_2_6,162,24,13,1,363000,542000,554000,554000,542000,86000,-125000,-30000,90000,88000
1#AC2_6_2_7,163,24,13,1,363000,571000,583000,583000,571000,86000,-125000,-30000,90000,88000
1#AC2_6_2_8,164,24,13,1,363000,601000,613000,613000,601000,86000,-125000,-30000,90000,88000
1#AC2_6_2_9,165,24,13,1,363000,631000,643000,643000,631000,86000,-125000,-30000,90000,88000
1#AC2_6_2_10,166,24,13,1,363000,662000,674000,674000,662000,86000,-125000,-30000,90000,88000
1#AC2_6_2_11,167,24,13,1,363000,692000,704000,704000,692000,86000,-125000,-30000,90000,88000
1#AC2_6_2_12,168,24,13,1,363000,721000,733000,733000,721000,86000,-125000,-30000,90000,88000
1#AC2_6_2_13,169,24,13,1,363000,752000,764000,764000,752000,86000,-125000,-30000,90000,88000
1#AC2_6_3_1,170,24,13,1,362700,781000,793000,793000,781000,86000,-125000,-30000,90000,88000
1#AC2_6_3_2,171,24,13,1,362700,810000,822000,822000,810000,86000,-125000,-30000,90000,88000
1#AC2_6_3_3,172,24,13,1,362700,840500,852500,852500,840500,86000,-125000,-30000,90000,88000
1#AC2_6_3_4,173,24,13,1,362700,871000,883000,883000,871000,86000,-125000,-30000,90000,88000
1#AC2_6_3_5,174,24,13,1,362700,900000,912000,912000,900000,86000,-125000,-30000,90000,88000
1#AC2_6_3_6,175,24,13,1,362700,931000,943000,943000,931000,86000,-125000,-30000,90000,88000
1#AC2_6_3_7,176,24,13,1,362700,960000,972000,972000,960000,86000,-125000,-30000,90000,88000
1#AC2_6_3_8,177,24,13,1,362700,990000,1002000,1002000,990000,86000,-125000,-30000,90000,88000
1#AC2_6_3_9,178,24,13,1,362700,1020000,1032000,1032000,1020000,86000,-125000,-30000,90000,88000
1#AC2_6_3_10,179,24,13,1,362700,1051000,1063000,1063000,1051000,86000,-125000,-30000,90000,88000
1#AC2_6_3_11,180,24,13,1,362700,1081000,1093000,1093000,1081000,86000,-125000,-30000,90000,88000
1#AC2_6_3_12,181,24,13,1,362800,1110000,1122000,1122000,1110000,86000,-125000,-30000,90000,88000
1#AC2_6_3_13,180,24,13,1,362800,1141000,1153000,1153000,1141000,86000,-125000,-30000,90000,88000
1#AC2_7_1_1,183,24,13,1,290900,781000,793000,793000,781000,86000,-125000,-30000,90000,88000
1#AC2_7_1_2,184,24,13,1,290900,810000,822000,822000,810000,86000,-125000,-30000,90000,88000
1#AC2_7_1_3,185,24,13,1,290900,840500,852500,852500,840500,86000,-125000,-30000,90000,88000
1#AC2_7_1_4,186,24,13,1,290900,871000,883000,883000,871000,86000,-125000,-30000,90000,88000
1#AC2_7_1_5,187,24,13,1,290900,900000,912000,912000,900000,86000,-125000,-30000,90000,88000
1#AC2_7_1_6,188,24,13,1,290900,931000,943000,943000,931000,86000,-125000,-30000,90000,88000
1#AC2_7_1_7,189,24,13,1,290900,960000,972000,972000,960000,86000,-125000,-30000,90000,88000
1#AC2_7_1_8,190,24,13,1,290900,990000,1002000,1002000,990000,86000,-125000,-30000,90000,88000
1#AC2_7_1_9,191,24,13,1,290900,1020000,1032000,1032000,1020000,86000,-125000,-30000,90000,88000
1#AC2_7_1_10,192,24,13,1,290900,1051000,1063000,1063000,1051000,86000,-125000,-30000,90000,88000
1#AC2_7_1_11,193,24,13,1,290900,1081000,1093000,1093000,1081000,86000,-125000,-30000,90000,88000
1#AC2_7_1_12,194,24,13,1,290900,1110000,1122000,1122000,1110000,86000,-125000,-30000,90000,88000
1#AC2_7_1_13,195,24,13,1,290900,1141000,1153000,1153000,1141000,86000,-125000,-30000,90000,88000
......@@ -874,10 +874,10 @@ namespace OnlineStore.DeviceLibrary
int speed = Config.BatchAxis_P1_Speed;
if (AutomaticBaiting.BatchOutStoreHeight > 0)
{
speed = Config.BatchAxis_P1_Speed / 2;
speed = Config.BatchAxis_SlowSpeed * 2;
}
ACServerManager.AbsMove(Config.Batch_Axis.DeviceName, Config.Batch_Axis.GetAxisValue(), Config.BatchAxis_P1, speed);
OutStoreLog("出库:SO_02 批量上下料轴到P1点【"+Config.BatchAxis_P1+"】 ");
OutStoreLog("出库:SO_02 批量上下料轴到P1点【" + Config.BatchAxis_P1 + "】速度【" + speed + "】 ");
}
}
}
......
......@@ -255,8 +255,9 @@ namespace OnlineStore.DeviceLibrary
if (IsNeedStartInout)
{
StoreMove.NextMoveStep(StoreMoveStep.AUTO_R03_AutoAxisHome);
LogUtil.info(Name + "复位中:检测是否有料盘,批量轴匀速上升【" + StoreManager.Config.Batch_Axis.TargetSpeed + "】");
ACAxisSpeedMove(StoreManager.Config.Batch_Axis, StoreManager.Config.Batch_Axis.TargetSpeed,IO_Type.TrayCheck_LoadMaterial);
int speed = StoreManager.Config.BatchAxis_SlowSpeed * 2;
LogUtil.info(Name + "复位中:检测是否有料盘,批量轴匀速上升【" + speed + "】");
ACAxisSpeedMove(StoreManager.Config.Batch_Axis, speed, IO_Type.TrayCheck_LoadMaterial);
}
else
{
......
......@@ -91,7 +91,7 @@ namespace OnlineStore.DeviceLibrary
if (wait.WaitType == (int)Wait_Type.AxisMove_1)
{
bool isAlarm = false;
wait.IsEnd = AxisMoveISEnd(wait,ref isAlarm);
wait.IsEnd = AxisMoveISEnd(wait, ref isAlarm);
if (isAlarm)
{
return;
......@@ -112,7 +112,7 @@ namespace OnlineStore.DeviceLibrary
// break;
//}
//如果是气缸动作,若Do未输出,重新写一遍
if (!wait.IsEnd&&span.TotalSeconds>1 && (wait.IoType.Equals(IO_Type.SuckingDisc_Down) || wait.IoType.Equals(IO_Type.SuckingDisc_Up)))
if (!wait.IsEnd && span.TotalSeconds > 1 && (wait.IoType.Equals(IO_Type.SuckingDisc_Down) || wait.IoType.Equals(IO_Type.SuckingDisc_Up)))
{
IO_VALUE doValue = IOManager.DOValue(wait.IoType);
if (!doValue.Equals(wait.IoValue))
......@@ -146,7 +146,8 @@ namespace OnlineStore.DeviceLibrary
else if (wait.WaitType == (int)Wait_Type.ScanCode_11)
{
wait.IsEnd = (LastCode.Equals("").Equals(false));
}else if (wait.WaitType == (int)Wait_Type.StoreRuning_13)
}
else if (wait.WaitType == (int)Wait_Type.StoreRuning_13)
{
wait.IsEnd = (StoreManager.Store.storeRunStatus.Equals(StoreRunStatus.Runing) && StoreManager.Store.StoreMove.MoveType.Equals(StoreMoveType.None));
}
......@@ -171,12 +172,39 @@ namespace OnlineStore.DeviceLibrary
{
StoreMove.EndStepWait();
}
else if (span.TotalSeconds > StoreMove.TimeOutSeconds )
else if (span.TotalSeconds > StoreMove.TimeOutSeconds)
{
WarnMsg = "[" + StoreMove.MoveStep + "]" + ResourceControl.GetString(ResourceControl.TimeOut, "超时") + " [" + NotOkMsg + "][" + Math.Round(span.TotalSeconds, 0) + "秒]";
LogUtil.error(WarnMsg,102);
LogUtil.error(WarnMsg, 102);
StoreManager.Store.Alarm(StoreAlarmType.BatchIoTimeOut, "", WarnMsg, StoreMove.MoveType);
}
if (!isOk)
{
//重写气缸
foreach (WaitResultInfo wait in list)
{
if (wait.IsEnd.Equals(false) && (wait.WaitType == (int)Wait_Type.IOMove_2))
{
if (!wait.IsEnd && span.TotalSeconds > 1 &&
(wait.IoType.Equals(IO_Type.SuckingDisc_Down) || wait.IoType.Equals(IO_Type.SuckingDisc_Up)))
{
IO_VALUE doValue = IOManager.DOValue(wait.IoType);
if (!doValue.Equals(wait.IoValue))
{
LogUtil.error("等待[" + wait.ToStr() + "],重写DO(" + wait.IoType + "=" + wait.IoValue + ")");
IOManager.IOMove(wait.IoType, wait.IoValue);
string ioType = wait.IoType.Equals(IO_Type.SuckingDisc_Down) ? IO_Type.SuckingDisc_Up : IO_Type.SuckingDisc_Down;
IO_VALUE ioValue = wait.IoValue.Equals(IO_VALUE.LOW) ? IO_VALUE.HIGH : IO_VALUE.LOW;
LogUtil.error("等待[" + wait.ToStr() + "],重写DO(" + ioType + "=" + ioValue + ")");
IOManager.IOMove(ioType, ioValue);
}
}
}
}
}
}
catch (Exception ex)
{
......@@ -261,20 +289,26 @@ namespace OnlineStore.DeviceLibrary
}
else
{
if (AutoBaitingStatus.Equals(StoreRunStatus.Busy) && StoreMove.CanWhileCount > 0)
TimeSpan span = DateTime.Now - AxisResetMoveTime;
if (AutoBaitingStatus.Equals(StoreRunStatus.Busy) && span.TotalSeconds > 3)
//if (AutoBaitingStatus.Equals(StoreRunStatus.Busy) && StoreMove.CanWhileCount > 0)
{
AxisResetMoveTime = DateTime.Now;
//如果批量轴已经停止运动,重新开始
bool isEnd = ACServerManager.GetBusyStatus(wait.AxisInfo.DeviceName, wait.AxisInfo.GetAxisValue()).Equals(0);
if (isEnd)
{ //判断是否需要重新运动
StoreMove.CanWhileCount--;
LogUtil.error(wait.ToStr() + "未收到信号且停止运动,重新匀速"+ StoreManager.Config.BatchAxis_SlowSpeed + "运动,剩余[" + StoreMove.CanWhileCount + "]次");
LogUtil.error(wait.ToStr() + "未收到信号且停止运动,重新匀速" + StoreManager.Config.BatchAxis_SlowSpeed + "运动,剩余[" + StoreMove.CanWhileCount + "]次");
ACServerManager.SuddenStop(wait.AxisInfo);
Thread.Sleep(300);
ACServerManager.SpeedMove(wait.AxisInfo.DeviceName, wait.AxisInfo.GetAxisValue(), StoreManager.Config.BatchAxis_SlowSpeed);
}
}
}
return result;
}
private static DateTime AxisResetMoveTime = DateTime.Now;
#region Halcon扫码枪代码
public bool IsTestCamera = false;
......
......@@ -375,6 +375,8 @@ namespace OnlineStore.DeviceLibrary
{
LogUtil.error(LOGGER, moveAxis.DisplayStr + "目标位置[" + targetPosition + "]当前位置[" + outCount +
"],误差过大,重新开始运动,剩余[" + StoreMove.CanWhileCount + "]次");
ACServerManager.SuddenStop(moveAxis);
Thread.Sleep(300);
ACServerManager.AbsMove(moveAxis.DeviceName, moveAxis.GetAxisValue(), targetPosition, targetSpeed);
StoreMove.CanWhileCount--;
return false;
......
支持 Markdown 格式
你添加了 0 到此讨论。请谨慎行事。
Finish editing this message first!