初步界面测试
This commit is contained in:
parent
fabc7606e7
commit
2a6019bfbd
@ -71,38 +71,45 @@ namespace DH.Commons.Enums
|
|||||||
public enum EnumPLCOutputIO
|
public enum EnumPLCOutputIO
|
||||||
{
|
{
|
||||||
转盘方向=0,
|
转盘方向=0,
|
||||||
转盘速度=1,
|
转盘速度,
|
||||||
转盘使能=2,
|
转盘使能,
|
||||||
转盘启动=3,
|
转盘启动,
|
||||||
转盘清料=4,
|
转盘清料,
|
||||||
指示灯绿=5,
|
指示灯绿,
|
||||||
指示灯黄=6,
|
指示灯黄,
|
||||||
指示灯红=7,
|
指示灯红,
|
||||||
蜂鸣器=8,
|
蜂鸣器,
|
||||||
振动盘=9,
|
振动盘,
|
||||||
皮带=10,
|
皮带,
|
||||||
工位1=11,
|
工位1,
|
||||||
工位2=12,
|
工位2,
|
||||||
工位3=13,
|
工位3,
|
||||||
工位4=14,
|
工位4,
|
||||||
工位5=15,
|
工位5,
|
||||||
工位6 = 16,
|
工位6 ,
|
||||||
工位7 = 17,
|
工位7 ,
|
||||||
工位8 = 18,
|
工位8 ,
|
||||||
工位9 = 19,
|
工位9 ,
|
||||||
工位10 = 20,
|
工位10 ,
|
||||||
OK料盒 =21,
|
OK料盒 ,
|
||||||
NG料盒=22,
|
NG料盒,
|
||||||
OK吹气时间=23,
|
OK吹气时间,
|
||||||
NG吹气时间=24,
|
NG吹气时间,
|
||||||
产品计数=25,
|
产品计数,
|
||||||
计数清零=26,
|
计数清零,
|
||||||
工件最小值=27,
|
工件最小值,
|
||||||
工具最大值=28,
|
工件最大值,
|
||||||
启用心跳=29,
|
启用心跳,
|
||||||
心跳地址=30,
|
心跳地址,
|
||||||
挡料电机回原点,
|
挡料电机回原点,
|
||||||
挡料电机回原点速度,
|
挡料电机回原点速度,
|
||||||
|
挡料电机速度,
|
||||||
|
挡料电机顺时针,
|
||||||
|
挡料电机逆时针,
|
||||||
|
挡料电机位置,
|
||||||
|
OK脉冲,
|
||||||
|
NG脉冲,
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -13,6 +13,7 @@ using DH.Commons.Enums;
|
|||||||
using HslCommunication;
|
using HslCommunication;
|
||||||
using HslCommunication.Enthernet;
|
using HslCommunication.Enthernet;
|
||||||
using HslCommunication.Profinet.XINJE;
|
using HslCommunication.Profinet.XINJE;
|
||||||
|
using OpenCvSharp;
|
||||||
|
|
||||||
namespace DH.Devices.PLC
|
namespace DH.Devices.PLC
|
||||||
{
|
{
|
||||||
@ -59,7 +60,7 @@ namespace DH.Devices.PLC
|
|||||||
TcpNet.Write("M122", true);
|
TcpNet.Write("M122", true);
|
||||||
MonitorPieces();
|
MonitorPieces();
|
||||||
TurntableStop();
|
TurntableStop();
|
||||||
|
PrepareMotion();//心跳监听
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
@ -440,6 +441,22 @@ namespace DH.Devices.PLC
|
|||||||
|
|
||||||
OnNewPieces?.Invoke(axisIndex, pieceNumber);
|
OnNewPieces?.Invoke(axisIndex, pieceNumber);
|
||||||
});
|
});
|
||||||
|
}
|
||||||
|
public async Task HeartbeatAsync1()
|
||||||
|
{
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
while (Connected)
|
||||||
|
{
|
||||||
|
PLCItem pLCItem = PLCItemList.FirstOrDefault(u => u.Name == "心跳地址");
|
||||||
|
if (pLCItem == null)
|
||||||
|
return;
|
||||||
|
string HeartbeatAddress = pLCItem.Type + pLCItem.Address;
|
||||||
|
TcpNet.Write(HeartbeatAddress, true);
|
||||||
|
await Task.Delay(900); // 非阻塞,等待1秒
|
||||||
|
}
|
||||||
}
|
}
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 入料监听
|
/// 入料监听
|
||||||
@ -451,6 +468,7 @@ namespace DH.Devices.PLC
|
|||||||
PLCItem pLCItem= PLCItemList.FirstOrDefault(u => u.Name == "产品计数");
|
PLCItem pLCItem= PLCItemList.FirstOrDefault(u => u.Name == "产品计数");
|
||||||
if (pLCItem == null)
|
if (pLCItem == null)
|
||||||
return;
|
return;
|
||||||
|
string Count = pLCItem.Type + pLCItem.Address;
|
||||||
DateTime startTime = DateTime.Now;
|
DateTime startTime = DateTime.Now;
|
||||||
DateTime endTime = startTime;
|
DateTime endTime = startTime;
|
||||||
TimeSpan timeSpan = endTime - startTime;
|
TimeSpan timeSpan = endTime - startTime;
|
||||||
@ -462,7 +480,8 @@ namespace DH.Devices.PLC
|
|||||||
uint tmpPieceNumber = 0;
|
uint tmpPieceNumber = 0;
|
||||||
sw.Start();
|
sw.Start();
|
||||||
|
|
||||||
var ret = TcpNet.ReadUInt16("D1016");
|
// var ret = TcpNet.ReadUInt16("D1016");
|
||||||
|
var ret = TcpNet.ReadUInt16(Count);
|
||||||
|
|
||||||
sw.Stop();
|
sw.Stop();
|
||||||
if (ret.IsSuccess)
|
if (ret.IsSuccess)
|
||||||
@ -504,51 +523,539 @@ namespace DH.Devices.PLC
|
|||||||
/// <summary>
|
/// <summary>
|
||||||
/// 转盘开启操作
|
/// 转盘开启操作
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public void TurntableOpen(int speed, bool Direction)
|
public void TurntableOpen()
|
||||||
{
|
{
|
||||||
WriteBool("M122", true);
|
PLCItem pLCItem = PLCItemList.FirstOrDefault(u => u.Name == "计数清零");
|
||||||
|
if (pLCItem == null)
|
||||||
|
return;
|
||||||
|
string CountToZero = pLCItem.Type + pLCItem.Address;
|
||||||
|
PLCItem DiskSpeedItem = PLCItemList.FirstOrDefault(u => u.Name == "转盘速度");
|
||||||
|
if (DiskSpeedItem == null)
|
||||||
|
return;
|
||||||
|
string diskSpeedadress = DiskSpeedItem.Type + DiskSpeedItem.Address;
|
||||||
|
int diskSpeedValue= Convert.ToInt32( DiskSpeedItem.Value);
|
||||||
|
PLCItem DiskDirectionItem = PLCItemList.FirstOrDefault(u => u.Name == "转盘方向");
|
||||||
|
if (DiskDirectionItem == null)
|
||||||
|
return;
|
||||||
|
string diskDirectionadress = DiskDirectionItem.Type + DiskDirectionItem.Address;
|
||||||
|
bool Direction =Convert.ToBoolean( DiskDirectionItem.Value);
|
||||||
|
PLCItem DiskOpenItem = PLCItemList.FirstOrDefault(u => u.Name == "转盘使能");
|
||||||
|
if (DiskOpenItem == null)
|
||||||
|
return;
|
||||||
|
string diskopenadress = DiskOpenItem.Type + DiskOpenItem.Address;
|
||||||
|
PLCItem DiskRunItem = PLCItemList.FirstOrDefault(u => u.Name == "转盘启动");
|
||||||
|
if (DiskRunItem == null)
|
||||||
|
return;
|
||||||
|
string diskadress = DiskRunItem.Type + DiskRunItem.Address;
|
||||||
|
|
||||||
|
|
||||||
|
WriteBool(CountToZero, true);
|
||||||
Thread.Sleep(10);
|
Thread.Sleep(10);
|
||||||
WriteBool("M10", false);
|
WriteBool("M10", false);
|
||||||
Thread.Sleep(10);
|
Thread.Sleep(10);
|
||||||
//速度
|
//速度
|
||||||
TcpNet.Write("HD10", (ushort)speed);
|
TcpNet.Write(diskSpeedadress, (ushort)diskSpeedValue);
|
||||||
Thread.Sleep(10);
|
Thread.Sleep(10);
|
||||||
//方向
|
//方向
|
||||||
WriteBool("M1", Direction);
|
WriteBool(diskDirectionadress, Direction);
|
||||||
Thread.Sleep(10);
|
Thread.Sleep(10);
|
||||||
//使能
|
//使能
|
||||||
WriteBool("M2", true);
|
WriteBool(diskopenadress, true);
|
||||||
Thread.Sleep(10);
|
Thread.Sleep(10);
|
||||||
//启动
|
//启动
|
||||||
WriteBool("M0", true);
|
WriteBool(diskadress, true);
|
||||||
|
|
||||||
|
|
||||||
|
//WriteBool("M122", true);
|
||||||
|
//Thread.Sleep(10);
|
||||||
|
//WriteBool("M10", false);
|
||||||
|
//Thread.Sleep(10);
|
||||||
|
////速度
|
||||||
|
//TcpNet.Write("HD10", (ushort)10000);
|
||||||
|
//Thread.Sleep(10);
|
||||||
|
////方向
|
||||||
|
//WriteBool("M1", Direction);
|
||||||
|
//Thread.Sleep(10);
|
||||||
|
////使能
|
||||||
|
//WriteBool("M2", true);
|
||||||
|
//Thread.Sleep(10);
|
||||||
|
////启动
|
||||||
|
//WriteBool("M0", true);
|
||||||
Thread.Sleep(10);
|
Thread.Sleep(10);
|
||||||
// _mainMotion.CurrentState = DeviceState.DSOpen;
|
// _mainMotion.CurrentState = DeviceState.DSOpen;
|
||||||
piecesCount = 0;
|
piecesCount = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 转盘停止操作
|
/// 转盘停止操作
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public void TurntableStop()
|
public void TurntableStop()
|
||||||
{
|
{
|
||||||
WriteBool("M122", true);
|
PLCItem pLCItem = PLCItemList.FirstOrDefault(u => u.Name == "计数清零");
|
||||||
|
if (pLCItem == null)
|
||||||
|
return;
|
||||||
|
string CountToZero = pLCItem.Type + pLCItem.Address;
|
||||||
|
PLCItem DiskRunItem = PLCItemList.FirstOrDefault(u => u.Name == "转盘启动");
|
||||||
|
if (DiskRunItem == null)
|
||||||
|
return;
|
||||||
|
string diskadress = DiskRunItem.Type + DiskRunItem.Address;
|
||||||
|
PLCItem DiskOpenItem = PLCItemList.FirstOrDefault(u => u.Name == "转盘使能");
|
||||||
|
if (DiskOpenItem == null)
|
||||||
|
return;
|
||||||
|
string diskopenadress = DiskOpenItem.Type + DiskOpenItem.Address;
|
||||||
|
|
||||||
|
WriteBool(CountToZero, true);
|
||||||
Thread.Sleep(50);
|
Thread.Sleep(50);
|
||||||
WriteBool("M0", false);
|
WriteBool(diskadress, false);
|
||||||
Thread.Sleep(50);
|
Thread.Sleep(50);
|
||||||
WriteBool("M2", false);
|
WriteBool(diskopenadress, false);
|
||||||
Thread.Sleep(50);
|
Thread.Sleep(50);
|
||||||
WriteBool("M50", false);
|
WriteBool("M10", false);
|
||||||
|
|
||||||
|
//WriteBool("M122", true);
|
||||||
|
//Thread.Sleep(50);
|
||||||
|
//WriteBool("M0", false);
|
||||||
|
//Thread.Sleep(50);
|
||||||
|
//WriteBool("M2", false);
|
||||||
|
//Thread.Sleep(50);
|
||||||
|
//WriteBool("M50", false);
|
||||||
piecesCount = 0;
|
piecesCount = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void PrepareMotion()
|
||||||
|
{
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
//心跳
|
||||||
|
//if (X018PLCConfig.Heartbeat)
|
||||||
|
//{
|
||||||
|
|
||||||
|
Task.Run(async () => await HeartbeatAsync1());
|
||||||
|
//}
|
||||||
|
|
||||||
|
////写入工件最大值、最小值
|
||||||
|
ProjectValue();
|
||||||
|
|
||||||
|
|
||||||
|
////写入工位脉冲
|
||||||
|
Workstation1Pulse();
|
||||||
|
Workstation2Pulse();
|
||||||
|
Workstation3Pulse();
|
||||||
|
Workstation4Pulse();
|
||||||
|
Workstation5Pulse();
|
||||||
|
|
||||||
|
////写入吹气时间
|
||||||
|
ChuiQiTime();
|
||||||
|
|
||||||
|
|
||||||
|
////写入吹气脉冲
|
||||||
|
OKPulse();
|
||||||
|
NGPulse();
|
||||||
|
//if (_GC01Driver == null)
|
||||||
|
//{
|
||||||
|
// _GC01Driver = DeviceCollection.FirstOrDefault(u => u is GC01Driver) as GC01Driver;
|
||||||
|
//}
|
||||||
|
//if (_GC01Driver == null)
|
||||||
|
//{
|
||||||
|
// throw new ProcessException($"未能获取激光位移传感器驱动");
|
||||||
|
//}
|
||||||
|
//if (_vibrationDriver == null)
|
||||||
|
//{
|
||||||
|
// _vibrationDriver = DeviceCollection.FirstOrDefault(u => u is JYDAMDriver) as JYDAMDriver;
|
||||||
|
//}
|
||||||
|
//if (_vibrationDriver == null)
|
||||||
|
//{
|
||||||
|
// throw new ProcessException($"未能获取振动盘控制器驱动");
|
||||||
|
//}
|
||||||
|
|
||||||
|
// ResetTimer = new Timer(FullResetProcessExcute, null, -1, -1);
|
||||||
|
|
||||||
|
//feedingProductTimer = new Timer(FeedingProductTriggerExcute, null, -1, -1);
|
||||||
|
//feedingProductTimerTimer = new Timer(UpdateFeedingProductTrigger, null, -1, -1);
|
||||||
|
|
||||||
|
//_mainMotion.OnAxisPositionChanged -= MainMotion_OnAxisPositionChanged;
|
||||||
|
//_mainMotion.OnAxisPositionChanged += MainMotion_OnAxisPositionChanged;
|
||||||
|
|
||||||
|
//_mainMotion.OnCapturePositionChanged -= MainMotion_OnCapturePositionChanged;
|
||||||
|
//_mainMotion.OnCapturePositionChanged += MainMotion_OnCapturePositionChanged;
|
||||||
|
|
||||||
|
// _mainMotion.OnNewPieces -= MainMotion_NewPieces;
|
||||||
|
// _mainMotion.OnNewPieces += MainMotion_NewPieces;
|
||||||
|
|
||||||
|
//_mainMotion.OnAlarmVibrationDisk -= MainMotion_AlarmVibrationDisk;
|
||||||
|
//_mainMotion.OnAlarmVibrationDisk += MainMotion_AlarmVibrationDisk;
|
||||||
|
// PrepareLightIndexes();
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 挡料电机操作
|
||||||
|
/// true: 顺时针
|
||||||
|
/// False: 逆时针
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="u"></param>
|
||||||
|
public void FeedingMotor( bool direction)
|
||||||
|
{
|
||||||
|
|
||||||
|
|
||||||
|
// 设置最大等待时间,假设为 3 秒
|
||||||
|
int timeout = 3000;
|
||||||
|
int elapsedTime = 0;
|
||||||
|
int checkInterval = 100; // 每次检查等待 100ms
|
||||||
|
|
||||||
|
PLCItem pLCItem = PLCItemList.FirstOrDefault(u => u.Name == "挡料电机回原点");
|
||||||
|
if (pLCItem == null)
|
||||||
|
return;
|
||||||
|
PLCItem zerospeeditem = PLCItemList.FirstOrDefault(u => u.Name == "挡料电机回原点速度");
|
||||||
|
if (zerospeeditem == null)
|
||||||
|
return;
|
||||||
|
|
||||||
|
PLCItem CunSpeed = PLCItemList.FirstOrDefault(u => u.Name == "挡料电机速度");
|
||||||
|
if (CunSpeed == null)
|
||||||
|
return;
|
||||||
|
|
||||||
|
PLCItem CunClockwiseItem = PLCItemList.FirstOrDefault(u => u.Name == "挡料电机顺时针");
|
||||||
|
if (CunClockwiseItem == null)
|
||||||
|
return;
|
||||||
|
|
||||||
|
PLCItem CunCounterclockwiseItem = PLCItemList.FirstOrDefault(u => u.Name == "挡料电机逆时针");
|
||||||
|
if (CunCounterclockwiseItem == null)
|
||||||
|
return;
|
||||||
|
|
||||||
|
PLCItem CunPosItem = PLCItemList.FirstOrDefault(u => u.Name == "挡料电机位置");
|
||||||
|
if (CunPosItem == null)
|
||||||
|
return;
|
||||||
|
|
||||||
|
string CunToZero = pLCItem.Type + pLCItem.Address;
|
||||||
|
string CunToZeroSpeed = zerospeeditem.Type + zerospeeditem.Address;
|
||||||
|
string CunSpeedadress = CunSpeed.Type + CunSpeed.Address;
|
||||||
|
string CunClockwise = CunClockwiseItem.Type + CunClockwiseItem.Address;
|
||||||
|
string CunCounterclockwise = CunCounterclockwiseItem.Type + CunCounterclockwiseItem.Address;
|
||||||
|
string CunPos = CunPosItem.Type + CunPosItem.Address;
|
||||||
|
short zerospeed = (short)Convert.ToInt32(zerospeeditem.Value);
|
||||||
|
short cunSpeed = (short)Convert.ToInt32(CunSpeed.Value);
|
||||||
|
short u = (short)Convert.ToInt32(CunPosItem.Value);
|
||||||
|
// WriteBool(CountToZero, true);
|
||||||
|
|
||||||
|
// 检查是否不在原点,如果不在,则回原点
|
||||||
|
if (!ReadBool(CunToZero))
|
||||||
|
{
|
||||||
|
WriteShort(CunToZeroSpeed, (short)zerospeed); // 速度
|
||||||
|
Thread.Sleep(10);
|
||||||
|
// 发送回原点指令
|
||||||
|
WriteBool(CunToZero, true);
|
||||||
|
Thread.Sleep(1000); // 给设备一些时间响应
|
||||||
|
|
||||||
|
// 等待回到原点
|
||||||
|
while (!ReadBool(CunToZero))
|
||||||
|
{
|
||||||
|
if (elapsedTime >= timeout)
|
||||||
|
{
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
Thread.Sleep(checkInterval);
|
||||||
|
elapsedTime += checkInterval;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 无论是刚回到原点还是已经在原点,执行目标位置、速度和方向设置
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
WriteShort(CunSpeedadress, (short)cunSpeed);
|
||||||
|
Thread.Sleep(2000);
|
||||||
|
string dir = string.Empty;
|
||||||
|
if (direction)
|
||||||
|
{
|
||||||
|
WriteBool(CunClockwise, true); // 顺时针转动
|
||||||
|
dir = "顺时针";
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
WriteBool(CunCounterclockwise, true); // 逆时针转动
|
||||||
|
dir = "逆时针";
|
||||||
|
}
|
||||||
|
Thread.Sleep(10);
|
||||||
|
WriteShort(CunPos, (short)u); // 目标位置
|
||||||
|
Thread.Sleep(2000);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 计数清零
|
/// 计数清零
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public void CountToZero()
|
public void CountToZero()
|
||||||
{
|
{
|
||||||
WriteBool("M120", true);
|
PLCItem pLCItem = PLCItemList.FirstOrDefault(u => u.Name == "计数清零");
|
||||||
|
if (pLCItem == null)
|
||||||
|
return;
|
||||||
|
string CountToZero = pLCItem.Type + pLCItem.Address;
|
||||||
|
WriteBool(CountToZero, true);
|
||||||
|
Thread.Sleep(10);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void RedLight(bool b)
|
||||||
|
{
|
||||||
|
PLCItem pLCItem = PLCItemList.FirstOrDefault(u => u.Name == "指示灯红");
|
||||||
|
if (pLCItem == null)
|
||||||
|
return;
|
||||||
|
string RedLight = pLCItem.Type + pLCItem.Address;
|
||||||
|
WriteBool(RedLight, b);
|
||||||
|
Thread.Sleep(10);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void GreenLight(bool b)
|
||||||
|
{
|
||||||
|
PLCItem pLCItem = PLCItemList.FirstOrDefault(u => u.Name == "指示灯绿");
|
||||||
|
if (pLCItem == null)
|
||||||
|
return;
|
||||||
|
string Light = pLCItem.Type + pLCItem.Address;
|
||||||
|
WriteBool(Light, b);
|
||||||
|
// WriteBool(IIConfig.GreenLight, b);
|
||||||
|
Thread.Sleep(10);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void YellowLight(bool b)
|
||||||
|
{
|
||||||
|
PLCItem pLCItem = PLCItemList.FirstOrDefault(u => u.Name == "指示灯黄");
|
||||||
|
if (pLCItem == null)
|
||||||
|
return;
|
||||||
|
string Light = pLCItem.Type + pLCItem.Address;
|
||||||
|
WriteBool(Light, b);
|
||||||
|
Thread.Sleep(10);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void Buzzer(bool b)
|
||||||
|
{
|
||||||
|
PLCItem pLCItem = PLCItemList.FirstOrDefault(u => u.Name == "蜂鸣器");
|
||||||
|
if (pLCItem == null)
|
||||||
|
return;
|
||||||
|
string Light = pLCItem.Type + pLCItem.Address;
|
||||||
|
WriteBool(Light, b);
|
||||||
|
Thread.Sleep(10);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void Belt(bool b)
|
||||||
|
{
|
||||||
|
PLCItem pLCItem = PLCItemList.FirstOrDefault(u => u.Name == "皮带");
|
||||||
|
if (pLCItem == null)
|
||||||
|
return;
|
||||||
|
string Light = pLCItem.Type + pLCItem.Address;
|
||||||
|
WriteBool(Light, b);
|
||||||
|
Thread.Sleep(10);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public void Workstation1Pulse()
|
||||||
|
{
|
||||||
|
PLCItem pLCItem = PLCItemList.FirstOrDefault(u => u.Name == "工位1");
|
||||||
|
if (pLCItem == null)
|
||||||
|
return;
|
||||||
|
string Workstation1Pulse = pLCItem.Type + pLCItem.Address;
|
||||||
|
int Pulse=Convert.ToInt32(pLCItem.Value);
|
||||||
|
|
||||||
|
string result = Regex.Replace(Workstation1Pulse, @"\D", "");
|
||||||
|
int r = Convert.ToInt32(result) + 1;
|
||||||
|
result = "HD" + r.ToString();
|
||||||
|
short high = (short)(Pulse >> 16); // 高 16 位
|
||||||
|
short low = (short)(Pulse & 0xFFFF); // 低 16 位
|
||||||
|
WriteShort(result, high);
|
||||||
|
Thread.Sleep(10);
|
||||||
|
WriteShort(Workstation1Pulse, low);
|
||||||
|
Thread.Sleep(10);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void Workstation2Pulse()
|
||||||
|
{
|
||||||
|
PLCItem pLCItem = PLCItemList.FirstOrDefault(u => u.Name == "工位2");
|
||||||
|
if (pLCItem == null)
|
||||||
|
return;
|
||||||
|
string Workstation1Pulse = pLCItem.Type + pLCItem.Address;
|
||||||
|
int Pulse=Convert.ToInt32(pLCItem.Value);
|
||||||
|
string result = Regex.Replace(Workstation1Pulse, @"\D", "");
|
||||||
|
int r = Convert.ToInt32(result) + 1;
|
||||||
|
result = "HD" + r.ToString();
|
||||||
|
short high = (short)(Pulse >> 16); // 高 16 位
|
||||||
|
short low = (short)(Pulse & 0xFFFF); // 低 16 位
|
||||||
|
WriteShort(result, high);
|
||||||
|
Thread.Sleep(10);
|
||||||
|
WriteShort(Workstation1Pulse, low);
|
||||||
|
Thread.Sleep(10);
|
||||||
|
}
|
||||||
|
public void Workstation3Pulse()
|
||||||
|
{
|
||||||
|
PLCItem pLCItem = PLCItemList.FirstOrDefault(u => u.Name == "工位3");
|
||||||
|
if (pLCItem == null)
|
||||||
|
return;
|
||||||
|
string Workstation1Pulse = pLCItem.Type + pLCItem.Address;
|
||||||
|
int Pulse = Convert.ToInt32(pLCItem.Value);
|
||||||
|
|
||||||
|
string result = Regex.Replace(Workstation1Pulse, @"\D", "");
|
||||||
|
int r = Convert.ToInt32(result) + 1;
|
||||||
|
result = "HD" + r.ToString();
|
||||||
|
short high = (short)(Pulse >> 16); // 高 16 位
|
||||||
|
short low = (short)(Pulse & 0xFFFF); // 低 16 位
|
||||||
|
WriteShort(result, high);
|
||||||
|
Thread.Sleep(10);
|
||||||
|
WriteShort(Workstation1Pulse, low);
|
||||||
|
Thread.Sleep(10);
|
||||||
|
}
|
||||||
|
public void Workstation4Pulse()
|
||||||
|
{
|
||||||
|
PLCItem pLCItem = PLCItemList.FirstOrDefault(u => u.Name == "工位4");
|
||||||
|
if (pLCItem == null)
|
||||||
|
return;
|
||||||
|
string Workstation1Pulse = pLCItem.Type + pLCItem.Address;
|
||||||
|
int Pulse = Convert.ToInt32(pLCItem.Value);
|
||||||
|
string result = Regex.Replace(Workstation1Pulse, @"\D", "");
|
||||||
|
int r = Convert.ToInt32(result) + 1;
|
||||||
|
result = "HD" + r.ToString();
|
||||||
|
short high = (short)(Pulse >> 16); // 高 16 位
|
||||||
|
short low = (short)(Pulse & 0xFFFF); // 低 16 位
|
||||||
|
WriteShort(result, high);
|
||||||
|
Thread.Sleep(10);
|
||||||
|
WriteShort(Workstation1Pulse, low);
|
||||||
|
Thread.Sleep(10);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void Workstation5Pulse()
|
||||||
|
{
|
||||||
|
PLCItem pLCItem = PLCItemList.FirstOrDefault(u => u.Name == "工位5");
|
||||||
|
if (pLCItem == null)
|
||||||
|
return;
|
||||||
|
|
||||||
|
string Workstation1Pulse = pLCItem.Type + pLCItem.Address;
|
||||||
|
int Pulse = Convert.ToInt32(pLCItem.Value);
|
||||||
|
string result = Regex.Replace(Workstation1Pulse, @"\D", "");
|
||||||
|
int r = Convert.ToInt32(result) + 1;
|
||||||
|
result = "HD" + r.ToString();
|
||||||
|
short high = (short)(Pulse >> 16); // 高 16 位
|
||||||
|
short low = (short)(Pulse & 0xFFFF); // 低 16 位
|
||||||
|
WriteShort(result, high);
|
||||||
|
Thread.Sleep(10);
|
||||||
|
WriteShort(Workstation1Pulse, low);
|
||||||
|
Thread.Sleep(10);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
public void ProjectValue()
|
||||||
|
{
|
||||||
|
PLCItem pLCItemmax = PLCItemList.FirstOrDefault(u => u.Name == "工件最大值");
|
||||||
|
if (pLCItemmax == null)
|
||||||
|
return;
|
||||||
|
PLCItem pLCItemmin = PLCItemList.FirstOrDefault(u => u.Name == "工件最小值");
|
||||||
|
if (pLCItemmin == null)
|
||||||
|
return;
|
||||||
|
int productMax =Convert.ToInt32( pLCItemmax.Value);
|
||||||
|
int productMin = Convert.ToInt32( pLCItemmin.Value);
|
||||||
|
|
||||||
|
string ProductMax = pLCItemmax.Type + pLCItemmax.Address;
|
||||||
|
string ProductMin = pLCItemmin.Type + pLCItemmin.Address;
|
||||||
|
WriteShort(ProductMax, (short)productMax);
|
||||||
|
Thread.Sleep(10);
|
||||||
|
WriteShort(ProductMin, (short)productMin);
|
||||||
|
Thread.Sleep(10);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void OKPulse()
|
||||||
|
{
|
||||||
|
|
||||||
|
PLCItem pLCItem = PLCItemList.FirstOrDefault(u => u.Name == "OK脉冲");
|
||||||
|
if (pLCItem == null)
|
||||||
|
return;
|
||||||
|
|
||||||
|
string OKPulse = pLCItem.Type + pLCItem.Address;
|
||||||
|
int Pulse =Convert.ToInt32( pLCItem.Value);
|
||||||
|
string result = Regex.Replace(OKPulse, @"\D", "");
|
||||||
|
int r = Convert.ToInt32(result) + 1;
|
||||||
|
result = "HD" + r.ToString();
|
||||||
|
short high = (short)(Pulse >> 16); // 高 16 位
|
||||||
|
short low = (short)(Pulse & 0xFFFF); // 低 16 位
|
||||||
|
WriteShort(result, high);
|
||||||
|
Thread.Sleep(10);
|
||||||
|
WriteShort(OKPulse, low);
|
||||||
|
Thread.Sleep(10);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void NGPulse()
|
||||||
|
{
|
||||||
|
PLCItem pLCItem = PLCItemList.FirstOrDefault(u => u.Name == "NG脉冲");
|
||||||
|
if (pLCItem == null)
|
||||||
|
return;
|
||||||
|
|
||||||
|
string NGPulse = pLCItem.Type + pLCItem.Address;
|
||||||
|
int Pulse=Convert.ToInt32(pLCItem.Value);
|
||||||
|
string result = Regex.Replace(NGPulse, @"\D", "");
|
||||||
|
int r = Convert.ToInt32(result) + 1;
|
||||||
|
result = "HD" + r.ToString();
|
||||||
|
short high = (short)(Pulse >> 16); // 高 16 位
|
||||||
|
short low = (short)(Pulse & 0xFFFF); // 低 16 位
|
||||||
|
WriteShort(result, high);
|
||||||
|
Thread.Sleep(10);
|
||||||
|
WriteShort(NGPulse, low);
|
||||||
|
Thread.Sleep(10);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public void TurnClear(bool b)
|
||||||
|
{
|
||||||
|
PLCItem pLCItem = PLCItemList.FirstOrDefault(u => u.Name == "转盘清料");
|
||||||
|
if (pLCItem == null)
|
||||||
|
return;
|
||||||
|
|
||||||
|
string TurnClear = pLCItem.Type + pLCItem.Address;
|
||||||
|
|
||||||
|
WriteBool(TurnClear, b);
|
||||||
|
Thread.Sleep(10);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void OpenHeartbeat(bool v)
|
||||||
|
{
|
||||||
|
PLCItem pLCItem = PLCItemList.FirstOrDefault(u => u.Name == "心跳功能");
|
||||||
|
if (pLCItem == null)
|
||||||
|
return;
|
||||||
|
|
||||||
|
string Heartbeat = pLCItem.Type + pLCItem.Address;
|
||||||
|
|
||||||
|
WriteBool(Heartbeat, v);
|
||||||
|
Thread.Sleep(10);
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public void Vibratory(bool v)
|
||||||
|
{
|
||||||
|
PLCItem pLCItem = PLCItemList.FirstOrDefault(u => u.Name == "振动盘");
|
||||||
|
if (pLCItem == null)
|
||||||
|
return;
|
||||||
|
|
||||||
|
|
||||||
|
string Vibratory = pLCItem.Type + pLCItem.Address;
|
||||||
|
WriteBool(Vibratory, v);
|
||||||
|
Thread.Sleep(10);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public void ChuiQiTime()
|
||||||
|
{
|
||||||
|
PLCItem pLCItem = PLCItemList.FirstOrDefault(u => u.Name == "吹气时间");
|
||||||
|
if (pLCItem == null)
|
||||||
|
return;
|
||||||
|
|
||||||
|
|
||||||
|
string ChuiQiTime = pLCItem.Type + pLCItem.Address;
|
||||||
|
short time = (short)Convert.ToInt32(pLCItem.Value);
|
||||||
|
WriteShort(ChuiQiTime, time);
|
||||||
|
Thread.Sleep(10);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
62
DHSoftware/MainWindow.Designer.cs
generated
62
DHSoftware/MainWindow.Designer.cs
generated
@ -30,7 +30,6 @@
|
|||||||
{
|
{
|
||||||
AntdUI.Tabs.StyleCard styleCard1 = new AntdUI.Tabs.StyleCard();
|
AntdUI.Tabs.StyleCard styleCard1 = new AntdUI.Tabs.StyleCard();
|
||||||
AntdUI.Tabs.StyleCard styleCard2 = new AntdUI.Tabs.StyleCard();
|
AntdUI.Tabs.StyleCard styleCard2 = new AntdUI.Tabs.StyleCard();
|
||||||
AntdUI.Tabs.StyleCard styleCard3 = new AntdUI.Tabs.StyleCard();
|
|
||||||
AntdUI.SegmentedItem segmentedItem1 = new AntdUI.SegmentedItem();
|
AntdUI.SegmentedItem segmentedItem1 = new AntdUI.SegmentedItem();
|
||||||
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(MainWindow));
|
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(MainWindow));
|
||||||
AntdUI.SegmentedItem segmentedItem2 = new AntdUI.SegmentedItem();
|
AntdUI.SegmentedItem segmentedItem2 = new AntdUI.SegmentedItem();
|
||||||
@ -49,9 +48,6 @@
|
|||||||
splitContainer1 = new SplitContainer();
|
splitContainer1 = new SplitContainer();
|
||||||
splitContainer2 = new SplitContainer();
|
splitContainer2 = new SplitContainer();
|
||||||
tabImgDisplay = new AntdUI.Tabs();
|
tabImgDisplay = new AntdUI.Tabs();
|
||||||
tabMain = new AntdUI.TabPage();
|
|
||||||
tabsStas = new AntdUI.Tabs();
|
|
||||||
tabPage3 = new AntdUI.TabPage();
|
|
||||||
richTextBox1 = new RichTextBox();
|
richTextBox1 = new RichTextBox();
|
||||||
tabsConfig = new AntdUI.Tabs();
|
tabsConfig = new AntdUI.Tabs();
|
||||||
tabPage2 = new AntdUI.TabPage();
|
tabPage2 = new AntdUI.TabPage();
|
||||||
@ -76,9 +72,6 @@
|
|||||||
splitContainer2.Panel1.SuspendLayout();
|
splitContainer2.Panel1.SuspendLayout();
|
||||||
splitContainer2.Panel2.SuspendLayout();
|
splitContainer2.Panel2.SuspendLayout();
|
||||||
splitContainer2.SuspendLayout();
|
splitContainer2.SuspendLayout();
|
||||||
tabImgDisplay.SuspendLayout();
|
|
||||||
tabsStas.SuspendLayout();
|
|
||||||
tabPage3.SuspendLayout();
|
|
||||||
tabsConfig.SuspendLayout();
|
tabsConfig.SuspendLayout();
|
||||||
panel1.SuspendLayout();
|
panel1.SuspendLayout();
|
||||||
panel3.SuspendLayout();
|
panel3.SuspendLayout();
|
||||||
@ -130,7 +123,7 @@
|
|||||||
// label1
|
// label1
|
||||||
//
|
//
|
||||||
label1.AutoSize = true;
|
label1.AutoSize = true;
|
||||||
label1.Location = new Point(979, 10);
|
label1.Location = new Point(59, 10);
|
||||||
label1.Name = "label1";
|
label1.Name = "label1";
|
||||||
label1.Size = new Size(64, 21);
|
label1.Size = new Size(64, 21);
|
||||||
label1.TabIndex = 1;
|
label1.TabIndex = 1;
|
||||||
@ -203,7 +196,7 @@
|
|||||||
splitContainer1.Panel2.BackColor = SystemColors.ButtonFace;
|
splitContainer1.Panel2.BackColor = SystemColors.ButtonFace;
|
||||||
splitContainer1.Panel2.Controls.Add(tabsConfig);
|
splitContainer1.Panel2.Controls.Add(tabsConfig);
|
||||||
splitContainer1.Size = new Size(1024, 500);
|
splitContainer1.Size = new Size(1024, 500);
|
||||||
splitContainer1.SplitterDistance = 580;
|
splitContainer1.SplitterDistance = 606;
|
||||||
splitContainer1.SplitterIncrement = 2;
|
splitContainer1.SplitterIncrement = 2;
|
||||||
splitContainer1.SplitterWidth = 10;
|
splitContainer1.SplitterWidth = 10;
|
||||||
splitContainer1.TabIndex = 0;
|
splitContainer1.TabIndex = 0;
|
||||||
@ -221,8 +214,8 @@
|
|||||||
//
|
//
|
||||||
// splitContainer2.Panel2
|
// splitContainer2.Panel2
|
||||||
//
|
//
|
||||||
splitContainer2.Panel2.Controls.Add(tabsStas);
|
splitContainer2.Panel2.Controls.Add(richTextBox1);
|
||||||
splitContainer2.Size = new Size(580, 500);
|
splitContainer2.Size = new Size(606, 500);
|
||||||
splitContainer2.SplitterDistance = 320;
|
splitContainer2.SplitterDistance = 320;
|
||||||
splitContainer2.TabIndex = 0;
|
splitContainer2.TabIndex = 0;
|
||||||
//
|
//
|
||||||
@ -231,46 +224,17 @@
|
|||||||
tabImgDisplay.Dock = DockStyle.Fill;
|
tabImgDisplay.Dock = DockStyle.Fill;
|
||||||
tabImgDisplay.Location = new Point(0, 0);
|
tabImgDisplay.Location = new Point(0, 0);
|
||||||
tabImgDisplay.Name = "tabImgDisplay";
|
tabImgDisplay.Name = "tabImgDisplay";
|
||||||
tabImgDisplay.Pages.Add(tabMain);
|
tabImgDisplay.Size = new Size(606, 320);
|
||||||
tabImgDisplay.Size = new Size(580, 320);
|
|
||||||
tabImgDisplay.Style = styleCard1;
|
tabImgDisplay.Style = styleCard1;
|
||||||
tabImgDisplay.TabIndex = 1;
|
tabImgDisplay.TabIndex = 1;
|
||||||
tabImgDisplay.Text = "tabs1";
|
tabImgDisplay.Text = "tabs1";
|
||||||
//
|
//
|
||||||
// tabMain
|
|
||||||
//
|
|
||||||
tabMain.Location = new Point(3, 28);
|
|
||||||
tabMain.Name = "tabMain";
|
|
||||||
tabMain.Size = new Size(574, 289);
|
|
||||||
tabMain.TabIndex = 0;
|
|
||||||
tabMain.Text = "检测";
|
|
||||||
//
|
|
||||||
// tabsStas
|
|
||||||
//
|
|
||||||
tabsStas.Dock = DockStyle.Fill;
|
|
||||||
tabsStas.Location = new Point(0, 0);
|
|
||||||
tabsStas.Name = "tabsStas";
|
|
||||||
tabsStas.Pages.Add(tabPage3);
|
|
||||||
tabsStas.Size = new Size(580, 176);
|
|
||||||
tabsStas.Style = styleCard2;
|
|
||||||
tabsStas.TabIndex = 3;
|
|
||||||
tabsStas.Text = "tabs3";
|
|
||||||
//
|
|
||||||
// tabPage3
|
|
||||||
//
|
|
||||||
tabPage3.Controls.Add(richTextBox1);
|
|
||||||
tabPage3.Location = new Point(3, 28);
|
|
||||||
tabPage3.Name = "tabPage3";
|
|
||||||
tabPage3.Size = new Size(574, 145);
|
|
||||||
tabPage3.TabIndex = 0;
|
|
||||||
tabPage3.Text = "日志";
|
|
||||||
//
|
|
||||||
// richTextBox1
|
// richTextBox1
|
||||||
//
|
//
|
||||||
richTextBox1.Dock = DockStyle.Fill;
|
richTextBox1.Dock = DockStyle.Fill;
|
||||||
richTextBox1.Location = new Point(0, 0);
|
richTextBox1.Location = new Point(0, 0);
|
||||||
richTextBox1.Name = "richTextBox1";
|
richTextBox1.Name = "richTextBox1";
|
||||||
richTextBox1.Size = new Size(574, 145);
|
richTextBox1.Size = new Size(606, 176);
|
||||||
richTextBox1.TabIndex = 0;
|
richTextBox1.TabIndex = 0;
|
||||||
richTextBox1.Text = "";
|
richTextBox1.Text = "";
|
||||||
//
|
//
|
||||||
@ -280,8 +244,8 @@
|
|||||||
tabsConfig.Location = new Point(0, 0);
|
tabsConfig.Location = new Point(0, 0);
|
||||||
tabsConfig.Name = "tabsConfig";
|
tabsConfig.Name = "tabsConfig";
|
||||||
tabsConfig.Pages.Add(tabPage2);
|
tabsConfig.Pages.Add(tabPage2);
|
||||||
tabsConfig.Size = new Size(434, 500);
|
tabsConfig.Size = new Size(408, 500);
|
||||||
tabsConfig.Style = styleCard3;
|
tabsConfig.Style = styleCard2;
|
||||||
tabsConfig.TabIndex = 2;
|
tabsConfig.TabIndex = 2;
|
||||||
tabsConfig.Text = "tabs2";
|
tabsConfig.Text = "tabs2";
|
||||||
//
|
//
|
||||||
@ -289,7 +253,7 @@
|
|||||||
//
|
//
|
||||||
tabPage2.Location = new Point(3, 28);
|
tabPage2.Location = new Point(3, 28);
|
||||||
tabPage2.Name = "tabPage2";
|
tabPage2.Name = "tabPage2";
|
||||||
tabPage2.Size = new Size(428, 469);
|
tabPage2.Size = new Size(402, 469);
|
||||||
tabPage2.TabIndex = 0;
|
tabPage2.TabIndex = 0;
|
||||||
tabPage2.Text = "配置";
|
tabPage2.Text = "配置";
|
||||||
//
|
//
|
||||||
@ -467,9 +431,6 @@
|
|||||||
splitContainer2.Panel2.ResumeLayout(false);
|
splitContainer2.Panel2.ResumeLayout(false);
|
||||||
((System.ComponentModel.ISupportInitialize)splitContainer2).EndInit();
|
((System.ComponentModel.ISupportInitialize)splitContainer2).EndInit();
|
||||||
splitContainer2.ResumeLayout(false);
|
splitContainer2.ResumeLayout(false);
|
||||||
tabImgDisplay.ResumeLayout(false);
|
|
||||||
tabsStas.ResumeLayout(false);
|
|
||||||
tabPage3.ResumeLayout(false);
|
|
||||||
tabsConfig.ResumeLayout(false);
|
tabsConfig.ResumeLayout(false);
|
||||||
panel1.ResumeLayout(false);
|
panel1.ResumeLayout(false);
|
||||||
panel3.ResumeLayout(false);
|
panel3.ResumeLayout(false);
|
||||||
@ -492,10 +453,6 @@
|
|||||||
private SplitContainer splitContainer1;
|
private SplitContainer splitContainer1;
|
||||||
private SplitContainer splitContainer2;
|
private SplitContainer splitContainer2;
|
||||||
private AntdUI.Tabs tabImgDisplay;
|
private AntdUI.Tabs tabImgDisplay;
|
||||||
private AntdUI.TabPage tabMain;
|
|
||||||
private AntdUI.Tabs tabsStas;
|
|
||||||
private AntdUI.TabPage tabPage3;
|
|
||||||
private RichTextBox richTextBox1;
|
|
||||||
private AntdUI.Tabs tabsConfig;
|
private AntdUI.Tabs tabsConfig;
|
||||||
private AntdUI.TabPage tabPage2;
|
private AntdUI.TabPage tabPage2;
|
||||||
private AntdUI.Label lbName;
|
private AntdUI.Label lbName;
|
||||||
@ -504,5 +461,6 @@
|
|||||||
private AntdUI.Button btnAddProject;
|
private AntdUI.Button btnAddProject;
|
||||||
private AntdUI.Button btnLoadProject;
|
private AntdUI.Button btnLoadProject;
|
||||||
public AntdUI.Select sltProjects;
|
public AntdUI.Select sltProjects;
|
||||||
|
private RichTextBox richTextBox1;
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -176,11 +176,11 @@ namespace DHSoftware
|
|||||||
InitData();
|
InitData();
|
||||||
//绑定事件
|
//绑定事件
|
||||||
BindEventHandler();
|
BindEventHandler();
|
||||||
UserConfigFrm userControlFrm = new UserConfigFrm();
|
//UserConfigFrm userControlFrm = new UserConfigFrm();
|
||||||
|
|
||||||
userControlFrm.Window = this;
|
//userControlFrm.Window = this;
|
||||||
userControlFrm.Dock = DockStyle.Fill;
|
//userControlFrm.Dock = DockStyle.Fill;
|
||||||
tabPage2.Controls.Add(userControlFrm);
|
//tabPage2.Controls.Add(userControlFrm);
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
@ -267,7 +267,7 @@ namespace DHSoftware
|
|||||||
cam.CameraIP = cameraBase.CameraIP;
|
cam.CameraIP = cameraBase.CameraIP;
|
||||||
cam.IsEnabled = cameraBase.IsEnabled;
|
cam.IsEnabled = cameraBase.IsEnabled;
|
||||||
Cameras.Add(cam);
|
Cameras.Add(cam);
|
||||||
//cam.CameraConnect();
|
cam.CameraConnect();
|
||||||
cam.OnHImageOutput += OnCameraHImageOutput;
|
cam.OnHImageOutput += OnCameraHImageOutput;
|
||||||
}
|
}
|
||||||
else if (cameraBase.CamType == EnumCamType.海康hik)
|
else if (cameraBase.CamType == EnumCamType.海康hik)
|
||||||
@ -294,6 +294,7 @@ namespace DHSoftware
|
|||||||
if (plcBase.PLCType == EnumPLCType.信捷XC网口)
|
if (plcBase.PLCType == EnumPLCType.信捷XC网口)
|
||||||
{
|
{
|
||||||
PLC.IP = plcBase.IP;
|
PLC.IP = plcBase.IP;
|
||||||
|
PLC.PLCType = plcBase.PLCType;
|
||||||
PLC.Enable = plcBase.Enable;
|
PLC.Enable = plcBase.Enable;
|
||||||
PLC.PLCName = plcBase.PLCName;
|
PLC.PLCName = plcBase.PLCName;
|
||||||
PLC.PLCItemList = plcBase.PLCItemList;
|
PLC.PLCItemList = plcBase.PLCItemList;
|
||||||
@ -321,8 +322,10 @@ namespace DHSoftware
|
|||||||
detectionConfig.ModelHeight = detection.ModelHeight;
|
detectionConfig.ModelHeight = detection.ModelHeight;
|
||||||
detectionConfig.In_lable_path = detection.In_lable_path;
|
detectionConfig.In_lable_path = detection.In_lable_path;
|
||||||
detectionConfig.IsEnabled = detection.IsEnabled;
|
detectionConfig.IsEnabled = detection.IsEnabled;
|
||||||
detectionConfig.ShowLocation.X = detection.ShowLocation.X;
|
detectionConfig.ShowLocation.X = (i + 1) % 5+ (i + 1) / 5;
|
||||||
detectionConfig.ShowLocation.Y = detection.ShowLocation.Y;
|
// detectionConfig.ShowLocation.X = detection.ShowLocation.X;
|
||||||
|
detectionConfig.ShowLocation.Y = (i + 1) / 5+1;
|
||||||
|
// detectionConfig.ShowLocation.Y = detection.ShowLocation.Y;
|
||||||
DetectionConfigs.Add(detectionConfig);
|
DetectionConfigs.Add(detectionConfig);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -354,6 +357,7 @@ namespace DHSoftware
|
|||||||
//初始化模型 加载模型
|
//初始化模型 加载模型
|
||||||
_visionEngine.Init();
|
_visionEngine.Init();
|
||||||
CtrlVisionRunBase ctrlVisionRun = new CtrlVisionRunBase(_visionEngine);
|
CtrlVisionRunBase ctrlVisionRun = new CtrlVisionRunBase(_visionEngine);
|
||||||
|
ctrlVisionRun.Dock = DockStyle.Fill;
|
||||||
tabImgDisplay.Controls.Add(ctrlVisionRun);
|
tabImgDisplay.Controls.Add(ctrlVisionRun);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -581,10 +585,12 @@ namespace DHSoftware
|
|||||||
PieceCount = 0;
|
PieceCount = 0;
|
||||||
//吹气点位归置
|
//吹气点位归置
|
||||||
currentRegister = 411;
|
currentRegister = 411;
|
||||||
|
|
||||||
if (_PLCConfig?.Enable == true)
|
if (PLC?.Enable == true)
|
||||||
{
|
{
|
||||||
PLC.CountToZero();
|
PLC.CountToZero();
|
||||||
|
PLC.OnNewPieces -= MainMotion_NewPieces;
|
||||||
|
PLC.OnNewPieces += MainMotion_NewPieces;
|
||||||
}
|
}
|
||||||
|
|
||||||
ConfigModel.CameraBaseList.ForEach(d =>
|
ConfigModel.CameraBaseList.ForEach(d =>
|
||||||
@ -691,7 +697,7 @@ namespace DHSoftware
|
|||||||
PLCItem itemSpeed = PLC.PLCItemList.FirstOrDefault(u => u.Name == "转盘速度");
|
PLCItem itemSpeed = PLC.PLCItemList.FirstOrDefault(u => u.Name == "转盘速度");
|
||||||
if (itemSpeed != null)
|
if (itemSpeed != null)
|
||||||
{
|
{
|
||||||
PLC.TurntableOpen(Convert.ToInt32(itemSpeed.Value), true);
|
PLC.TurntableOpen();
|
||||||
}
|
}
|
||||||
|
|
||||||
Thread.Sleep(500);
|
Thread.Sleep(500);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user