Commit a3b477f2 LN

1

1 个父辈 f054873b
此文件类型无法预览
......@@ -36,6 +36,7 @@
<!--是否调试状态-->
<add key="IsInDebug" value="1" />
<add key="ClientSettingsProvider.ServiceUri" value="" />
<add key ="UseDoor" value ="1"/>
</appSettings>
<log4net>
<appender name="RollingLogFileAppender" type="log4net.Appender.RollingFileAppender">
......
......@@ -72,7 +72,7 @@ namespace OnlineStore.ACSingleStore
cmbWriteIO.DataSource = new List<ConfigIO>(boxBean.Config.StoreDOList.Values);
cmbWriteIO.ValueMember = "ProName";
cmbWriteIO.DisplayMember = "DisplayStr";
cmbWriteValue.SelectedIndex = 0;
cmbWriteIO.SelectedIndex = 0;
}
private void timer1_Tick(object sender, EventArgs e)
......@@ -99,22 +99,7 @@ namespace OnlineStore.ACSingleStore
LogUtil.error(LOGGER, ex.StackTrace);
}
}
private void btnWriteSingleDO_Click(object sender, EventArgs e)
{
string deviceName = txtDoName.Text;
int index = FormUtil.GetIntValue(txtDOIndex);
IO_VALUE value = (IO_VALUE)cmbWriteValue.SelectedIndex;
int time = FormUtil.GetIntValue(txtWriteTime);
int slaveId = FormUtil.GetIntValue(txtSlaveId);
if (time > 0)
{
IOManager.instance.WriteSingleDO(deviceName, (byte)slaveId, (ushort)index, (IO_VALUE)value, time);
}
else
{
IOManager.instance.WriteSingleDO(deviceName, (byte)slaveId, (ushort)index, (IO_VALUE)value);
}
}
private ConfigIO GetSelectDO()
{
......@@ -148,36 +133,6 @@ namespace OnlineStore.ACSingleStore
{
//KNDAIManager.NeedShow = true;
}
private void cmbWriteIO_DrawItem(object sender, DrawItemEventArgs e)
{
if (e.Index < 0)
{
return;
}
e.DrawBackground();
e.DrawFocusRectangle();
if (cmbWriteIO.Items.Count > e.Index)
{
ConfigIO io = (ConfigIO)cmbWriteIO.Items[e.Index];
e.Graphics.DrawString(io.DisplayStr, e.Font, new SolidBrush(e.ForeColor), e.Bounds.X, e.Bounds.Y + 3);
}
}
private void cmbWriteValue_DrawItem(object sender, DrawItemEventArgs e)
{
if (e.Index < 0)
{
return;
}
e.DrawBackground();
e.DrawFocusRectangle();
if (cmbWriteValue.Items.Count > e.Index)
{
e.Graphics.DrawString(cmbWriteValue.Items[e.Index].ToString(), e.Font, new SolidBrush(e.ForeColor), e.Bounds.X, e.Bounds.Y + 3);
}
}
private void btnReadIO_Click(object sender, EventArgs e)
{
ReadIOList();
......@@ -207,34 +162,14 @@ namespace OnlineStore.ACSingleStore
}
private void btnReadAllDi_Click(object sender, EventArgs e)
{
string deviceName = txtDoName.Text;
IO_VALUE value = (IO_VALUE)cmbWriteValue.SelectedIndex;
int time = FormUtil.GetIntValue(txtWriteTime);
int slaveId = FormUtil.GetIntValue(txtSlaveId);
IOManager.instance.ReadAllDI(deviceName, (byte)slaveId );
}
private void btnReadAllDo_Click(object sender, EventArgs e)
{
string deviceName = txtDoName.Text;
IO_VALUE value = (IO_VALUE)cmbWriteValue.SelectedIndex;
int time = FormUtil.GetIntValue(txtWriteTime);
int slaveId = FormUtil.GetIntValue(txtSlaveId);
IOManager.instance.ReadAllDO(deviceName, (byte)slaveId );
}
private void btnOpenDoor_Click(object sender, EventArgs e)
{
//IOManager.IOMove(IO_Type.Door_Up, IO_VALUE.HIGH);
//IOManager.IOMove(IO_Type.Door_Down, IO_VALUE.LOW);
StoreManager.Store.OpenDoor(false);
StoreManager.Store.OpenDoor(1);
}
private void btnCloseDoor_Click(object sender, EventArgs e)
{
//IOManager.IOMove(IO_Type.Door_Down, IO_VALUE.HIGH);
//IOManager.IOMove(IO_Type.Door_Up, IO_VALUE.LOW);
StoreManager.Store.CloseDoor(false);
StoreManager.Store.CloseDoor(1);
}
private void FrmIOStatus_Shown(object sender, EventArgs e)
{
......@@ -243,12 +178,12 @@ namespace OnlineStore.ACSingleStore
private void btnOpenAxisBreak_Click(object sender, EventArgs e)
{
IOManager.IOMove(IO_Type.Axis_Brake, IO_VALUE.HIGH);
StoreManager.Store.ShelfForward(2);
}
private void btnCloseAxisBreak_Click(object sender, EventArgs e)
{
IOManager.IOMove(IO_Type.Axis_Brake, IO_VALUE.LOW);
StoreManager.Store.ShelfBack(2);
}
private void button1_Click(object sender, EventArgs e)
......@@ -256,6 +191,73 @@ namespace OnlineStore.ACSingleStore
this.Close();
}
private void btnOpenDo_Click(object sender, EventArgs e)
{
WriteDO(IO_VALUE.HIGH);
}
private void btnWriteSingleDO_Click(object sender, EventArgs e)
{
WriteDO(IO_VALUE.LOW);
}
private void WriteDO(IO_VALUE value)
{
string deviceName = txtDoName.Text;
int index = FormUtil.GetIntValue(txtDOIndex);
// IO_VALUE value = checkBox1.Checked ? IO_VALUE.HIGH : IO_VALUE.LOW;
int time = FormUtil.GetIntValue(txtWriteTime);
int slaveId = FormUtil.GetIntValue(txtSlaveId);
if (time > 0)
{
IOManager.instance.WriteSingleDO(deviceName, (byte)slaveId, (ushort)index, (IO_VALUE)value, time);
}
else
{
IOManager.instance.WriteSingleDO(deviceName, (byte)slaveId, (ushort)index, (IO_VALUE)value);
}
}
private void cmbWriteIO_SelectedIndexChanged_1(object sender, EventArgs e)
{
if (cmbWriteIO.SelectedIndex >= 0)
{
ConfigIO io = GetSelectDO();
if (io != null)
{
// txtIp.Text = io.DeviceName;
txtDOIndex.Text = io.GetIOAddr().ToString();
txtDoName.Text = io.IO_IP;
txtSlaveId.Text = io.SlaveID.ToString();
IOTextControl newControl = DOControlList[io.ProName];
if (selectControl != null) { selectControl.BackColor = Color.White; }
newControl.BackColor = Color.SkyBlue;
selectControl = newControl;
}
}
}
private void btnOpenRDoor_Click(object sender, EventArgs e)
{
StoreManager.Store.OpenDoor(2);
}
private void btnCloseRDoor_Click(object sender, EventArgs e)
{
StoreManager.Store.OpenDoor(2);
}
private void btnLShelfForward_Click(object sender, EventArgs e)
{
StoreManager.Store.ShelfForward(1);
}
private void btnLShelfBack_Click(object sender, EventArgs e)
{
StoreManager.Store.ShelfBack(1 );
}
private void btnOpenB_Click(object sender, EventArgs e)
{
IOManager.IOMove(IO_Type.Axis_Brake, IO_VALUE.HIGH);
}
private void btnCloseB_Click(object sender, EventArgs e)
{
IOManager.IOMove(IO_Type.Axis_Brake, IO_VALUE.LOW);
}
}
}
......@@ -52,7 +52,16 @@ namespace OnlineStore.ACSingleStore
//cmbHomeType.SelectedIndex = 1;
HideForm();
this.Opacity = 1;
txtTempPort.Text = store.Config.Humiture_Port;
cmbHumpPort.Items.Clear();
foreach(string str in store.Config.GetHumpPortList())
{
cmbHumpPort.Items.Add(str);
}
if (cmbHumpPort.Items.Count > 0)
{
cmbHumpPort.SelectedIndex = 0;
}
// txtTempPort.Text = store.Config.Humiture_Port;
LoadOk = true;
}
......@@ -161,6 +170,15 @@ namespace OnlineStore.ACSingleStore
LoadOk = true;
}
lblTemp.Text = store.currTempStr;
if (store.StoreMove.MoveType.Equals(StoreMoveType.InStore) || store.StoreMove.MoveType.Equals(StoreMoveType.OutStore))
{
lblMoveEquipInfo.Text = store.StoreMove.MoveParam.PosInfo.ToStr()+ "";
}
else
{
lblMoveEquipInfo.Text = "";
}
// lblMoveEquipInfo.Text = "移栽状态:" + (LineConnect.CanStartOut() ? "可出库" : "不可出库") + " " + LineConnect.LastUpdateTime.ToLongTimeString();
//忙碌状态不读取状态
if (!store.storeRunStatus.Equals(StoreRunStatus.Busy))
......@@ -343,7 +361,9 @@ namespace OnlineStore.ACSingleStore
{
string selectPositionNum = cmbPosition.Text;
LineMoveP ktk = LoadPostion();
store.StartOutStoreMove(new InOutParam(new InOutPosInfo("", selectPositionNum), ktk));
InOutPosInfo pos = new InOutPosInfo("", selectPositionNum);
pos.ShelfType = rdbLeft.Checked ? 1 : 2;
store.StartOutStoreMove(new InOutParam(pos, ktk));
}
else
{
......@@ -357,7 +377,9 @@ namespace OnlineStore.ACSingleStore
{
string selectPositionNum = cmbPosition.Text;
LineMoveP ktk = LoadPostion();
store.StartInStoreMove(new InOutParam(new InOutPosInfo("", selectPositionNum), ktk));
InOutPosInfo pos = new InOutPosInfo("", selectPositionNum);
pos.ShelfType = rdbLeft.Checked ? 1 : 2;
store.StartInStoreMove(new InOutParam(pos, ktk));
}
else
{
......@@ -789,11 +811,14 @@ namespace OnlineStore.ACSingleStore
int currIndex = cmbPosition.SelectedIndex;
store.autoPositionIndex = currIndex;
store.AutoStartIndex = currIndex;
store.autoShelfType = rdbLeft.Checked ? 1 : 2;
string poText = cmbPosition.Text;
store.autoMsg = "自动出库:" + poText;
LogUtil.info(LOGGER, store.StoreName + "开启自动出入库模式,开始位置【" + poText + "】(索引=" + currIndex + "),间隔=" + jiange + ",入库开始!");
//store.StartOutStoreMove(new InOutStoreParam("", poText));
store.StartInStoreMove(new InOutParam(new InOutPosInfo("AUTOINOUT", poText)));
InOutPosInfo pos = new InOutPosInfo("AUTOINOUT", poText);
pos.ShelfType = store.autoShelfType;
store.StartInStoreMove(new InOutParam(pos));
}
btnStartAuTo.Text = "停止自动出入库";
}
......@@ -867,10 +892,7 @@ namespace OnlineStore.ACSingleStore
LogUtil.info("料仓运转ON完成");
}
private void 打开舱门ToolStripMenuItem_Click(object sender, EventArgs e)
{
StoreManager.Store.OpenDoor(false);
}
private void 料仓运转OFFToolStripMenuItem_Click(object sender, EventArgs e)
{
......@@ -878,10 +900,6 @@ namespace OnlineStore.ACSingleStore
LogUtil.info("料仓运转OFF完成");
}
private void 关闭仓门ToolStripMenuItem_Click(object sender, EventArgs e)
{
StoreManager.Store.CloseDoor(false);
}
private void 回待机点ToolStripMenuItem_Click(object sender, EventArgs e)
{
......@@ -1070,34 +1088,50 @@ namespace OnlineStore.ACSingleStore
ExitApp();
}
}
private void UpdateBtnEn( )
{
string port = cmbHumpPort.Text;
if (HumitureController.IsRun(port))
{
btnTempInit.Enabled = false;
btnTempClose.Enabled = true;
}
else
{
btnTempInit.Enabled = true;
btnTempClose.Enabled = false;
}
}
private void btnTempInit_Click(object sender, EventArgs e)
{
string port = txtTempPort.Text.ToString();
if (HumitureController.IsRun)
string port = cmbHumpPort.Text.ToString();
if (HumitureController.IsRun(port))
{
HumitureController.Release(port);
}
bool result = HumitureController.Init(port);
if (!result)
{
HumitureController.Release();
MessageBox.Show("初始化 " + port + " 失败");
}
HumitureController.Init(port);
UpdateBtnEn();
}
private void btnTempClose_Click(object sender, EventArgs e)
{
HumitureController.Release();
string port = cmbHumpPort.Text.ToString();
HumitureController.Release(port);
UpdateBtnEn();
}
private void btnSelTemp_Click(object sender, EventArgs e)
{
ASTemperateParam param = HumitureController.QueryData();
ASTemperateParam param = HumitureController.QueryData(cmbHumpPort.Text);
txtTemp.Text = param.Temperate.ToString();
txtHum.Text = param.Humidity.ToString();
}
private void btnOpenDoor_Click(object sender, EventArgs e)
{
//IOManager.IOMove(IO_Type.Door_Up, IO_VALUE.HIGH);
//IOManager.IOMove(IO_Type.Door_Down, IO_VALUE.LOW);
StoreManager.Store.OpenDoor(false);
}
private void btnClearL_Click(object sender, EventArgs e)
{
......@@ -1136,15 +1170,6 @@ namespace OnlineStore.ACSingleStore
}
}
private void btnCloseDoor_Click(object sender, EventArgs e)
{
//IOManager.IOMove(IO_Type.Door_Up, IO_VALUE.LOW);
//IOManager.IOMove(IO_Type.Door_Down, IO_VALUE.HIGH);
StoreManager.Store.CloseDoor(false);
}
private void chbDebug_CheckedChanged(object sender, EventArgs e)
{
if (!LoadOk)
......@@ -1201,5 +1226,22 @@ namespace OnlineStore.ACSingleStore
{
LogUtil.UpdateLogbox();
}
private void cmbHumpPort_SelectedIndexChanged(object sender, EventArgs e)
{
string port = cmbHumpPort.Text;
if (HumitureController.IsRun(port))
{
btnTempInit.Enabled = false;
btnTempClose.Enabled = true;
}
else
{
btnTempInit.Enabled = true;
btnTempClose.Enabled = false ;
}
}
}
}
......@@ -99,7 +99,7 @@ namespace OnlineStore.Common
public static string Tool_TargetSpeed= "Tool_TargetSpeed";
public static string Tool_TargetPosition= "Tool_TargetPosition";
public static string UseDoor = "UseDoor";
}
}
......@@ -15,93 +15,143 @@ namespace OnlineStore.Common
public class HumitureController
{
public static readonly ILog LOGGER = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
public static bool IsRun = false;
public static string serialPort = "";
// public static bool IsRun = false;
// public static string serialPort = "";
private static int bautRate = 4800;//波特率
private static Parity parity = Parity.None;//校验位
private static int dataBits = 8;//数据位
private static StopBits stopBits = StopBits.One; //停止位
private static AcSerialBean sb = null;
private static Dictionary<string, AcSerialBean> SerialMap = new Dictionary<string, AcSerialBean> ();
private static string LogName = "";
public static int HumitureControllerType = ConfigAppSettings.GetIntValue(Setting_Init.HumitureControllerType);
public static bool Init(string port)
private static AcSerialBean GetSerialBean(string port)
{
if (IsRun && port.Equals(serialPort))
if (SerialMap.ContainsKey(port))
{
return true;
return SerialMap[port];
}
return null;
}
public static void OpenAll(string[] ports)
{
foreach(string port in ports)
{
Init(port);
}
}
else if (IsRun)
public static bool Init(string port)
{
Release();
if (SerialMap.ContainsKey(port))
{
return true;
}
LogName = "温湿度传感器[" + port + "]";
if (sb == null)
{
serialPort = port;
if (HumitureControllerType.Equals(1))
{
bautRate = 9600;//波特率
}
sb = new AcSerialBean(serialPort, bautRate, parity, dataBits, stopBits);
}
AcSerialBean sb = new AcSerialBean(port, bautRate, parity, dataBits, stopBits);
try
{
if (sb.openPort())
{
IsRun = true;
if (SerialMap.ContainsKey(port))
{
SerialMap.Remove(port);
}
SerialMap.Add(port, sb);
return true;
}
else
{
LogUtil.error(LOGGER, LogName + "串口打开失败!");
IsRun = false;
return false;
}
}
catch (Exception ex)
{
IsRun = false;
}
return true;
}
public static bool IsRun(string port)
{
if (GetSerialBean(port) != null)
{
return true;
}return false;
}
/// <summary>
/// 释放资源
/// </summary>
public static void Release()
public static void Release(params string[] ports)
{
if (ports.Length <= 0)
{
ports = (new List<string>(SerialMap.Keys)).ToArray();
}
foreach (string port in ports)
{
try
{
AcSerialBean sb = GetSerialBean(port);
if (sb != null)
{
sb.closePort();
}
IsRun = false;
//IsRun = false;
SerialMap.Remove(port);
}catch(Exception ex)
{
LogUtil.error("Release Humiture port ["+port+"] error :" + ex.ToString());
}
}
}
public static ASTemperateParam LastData = new ASTemperateParam(0, 0);
public static ASTemperateParam QueryData()
public static ASTemperateParam QueryData(params string[] portList)
{
if (portList.Length <= 0)
{
portList = (new List<string>(SerialMap.Keys) ).ToArray();
}
double wendu = 0;
double shidu = 0;
int count = 0;
foreach (string port in portList)
{
ASTemperateParam param = new ASTemperateParam(0, 0);
List<double> data = queryData();
List<double> data = queryData(port);
if (data.Count.Equals(2))
{
wendu += data[1];
shidu += data[0];
count++;
param = new ASTemperateParam(data[1], data[0]);
}
LastData = param;
return param;
}
LastData = new ASTemperateParam(wendu/count,shidu/count);
return LastData;
}
/// <summary>
/// 返回温度和湿度
/// </summary>
/// <returns></returns>
private static List<double> queryData()
private static List<double> queryData(string port)
{
// 温度计算:
//当温度低于 0 ℃ 时温度数据以补码的形式上传。
//温度:FF9B H(十六进制)= -101 => 温度 = -10.1℃
//湿度计算:
//湿度:292 H(十六进制) = 658 => 湿度 = 65.8 % RH
if (IsRun.Equals(false))
// if (IsRun.Equals(false))
AcSerialBean sb = GetSerialBean(port);
if (sb == null)
{
return new List<double>();
}
......@@ -131,9 +181,14 @@ namespace OnlineStore.Common
}
public static int QueryHistoryCount()
public static int QueryHistoryCount(string port)
{
if (IsRun.Equals(false) || HumitureControllerType.Equals(2).Equals(false))
AcSerialBean sb = GetSerialBean(port);
if (sb == null)
{
return -1;
}
if ( HumitureControllerType.Equals(2).Equals(false))
{
return -1;
}
......@@ -165,9 +220,14 @@ namespace OnlineStore.Common
sb.SendCommand(sendData, ref reviceData, 100, out isOk);
return getReviceIntData(reviceData);
}
public static int QueryCurrCount()
public static int QueryCurrCount(string port)
{
AcSerialBean sb = GetSerialBean(port);
if (sb == null)
{
if (IsRun.Equals(false) || HumitureControllerType.Equals(2).Equals(false))
return -1;
}
if ( HumitureControllerType.Equals(2).Equals(false))
{
return -1;
}
......@@ -188,10 +248,15 @@ namespace OnlineStore.Common
sb.SendCommand(sendData, ref reviceData, 100, out isOk);
return getReviceIntData(reviceData);
}
public static List<object> QueryHistory()
public static List<object> QueryHistory(string port)
{
List<object> list = new List<object>();
if (IsRun.Equals(false)||HumitureControllerType.Equals(2).Equals(false))
AcSerialBean sb = GetSerialBean(port);
if (sb == null)
{
return list;
}
if ( HumitureControllerType.Equals(2).Equals(false))
{
return list;
}
......
......@@ -4,38 +4,38 @@ PRO,模块对应的DO数量,IO_DOLength,192.168.201.21#16,,,,,,,
PRO,是否有仓门,HasDoor,1,,,,,,,
PRO,IO模块IP,PRO_AOI_IP_1,192.168.201.21,,,,,,,
,,,,,,,,,,
DI,急停,SuddenStop_BTN,0,PRO_AOI_IP_1,0,急停,X1-1,A1,0,
DI,开机,Start_BTN,1,PRO_AOI_IP_1,0,开机,X1-2,A2,0,
DI,复位,Reset_BTN,2,PRO_AOI_IP_1,0,复位,X1-3,A3,0,
DI,前门门禁信号,DoorLimit_L,3,PRO_AOI_IP_1,0,前门门禁信号,X1-4,A4,0,
DI,后门门禁信号,DoorLimit_B,4,PRO_AOI_IP_1,0,后门门禁信号,X1-5,A5,0,
DI,左取料口门开关信号,LeftDoor_Close,5,PRO_AOI_IP_1,0,左取料口门开关信号,X1-6,A6,0,
DI,右取料口门开关信号,RightDoor_Close,6,PRO_AOI_IP_1,0,右取料口门开关信号,X1-7,A7,0,
DI,出料下托架前进(左),LeftShelf_Forward,7,PRO_AOI_IP_1,0,出料下托架前进(左),X1-8,A8,0,
DI,出料下托架后退(左),LeftShelf_Back,8,PRO_AOI_IP_1,0,出料下托架后退(左),X2-1,A10,0,
DI,出料下托架前进(右),RightShelf_Forward,9,PRO_AOI_IP_1,0,出料下托架前进(右),X2-2,A11,0,
DI,出料下托架后退(右),RightShelf_Back,10,PRO_AOI_IP_1,0,出料下托架后退(右),X2-3,A12,0,
DI,货叉物料检测开关,TrayCheck_Fixture,11,PRO_AOI_IP_1,0,货叉物料检测开关,X2-4,A13,0,
DI,空气压力检测信号,Airpressure_Check,12,PRO_AOI_IP_1,0,空气压力检测信号,X2-5,A14,0,
DI,托架物料检测(左),LeftShelf_Check,13,PRO_AOI_IP_1,0,托架物料检测(左),X2-6,A15,0,
DI,托架物料检测(右),RightShelf_Check,14,PRO_AOI_IP_1,0,托架物料检测(右),X2-7,A16,0,
,,,15,PRO_AOI_IP_1,0,,X2-8,A17,0,
DO,信号灯绿色开机,AutoRun_HddLed,0,PRO_AOI_IP_1,0,信号灯绿色开机,Y1-1,B1,,
DO,信号灯红色停止,Alarm_HddLed,1,PRO_AOI_IP_1,0,信号灯红色停止,Y1-2,B2,,
DO,信号灯黄色故障,RunSign_HddLed,2,PRO_AOI_IP_1,0,信号灯黄色故障,Y1-3,B3,,
DO,翁鸣器,Alarm_Buzzer,3,PRO_AOI_IP_1,0,翁鸣器,Y1-4,B4,,
DO,出口电机前进(左),LeftShelf_Forward,4,PRO_AOI_IP_1,0,出口电机前进(左),Y1-5,B5,,
DO,出口电机后退(左),LeftShelf_Back,5,PRO_AOI_IP_1,0,出口电机后退(左),Y1-6,B6,,
DO,入口电机前进(右),RightShelf_Forward,6,PRO_AOI_IP_1,0,入口电机前进(右),Y1-7,B7,,
DO,入口电机后退(右),RightShelf_Back,7,PRO_AOI_IP_1,0,入口电机后退(右),Y1-8,B8,,
DO,锁门气缸(左),LeftDoor_Close,8,PRO_AOI_IP_1,0,锁门气缸(左),Y2-1,B10,,
DO,锁门气缸(右),RightDoor_Close,9,PRO_AOI_IP_1,0,锁门气缸(右),Y2-2,B11,,
DO,使能,Run_Signal,10,PRO_AOI_IP_1,0,使能,Y2-3,B12,,
DO,刹车,Axis_Brake,11,PRO_AOI_IP_1,0,刹车,Y2-4,B13,,
DO,温湿度喷气电磁阀,StartOrStopBlow,12,PRO_AOI_IP_1,0,温湿度喷气电磁阀,Y2-5,B14,,
,,,13,PRO_AOI_IP_1,0,,Y2-6,B15,,
,,,14,PRO_AOI_IP_1,0,,Y2-7,B16,,
,,,15,PRO_AOI_IP_1,0,,Y2-8,B17,,
DI,急停,SuddenStop_BTN,0,PRO_AOI_IP_1,0,急停,X1-01,A1,0,
DI,启动,Start_BTN,1,PRO_AOI_IP_1,0,启动,X1-02,A2,0,
DI,复位,Reset_BTN,2,PRO_AOI_IP_1,0,复位,X1-03,A3,0,
DI,前门门禁信号,DoorLimit_L,3,PRO_AOI_IP_1,0,前门门禁信号,X1-04,A4,0,
DI,后门门禁信号,DoorLimit_B,4,PRO_AOI_IP_1,0,后门门禁信号,X1-05,A5,0,
DI,左取料口门开关信号,LeftDoor_Close,5,PRO_AOI_IP_1,0,左取料口门开关信号,X1-06,A6,0,
DI,右取料口门开关信号,RightDoor_Close,6,PRO_AOI_IP_1,0,右取料口门开关信号,X1-07,A7,0,
DI,左侧出料下托架前进端,LeftShelf_Forward,7,PRO_AOI_IP_1,0,左侧出料下托架前进端,X1-08,A8,0,
DI,左侧出料下托架后退端,LeftShelf_Back,8,PRO_AOI_IP_1,0,左侧出料下托架后退端,X2-01,A10,0,
DI,右侧出料下托架前进端,RightShelf_Forward,9,PRO_AOI_IP_1,0,右侧出料下托架前进端,X2-02,A11,0,
DI,右侧出料下托架后退端,RightShelf_Back,10,PRO_AOI_IP_1,0,右侧出料下托架后退端,X2-03,A12,0,
DI,货叉物料检测开关,TrayCheck_Fixture,11,PRO_AOI_IP_1,0,货叉物料检测开关,X2-04,A13,0,
DI,空气压力检测信号,Airpressure_Check,12,PRO_AOI_IP_1,0,空气压力检测信号,X2-05,A14,0,
DI,托架物料检测(左),LeftShelf_Check,13,PRO_AOI_IP_1,0,托架物料检测(左),X2-06,A15,0,
DI,托架物料检测(右),RightShelf_Check,14,PRO_AOI_IP_1,0,托架物料检测(右),X2-07,A16,0,
,,,15,PRO_AOI_IP_1,0,,X2-08,A17,0,
DO,运行指示灯,AutoRun_HddLed,0,PRO_AOI_IP_1,0,运行指示灯,Y1-01,B1,,
DO,故障指示灯,Alarm_HddLed,1,PRO_AOI_IP_1,0,故障指示灯,Y1-02,B2,,
DO,待机指示灯,RunSign_HddLed,2,PRO_AOI_IP_1,0,待机指示灯,Y1-03,B3,,
DO,蜂鸣器,Alarm_Buzzer,3,PRO_AOI_IP_1,0,蜂鸣器,Y1-04,B4,,
DO,左侧出料下托架电机前进,LeftShelf_Forward,4,PRO_AOI_IP_1,0,左侧出料下托架电机前进,Y1-05,B5,,
DO,左侧出料下托架电机后退,LeftShelf_Back,5,PRO_AOI_IP_1,0,左侧出料下托架电机后退,Y1-06,B6,,
DO,右侧出料下托架电机前进,RightShelf_Forward,6,PRO_AOI_IP_1,0,右侧出料下托架电机前进,Y1-07,B7,,
DO,右侧出料下托架电机后退,RightShelf_Back,7,PRO_AOI_IP_1,0,右侧出料下托架电机后退,Y1-08,B8,,
DO,左侧门锁气缸,LeftDoor_Close,8,PRO_AOI_IP_1,0,左侧门锁气缸,Y2-01,B10,,
DO,右侧门锁气缸,RightDoor_Close,9,PRO_AOI_IP_1,0,右侧门锁气缸,Y2-02,B11,,
DO,伺服运转ON,Run_Signal,10,PRO_AOI_IP_1,0,伺服运转ON,Y2-03,B12,,
DO,Z轴伺服刹车ON,Axis_Brake,11,PRO_AOI_IP_1,0,Z轴伺服刹车ON,Y2-04,B13,,
DO,温湿度喷气电磁阀,StartOrStopBlow,12,PRO_AOI_IP_1,0,温湿度喷气电磁阀,Y2-05,B14,,
,,,13,PRO_AOI_IP_1,0,,Y2-06,B15,,
,,,14,PRO_AOI_IP_1,0,,Y2-07,B16,,
,,,15,PRO_AOI_IP_1,0,,Y2-08,B17,,
AXIS,(Y轴-前后轴) ,Middle_Axis,1,COM3,0,,,,,
AXIS,(Z轴-升降轴),UpDown_Axis,2,COM3,0,,,,,
AXIS,(X轴-进出轴),InOut_Axis,3,COM3,0,,,,,
......@@ -108,6 +108,6 @@ PRO,需要吹气的温度(温度标准),Max_Temperature,0,,,,,,,
PRO,需要吹气的湿度(湿度标准),Max_Humidity,10,,,,,,,
PRO,每次吹气的时间(分钟),BlowAir_Time,10,,,,,,,
PRO,两次吹气间隔(分钟),BlowAir_Interval,10,,,,,,,
PRO,温湿度端口号,Humiture_Port,COM1,,,,,,,
PRO,温湿度端口号(分号分隔),Humiture_Port,COM2;COM3;COM4,,,,,,,
,,,,,,,,, ,
,,,,,,,,, ,
using OnlineStore.Common;
using OnlineStore.LoadCSVLibrary;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
namespace OnlineStore.DeviceLibrary.acSquareStore
{
public class ShelfDoorBean
{
public bool IsRun = false;
private string LastMoveDO = "";
private string LastCheckDI = "";
internal DateTime LastEndTime = DateTime.Now;
public ShelfDoorBean( )
{
}
public void Stop()
{
if (IsRun)
{
IsRun = false;
}
}
private bool Start(string moveDO, string checkDI, int timeOutMS = 30000)
{
if (IsRun)
{
LogUtil.error("启动[" + moveDO + "] [" + checkDI + "] 失败");
return false;
}
IsRun = true;
Task.Factory.StartNew(delegate
{
WriteAndWait(moveDO, checkDI, timeOutMS);
});
return true;
}
private string WriteAndWait(string moveDO, string checkDI, int timeOutMS = 30000)
{
LastMoveDO = moveDO;
LastCheckDI = checkDI;
LogUtil.debug("写入信号:" + moveDO + ",等待信号:" + checkDI + "");
//if (moveDO.Equals(IO_Type.EntranceDoor_Open))
//{
// IOManager.IOMove(IO_Type.EntranceDoor_Close, IO_VALUE.LOW );
//}
//else
//{
// IOManager.IOMove(IO_Type.EntranceDoor_Open, IO_VALUE.LOW );
//}
IOManager.IOMove(moveDO, IO_VALUE.HIGH );
Thread.Sleep(50);
IsRun = true;
DateTime startTime = DateTime.Now;
string result = "";
bool isStop = false;
while (true)
{
Thread.Sleep(50);
TimeSpan span = DateTime.Now - startTime;
if (!IsRun)
{
isStop = true;
result = "手动停止";
}
else if (span.TotalMilliseconds > timeOutMS)
{
isStop = true;
result = "转动超时";
}
//判断Buzy及位置是否结束
else if (IOManager.IOValue(checkDI).Equals(IO_VALUE.HIGH))
{
isStop = true;
}
if (isStop)
{
if (result.Equals(""))
{
LogUtil.info("停止运动:" + result + " [" + moveDO + "] [" + checkDI + "] ");
}
else
{
LogUtil.info("[" + moveDO + "] [" + checkDI + "] 停止运动:" + result + " " + moveDO);
}
LastEndTime = DateTime.Now;
IOManager.IOMove(moveDO, IO_VALUE.LOW);
IsRun = false;
return result;
}
}
}
public bool StartOpen(StoreMoveInfo moveInfo)
{
//bool UseDoor = ConfigAppSettings.GetIntValue(Setting_Init.UseDoor).Equals(1);
//if (!UseDoor)
//{
// return false;
//}
////如果门已打开直接返回
//if (IOManager.IOValue(IO_Type.EntranceDoor_Open ).Equals(IO_VALUE.HIGH) &&
// IOManager.IOValue(IO_Type.EntranceDoor_Close ).Equals(IO_VALUE.LOW))
//{
// return true;
//}
//if (moveInfo != null)
//{
// moveInfo.WaitList.Add(WaitResultInfo.WaitIO(IO_Type.LeftDoor_Close, IO_VALUE.HIGH));
// moveInfo.WaitList.Add(WaitResultInfo.WaitIO(IO_Type.EntranceDoor_Close, IO_VALUE.LOW));
//}
//return Start(IO_Type.EntranceDoor_Open, IO_Type.EntranceDoor_Open);
return false;
}
public bool StartClose(StoreMoveInfo moveInfo)
{
//bool UseDoor = ConfigAppSettings.GetIntValue(Setting_Init.UseDoor).Equals(1);
//if (!UseDoor)
//{
// return false;
//}
////如果门已关闭直接返回
//if (IOManager.IOValue(IO_Type.EntranceDoor_Close ).Equals(IO_VALUE.HIGH) &&
// IOManager.IOValue(IO_Type.EntranceDoor_Open ).Equals(IO_VALUE.LOW))
//{
// return true;
//}
//if (moveInfo != null)
//{
// moveInfo.WaitList.Add(WaitResultInfo.WaitIO(IO_Type.EntranceDoor_Close, IO_VALUE.HIGH));
// moveInfo.WaitList.Add(WaitResultInfo.WaitIO(IO_Type.EntranceDoor_Open, IO_VALUE.LOW));
//}
//return Start(IO_Type.EntranceDoor_Close, IO_Type.EntranceDoor_Close);
return false;
}
}
}
......@@ -23,7 +23,7 @@ namespace OnlineStore.DeviceLibrary
MoveP = null;
}
public InOutParam(InOutPosInfo inoutInfo, LineMoveP linePosition = null)
public InOutParam(InOutPosInfo inoutInfo , LineMoveP linePosition = null)
{
ACStoreP = null; ;
MoveP = linePosition;
......@@ -90,7 +90,7 @@ namespace OnlineStore.DeviceLibrary
public string ToStr()
{
return " barcode[" + barcode + "],PosId [" + PosId + "],plateW [" + PlateW + "],plateH [" + PlateH + "],ShelfLR [" + ShelfType + "]";
return " barcode[" + barcode + "],PosId [" + PosId + "] [" + PlateW + "X" + PlateH + "] [" + ShelfType + "]";
}
}
......
......@@ -179,14 +179,14 @@ namespace OnlineStore.DeviceLibrary
/// <summary>
///料仓出库,,定位气缸下降
/// </summary>
SO_01_LocationCylinderDown=101,
// SO_01_LocationCylinderDown=101,
/// <summary>
///料仓出库:叉子先运动到P1
/// </summary>
SO_02_DeviceBack = 102,
/// <summary>
/// 料仓出库,,所有轴运行到库位, 轴4( 压紧) 至P3(压紧前点) ,轴1( 转盘) 至P2( 库位点),轴2(上下) 至P5(库位出库前点
/// 料仓出库,,前后轴至P2(库位点),升降轴至P5(库位出库前点) ,托架后退
/// </summary>
SO_03_ToBagPosition = 103,
/// <summary>
......@@ -207,7 +207,7 @@ namespace OnlineStore.DeviceLibrary
/// <summary>
/// 料仓出库,定位气缸伸出(有压紧轴的不需要此步骤),,定位气缸伸出 Y103-1/PCI5O1-83) Y103-2/PCI5O1-90) Y103-3/PCI5O1-95) 伸出到位
/// </summary>
SO_07_LocationCylinder_Up = 107,
// SO_07_LocationCylinder_Up = 107,
/// <summary>
/// 料仓出库,,所有设备运行到门,,轴1( 转盘) 至P1( 待机点)轴2( 上下) 至P2( 进料口出料前点)
......@@ -217,11 +217,11 @@ namespace OnlineStore.DeviceLibrary
/// <summary>
/// 料仓出库,定位气缸退回(有压紧轴的不需要此步骤),,定位气缸退回(Y104-1/PCI5O1-84) (Y104-2/PCI5O1-91) (Y104-2/PCI5O1-96) 退回到位
/// </summary>
SO_09_LocationCylinder_Down = 109,
// SO_09_LocationCylinder_Down = 109,
/// <summary>
/// 等待门口无料盘
/// </summary>
SO_091_WaitNoTray=115,
SO_09_WaitNoTray=115,
/// <summary>
/// 料仓出库,,叉子进出料口,,轴3( 叉子) 至P2( 进料口取料点)
......@@ -252,28 +252,28 @@ namespace OnlineStore.DeviceLibrary
/// 入库检测
/// </summary>
SI_00_TrayCheck=200,
///// <summary>
///// 入库,。定位气缸下降
///// </summary>
//SI_01_LocationCylinderDown=201,
/// <summary>
/// 入库,。定位气缸下降
/// </summary>
SI_01_LocationCylinderDown=201,
/// <summary>
/// 入库。。进出轴(叉子)先返回P1
/// 入库。。进出轴(叉子)先返回P1,关闭门锁
/// </summary>
SI_02_InOutAxisHome = 202,
/// <summary>
/// 入库。。所有轴先回到待机点,轴2、轴1 动作到P1,,轴4动作至P3
/// 入库。。所有轴先回到待机点,轴2、轴1 动作到P1, 托架后退
/// </summary>
SI_03_ReturnHome = 203,
/// <summary>
/// 入库。。压紧物品(有压紧轴的才需要此步骤),轴4( 压紧) 至P3(压紧前点)
/// </summary>
SI_04_CompressWare = 204,
///// <summary>
///// 入库。。压紧物品(有压紧轴的才需要此步骤),轴4( 压紧) 至P3(压紧前点)
///// </summary>
//SI_04_CompressWare = 204,
/// <summary>
/// 入库。。叉子进入入料口,轴3( 叉子) 至P2( 进料口取料点)
/// </summary>
SI_05_DeviceToDoor = 205,
/// <summary>
/// 入库。。把物品放入叉子上,轴2( 上下) 至P7( 进料口取料缓冲点),压紧物品(有压紧轴的才需要此步骤),轴4( 压紧) 至P2(压紧点)
/// 入库。。把物品放入叉子上,轴2( 上下) 至P7( 进料口取料缓冲点)
/// </summary>
SI_06_DoorWarToDevice = 206,
......@@ -281,10 +281,10 @@ namespace OnlineStore.DeviceLibrary
/// 入库。。叉子 从入料口抽出,轴3( 叉子) 至P1( 待机点)
/// </summary>
SI_07_DeviceBackFromDoor = 207,
/// <summary>
/// 入库。。,定位气缸伸出 (有压紧轴的不需要此步骤)
/// </summary>
SI_08_LocationCylinder_Up = 208,
///// <summary>
///// 入库。。,定位气缸伸出 (有压紧轴的不需要此步骤)
///// </summary>
//SI_08_LocationCylinder_Up = 208,
/// <summary>
/// 入库。。移动到库位点,轴1( 转盘) 至P2( 库位点)轴2(上下) 至P3(库位入库前点)
/// </summary>
......@@ -292,13 +292,13 @@ namespace OnlineStore.DeviceLibrary
/// <summary>
/// 入库。。定位气缸退回 (有压紧轴的不需要此步骤)
/// </summary>
SI_10_LocationCylinder_Down = 210,
// SI_10_LocationCylinder_Down = 210,
/// <summary>
/// 入库。。叉子进入库位中,轴3( 叉子) 至P3(库位取放料点)
/// 入库。。叉子进入库位中, 进出轴至P4(库位取放料点)
/// </summary>
SI_11_DeviceToBag = 211,
/// <summary>
/// 入库。。放下物品,轴2( 上下) 至P4( 库位入料缓冲点)轴4( 压紧) 至P3( 压紧前点)
/// 入库。。放下物品,轴2( 上下) 至P4( 库位入料缓冲点)
/// </summary>
SI_12_PutWareToBag = 212,
/// <summary>
......
......@@ -507,7 +507,20 @@ namespace OnlineStore.LoadCSVLibrary
Config.UpDown_Axis.DefaultPosition = Config.UpDownAxis_DoorO_P1;
}
private List<string> HumpPortList = null;
public List<string> GetHumpPortList()
{
if (HumpPortList == null)
{
HumpPortList = new List<string>();
string[] arrayList = Humiture_Port.Split(';');
foreach (string str in arrayList)
{
HumpPortList.Add(str.Trim().ToUpper());
}
}
return HumpPortList;
}
private Dictionary<string, ushort> DILengthMap = null;
private Dictionary<string, ushort> DOLengthMap = null;
public ushort GetDILength(string ip)
......
支持 Markdown 格式
你添加了 0 到此讨论。请谨慎行事。
Finish editing this message first!