Commit 1a0fe5f3 刘韬

优化状态显示

1 个父辈 1eb794b3
......@@ -36,13 +36,13 @@ namespace AutoScanAndLabel
this.退出ToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.tabControl1 = new System.Windows.Forms.TabControl();
this.tabPage1 = new System.Windows.Forms.TabPage();
this.cb_IgnoreGratingSignal = new System.Windows.Forms.CheckBox();
this.cb_IgnoreSafecheck = new System.Windows.Forms.CheckBox();
this.groupBox1 = new System.Windows.Forms.GroupBox();
this.stateView = new System.Windows.Forms.ListView();
this.listView1 = new System.Windows.Forms.ListView();
this.btn_stop = new System.Windows.Forms.Button();
this.btn_run = new System.Windows.Forms.Button();
this.cb_IgnoreGratingSignal = new System.Windows.Forms.CheckBox();
this.menuStrip1.SuspendLayout();
this.tabControl1.SuspendLayout();
this.tabPage1.SuspendLayout();
......@@ -98,10 +98,10 @@ namespace AutoScanAndLabel
| System.Windows.Forms.AnchorStyles.Right)));
this.tabControl1.Controls.Add(this.tabPage1);
this.tabControl1.Font = new System.Drawing.Font("微软雅黑", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
this.tabControl1.Location = new System.Drawing.Point(0, 106);
this.tabControl1.Location = new System.Drawing.Point(0, 90);
this.tabControl1.Name = "tabControl1";
this.tabControl1.SelectedIndex = 0;
this.tabControl1.Size = new System.Drawing.Size(1350, 605);
this.tabControl1.Size = new System.Drawing.Size(1350, 599);
this.tabControl1.TabIndex = 1;
//
// tabPage1
......@@ -111,11 +111,22 @@ namespace AutoScanAndLabel
this.tabPage1.Controls.Add(this.groupBox1);
this.tabPage1.Location = new System.Drawing.Point(4, 30);
this.tabPage1.Name = "tabPage1";
this.tabPage1.Size = new System.Drawing.Size(1342, 571);
this.tabPage1.Size = new System.Drawing.Size(1342, 565);
this.tabPage1.TabIndex = 0;
this.tabPage1.Text = "信息";
this.tabPage1.UseVisualStyleBackColor = true;
//
// cb_IgnoreGratingSignal
//
this.cb_IgnoreGratingSignal.AutoSize = true;
this.cb_IgnoreGratingSignal.Location = new System.Drawing.Point(653, 73);
this.cb_IgnoreGratingSignal.Name = "cb_IgnoreGratingSignal";
this.cb_IgnoreGratingSignal.Size = new System.Drawing.Size(125, 25);
this.cb_IgnoreGratingSignal.TabIndex = 2;
this.cb_IgnoreGratingSignal.Text = "忽略安全光栅";
this.cb_IgnoreGratingSignal.UseVisualStyleBackColor = true;
this.cb_IgnoreGratingSignal.CheckedChanged += new System.EventHandler(this.cb_IgnoreGratingSignal_CheckedChanged);
//
// cb_IgnoreSafecheck
//
this.cb_IgnoreSafecheck.AutoSize = true;
......@@ -132,7 +143,7 @@ namespace AutoScanAndLabel
this.groupBox1.Controls.Add(this.stateView);
this.groupBox1.Location = new System.Drawing.Point(21, 32);
this.groupBox1.Name = "groupBox1";
this.groupBox1.Size = new System.Drawing.Size(598, 225);
this.groupBox1.Size = new System.Drawing.Size(611, 225);
this.groupBox1.TabIndex = 1;
this.groupBox1.TabStop = false;
this.groupBox1.Text = "运行状态";
......@@ -146,7 +157,7 @@ namespace AutoScanAndLabel
this.stateView.Location = new System.Drawing.Point(3, 25);
this.stateView.MultiSelect = false;
this.stateView.Name = "stateView";
this.stateView.Size = new System.Drawing.Size(592, 197);
this.stateView.Size = new System.Drawing.Size(605, 197);
this.stateView.TabIndex = 0;
this.stateView.UseCompatibleStateImageBehavior = false;
//
......@@ -161,14 +172,14 @@ namespace AutoScanAndLabel
this.listView1.MultiSelect = false;
this.listView1.Name = "listView1";
this.listView1.ShowGroups = false;
this.listView1.Size = new System.Drawing.Size(834, 134);
this.listView1.Size = new System.Drawing.Size(834, 118);
this.listView1.TabIndex = 2;
this.listView1.UseCompatibleStateImageBehavior = false;
//
// btn_stop
//
this.btn_stop.Font = new System.Drawing.Font("微软雅黑", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
this.btn_stop.Location = new System.Drawing.Point(149, 47);
this.btn_stop.Location = new System.Drawing.Point(149, 42);
this.btn_stop.Name = "btn_stop";
this.btn_stop.Size = new System.Drawing.Size(105, 37);
this.btn_stop.TabIndex = 3;
......@@ -179,7 +190,7 @@ namespace AutoScanAndLabel
// btn_run
//
this.btn_run.Font = new System.Drawing.Font("微软雅黑", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
this.btn_run.Location = new System.Drawing.Point(25, 47);
this.btn_run.Location = new System.Drawing.Point(25, 42);
this.btn_run.Name = "btn_run";
this.btn_run.Size = new System.Drawing.Size(105, 37);
this.btn_run.TabIndex = 4;
......@@ -187,23 +198,12 @@ namespace AutoScanAndLabel
this.btn_run.UseVisualStyleBackColor = true;
this.btn_run.Click += new System.EventHandler(this.btn_run_Click);
//
// cb_IgnoreGratingSignal
//
this.cb_IgnoreGratingSignal.AutoSize = true;
this.cb_IgnoreGratingSignal.Location = new System.Drawing.Point(653, 73);
this.cb_IgnoreGratingSignal.Name = "cb_IgnoreGratingSignal";
this.cb_IgnoreGratingSignal.Size = new System.Drawing.Size(125, 25);
this.cb_IgnoreGratingSignal.TabIndex = 2;
this.cb_IgnoreGratingSignal.Text = "忽略安全光栅";
this.cb_IgnoreGratingSignal.UseVisualStyleBackColor = true;
this.cb_IgnoreGratingSignal.CheckedChanged += new System.EventHandler(this.cb_IgnoreGratingSignal_CheckedChanged);
//
// Form1
//
this.AutoScaleDimensions = new System.Drawing.SizeF(7F, 14F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.BackColor = System.Drawing.Color.White;
this.ClientSize = new System.Drawing.Size(1350, 711);
this.ClientSize = new System.Drawing.Size(1350, 689);
this.Controls.Add(this.btn_stop);
this.Controls.Add(this.btn_run);
this.Controls.Add(this.listView1);
......
......@@ -42,19 +42,6 @@ namespace AutoScanAndLabel
//codeInfos.Add(new CodeInfo("", 528, 406));
codeInfos.Add(new CodeInfo("", 925, 520));
//codeInfos.Add(new CodeInfo("", 564, 684));
var p = Common.CalcLabelPoint(codeInfos, new Point(672,456),200);
//MessageBox.Show(p.ToString());
//Point p1 = new Point(100, 100);
//Point p2 = new Point(1, 99);
//double a =Common.getAngle(p1, p2);
//a = a < 0 ? 360 - a : a;
////a = a - 180;
///MessageBox.Show(a.ToString());
//double d = 100;
//var x2 = p2.X + d * Math.Cos(a / 180 * Math.PI);
//var y2 = p2.Y + d * Math.Sin(a / 180 * Math.PI);
//MessageBox.Show(new Point((int)x2, (int)y2).ToString());
//MessageBox.Show(Common.PointRotate(p1, p2,83d/180*Math.PI).ToString());
btn_run.Enabled = false;
btn_stop.Enabled = false;
......@@ -87,12 +74,13 @@ namespace AutoScanAndLabel
c3.Text = "步骤";
c3.Width = 100;
ColumnHeader c4 = new ColumnHeader();
c3.Text = "信息";
c3.Width = 300;
c4.Text = "信息";
c4.Width = 400;
stateView.Columns.Add(c1);
stateView.Columns.Add(c2);
stateView.Columns.Add(c3);
stateView.Columns.Add(c4);
stateView.ColumnWidthChanging += listView_ColumnWidthChanging;
#endregion
......@@ -121,12 +109,17 @@ namespace AutoScanAndLabel
}
void SetState(List<MoveInfo> moveInfoList)
{
this.SuspendLayout();
stateView.Items.Clear();
foreach (MoveInfo moveInfo in moveInfoList)
{
ListViewItem lvi = new ListViewItem(new string[] { "", moveInfo.Name, moveInfo.MoveStep.ToString() });
ListViewItem lvi = new ListViewItem(new string[] { "", moveInfo.Name, moveInfo.MoveStep.ToString(),moveInfo.GetStateStr() });
stateView.Items.Add(lvi);
}
ListViewItem lvi1 = new ListViewItem(new string[] { "", "Printer", RobotManage.mainMachine.LastPrintStatus.ToString(), ConfigHelper.Config.Get(Setting_Init.PrinterName) });
stateView.Items.Add(lvi1);
this.ResumeLayout(true);
}
private void AddForm(string text, UserControl form)
{
......@@ -155,11 +148,12 @@ namespace AutoScanAndLabel
(sender as ToolStripMenuItem).Text = !RobotManage.IsDebug ? "启用调试模式" : "停用调试模式";
RobotManage.Init();
//RobotManage.Init();
if (RobotManage.IsDebug)
{
addTablePage();
RobotManage.LoadDebug();
}
else {
for (int i = tabControl1.TabPages.Count-1; i > 0; i--)
......@@ -198,6 +192,7 @@ namespace AutoScanAndLabel
}
void SetMsg(List<Msg> msgs)
{
this.SuspendLayout();
listView1.Items.Clear();
foreach (Msg msg in msgs)
{
......@@ -208,6 +203,7 @@ namespace AutoScanAndLabel
lvi.ForeColor = Color.Red;
listView1.Items.Add(lvi);
}
this.ResumeLayout(true);
}
bool userpause = false;
......@@ -218,7 +214,8 @@ namespace AutoScanAndLabel
{
RobotManage.Start();
userpause = false;
(sender as Button).Text = "暂停运行";
if (RobotManage.isRunning)
(sender as Button).Text = "暂停运行";
}
else if (!userpause)
{
......
......@@ -38,7 +38,6 @@ namespace AutoScanAndLabel
this.logBox.Font = new System.Drawing.Font("新宋体", 10.5F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
this.logBox.Location = new System.Drawing.Point(0, 0);
this.logBox.Name = "logBox";
this.logBox.ShortcutsEnabled = false;
this.logBox.Size = new System.Drawing.Size(746, 495);
this.logBox.TabIndex = 0;
this.logBox.Text = "";
......
......@@ -38,7 +38,6 @@ namespace AutoScanAndLabel
this.chbAutoRun = new System.Windows.Forms.CheckBox();
this.groupBox3 = new System.Windows.Forms.GroupBox();
this.tableLayoutPanel1 = new System.Windows.Forms.TableLayoutPanel();
this.label3 = new System.Windows.Forms.Label();
this.btnSavePos = new System.Windows.Forms.Button();
this.groupBox1.SuspendLayout();
this.groupBox3.SuspendLayout();
......@@ -142,16 +141,6 @@ namespace AutoScanAndLabel
this.tableLayoutPanel1.Size = new System.Drawing.Size(273, 387);
this.tableLayoutPanel1.TabIndex = 102;
//
// label3
//
this.label3.BackColor = System.Drawing.SystemColors.ActiveCaptionText;
this.label3.Location = new System.Drawing.Point(107, 259);
this.label3.Name = "label3";
this.label3.Size = new System.Drawing.Size(100, 23);
this.label3.TabIndex = 109;
this.label3.Text = "label3";
this.label3.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
//
// btnSavePos
//
this.btnSavePos.Location = new System.Drawing.Point(583, 422);
......@@ -166,7 +155,6 @@ namespace AutoScanAndLabel
//
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.None;
this.Controls.Add(this.btnSavePos);
this.Controls.Add(this.label3);
this.Controls.Add(this.groupBox3);
this.Controls.Add(this.chbAutoRun);
this.Controls.Add(this.groupBox1);
......@@ -192,7 +180,6 @@ namespace AutoScanAndLabel
private System.Windows.Forms.CheckBox chbAutoRun;
private System.Windows.Forms.GroupBox groupBox3;
private System.Windows.Forms.TableLayoutPanel tableLayoutPanel1;
private System.Windows.Forms.Label label3;
private System.Windows.Forms.Button btnSavePos;
}
}
......@@ -111,22 +111,35 @@ namespace AutoScanAndLabel
private void TextBox_TextChanged(object sender, EventArgs e)
{
var s = (sender as TextBox);
if (s.Tag.ToString() != "Int32")
return;
if (!int.TryParse(s.Text, out _))
if (s.Tag.ToString() == "Int32")
{
if (!int.TryParse(s.Text, out _))
s.Text = lastvalue;
}
else if (s.Tag.ToString() == "Double")
{
s.Text = lastvalue;
if (!double.TryParse(s.Text, out _))
s.Text = lastvalue;
}
s.SelectionStart = lastselectindex;
}
string lastvalue = "";
int lastselectindex = 0;
private void TextBox_KeyPress(object sender, KeyPressEventArgs e)
{
var s = (sender as TextBox);
if (s.Tag.ToString() != "Int32")
return;
if (int.TryParse(s.Text, out _))
lastvalue = s.Text;
if (s.Tag.ToString() == "Int32")
{
if (int.TryParse(s.Text, out _))
lastvalue = s.Text;
}
else if (s.Tag.ToString() == "Double")
{
if (double.TryParse(s.Text, out _))
lastvalue = s.Text;
}
lastselectindex = s.SelectionStart;
}
private void SettingControl_Load(object sender, EventArgs e)
......@@ -203,6 +216,8 @@ namespace AutoScanAndLabel
{
if (pi.PropertyType.Name=="Int32")
pi.SetValue(RobotManage.Config, int.Parse(textBox.Text));
else if (pi.PropertyType.Name == "Double")
pi.SetValue(RobotManage.Config, double.Parse(textBox.Text));
else
pi.SetValue(RobotManage.Config, textBox.Text);
}
......
......@@ -54,7 +54,6 @@
<Compile Include="bean\Bean.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />
<Compile Include="Setting_Init.cs" />
<Compile Include="util\AcSerialBean.cs" />
<Compile Include="util\ConfigAppSettings.cs" />
<Compile Include="util\FormUtil.cs" />
<Compile Include="util\JsonHelper.cs" />
......
......@@ -11,6 +11,7 @@ namespace DeviceLibrary
{
public class AxisBean
{
public static List<AxisBean> List = new List<AxisBean>();
public ConfigMoveAxis Config = null;
public static int TimeoutInterval = 500;
/// <summary>
......@@ -23,6 +24,7 @@ namespace DeviceLibrary
{
this.Config = axisConfig;
AxisName = deviceName + " " + Config.Explain + "[" + Config.DeviceName + "-" + Config.GetAxisValue() + "]";
List.Add(this);
}
public bool Open(bool isCheck, out string Msg)
......@@ -33,8 +35,7 @@ namespace DeviceLibrary
AxisManager.AlarmClear(portName, slvAddr);
Thread.Sleep(50);
AxisManager.ServoOn(portName, slvAddr);
Thread.Sleep(500);
Thread.Sleep(50);
//打开所有轴
if (isCheck)
{
......@@ -300,7 +301,7 @@ namespace DeviceLibrary
}
#endregion
public static bool RunMultiAxis(bool isCheck, out string msg, params AxisBean[] axisArray)
public static bool RunMultiAxis(bool isCheck, out string msg, List<AxisBean> axisArray)
{
msg = "";
foreach (AxisBean axis in axisArray)
......@@ -313,17 +314,23 @@ namespace DeviceLibrary
return false;
}
}
Thread.Sleep(500);
Thread.Sleep(50);
return true;
}
public static void CloseMultiAxis(params AxisBean[] axisArray)
public static void StopMultiAxis(List<AxisBean> axisArray)
{
foreach (AxisBean axis in axisArray)
{
axis.SuddenStop();
Thread.Sleep(50);
Thread.Sleep(10);
}
}
public static void CloseMultiAxis(List<AxisBean> axisArray)
{
foreach (AxisBean axis in axisArray)
{
axis.ServoOff();
Thread.Sleep(10);
}
}
......
......@@ -43,23 +43,7 @@ namespace DeviceLibrary
double mb_y = pt2.Y - pt1.Y;
double rotation = Math.Atan2(mb_y, mb_x);
/*
if (pt2.Y >= pt1.Y) {
if (pt2.X >= pt1.X) { }
else
{
rotation = Math.PI - rotation;
}
} else {
if (pt2.X >= pt1.X)
{
rotation = 2 * Math.PI - rotation;
}
else
{
rotation = Math.PI + rotation;
}
}*/
rotation = rotation / Math.PI * 180;
return rotation;
//double angle = 360 - rotation + 90;
......@@ -105,7 +89,7 @@ namespace DeviceLibrary
return new Point((int)x2, (int)y2);
}
public static Point CalcLabelPoint(List<CodeInfo> codeInfos, Point org,int widthOffset) {
public static Point CalcLabelPoint(List<CodeInfo> codeInfos, Point org,int widthOffset,out int labelAngle) {
//Point Right_Batch_Point = new Point(RobotManage.Config.Right_Batch_X, RobotManage.Config.Right_Batch_Y);
Point Right_Batch_Point = org;
List<int> angles = new List<int>();
......@@ -115,6 +99,7 @@ namespace DeviceLibrary
//c.Y = op.Y;
Point op = new Point(c.X, c.Y);
var a = (int)getAngle(Right_Batch_Point, op);
a += ConfigHelper.Config.Get<int>("AngleChange");
a = a < 0 ? 360 + a : a;
angles.Add(a);
});
......@@ -135,10 +120,10 @@ namespace DeviceLibrary
bigangles = angles[i];
}
}
var a2 = bigangles + biglen / 2;
a2 = a2 > 360 ? 360 - a2 : a2;
labelAngle = bigangles + biglen / 2;
labelAngle = labelAngle > 360 ? 360 - labelAngle : labelAngle;
var p2 = PointWithAngle(org, a2, widthOffset);
var p2 = PointWithAngle(org, labelAngle, widthOffset);
return p2;
}
}
......@@ -155,8 +140,8 @@ namespace DeviceLibrary
foreach (var m in msg)
LogUtil.info(m.msgtxt);
}
return msg;
List<Msg> mm = new List<Msg>(msg);
return mm;
}
public static void add(string m, MsgLevel ml)
{
......
......@@ -13,22 +13,20 @@ namespace DeviceLibrary
{
public void StopMove(bool ServoOff=false)
{
runStatus = RunStatus.Stop;
ResetMoveInfo.EndMove();
RightMoveInfo.EndMove();
LeftMoveInfo.EndMove();
LabelMoveInfo.EndMove();
MiddleMoveInfo.EndMove();
AxisBean.CloseMultiAxis(new AxisBean[] { Take_Middle_Axis, Take_UpDown_Axis, Left_Batch_Axis, Right_Batch_Axis, Label_X_Axis, Label_Y_Axis, Label_Z_Axis, Label_R_Axis });
AxisBean.StopMultiAxis(AxisBean.List);
if (!ServoOff)
return;
foreach (ConfigMoveAxis configMoveAxis in Config.moveAxisList)
AxisManager.ServoOff("", configMoveAxis.GetAxisValue());
if (ServoOff)
AxisBean.CloseMultiAxis(AxisBean.List);
}
public void OpenAllServo()
{
AxisBean.RunMultiAxis(true, out _, new AxisBean[] { Take_Middle_Axis, Take_UpDown_Axis, Left_Batch_Axis, Right_Batch_Axis, Label_X_Axis, Label_Y_Axis, Label_Z_Axis, Label_R_Axis });
AxisBean.RunMultiAxis(true, out _, AxisBean.List);
}
int logType = 1000;
......@@ -204,7 +202,7 @@ namespace DeviceLibrary
LogUtil.error(Name + " 报警,报警类型:" + alarmType);
this.alarmType = alarmType;
if (alarmType.Equals(AlarmType.AxisAlarm) | alarmType.Equals(AlarmType.AxisMoveError))
if (alarmType.Equals(AlarmType.AxisAlarm) || alarmType.Equals(AlarmType.AxisMoveError))
{
LogUtil.error(Name + "轴报警, 停止运动, 打开报警灯");
......
......@@ -49,8 +49,10 @@ namespace DeviceLibrary
}
break;
case MoveStep.Lbl10:
//照片中料盘中心点像素位置
Point Right_Batch_Point = new Point(RobotManage.Config.Right_Batch_X, RobotManage.Config.Right_Batch_Y);
int widthOffset = Config.Label_Offset_Pixel_7;
//不同尺寸料盘需要在照片上便宜的贴标像素
int widthOffset = Config.Label_Offset_Pixel_7;
switch (LabelMoveInfo.MoveParam.PlateW) {
case 13:
widthOffset = Config.Label_Offset_Pixel_13;
......@@ -59,11 +61,22 @@ namespace DeviceLibrary
widthOffset = Config.Label_Offset_Pixel_15;
break;
}
Point p = Common.CalcLabelPoint(LabelMoveInfo.MoveParam.codeInfos, Right_Batch_Point, widthOffset);
Point p1 = new Point(p.X*Config.Cam_Pixel_X_Ratio,p.Y* Config.Cam_Pixel_Y_Ratio);
LabelMoveInfo.log($"计算贴标像素点位为{p},轴点位为{p1},盘宽{LabelMoveInfo.MoveParam.PlateW}");
//计算照片中贴标的像素位置
Point p = Common.CalcLabelPoint(LabelMoveInfo.MoveParam.codeInfos, Right_Batch_Point, widthOffset, out int labelAngle);
//匹配照片角度与贴标旋转轴的角度差
labelAngle += Config.Label_R_Angle_Diff;
//计算贴标角度的脉冲值
int labelAxisPos = Config.Label_R_360 / 360 * labelAngle;
//计算像素点位与中心点的差
Point p1 = new Point(p.X - Right_Batch_Point.X , p.Y - Right_Batch_Point.Y);
//计算像素*脉冲像素比得到脉冲值+中心点基准脉冲
p1.X = (int)(p1.X * Config.Cam_Pixel_X_Ratio) + Config.Label_X_Base;
p1.Y = (int)(p1.Y * Config.Cam_Pixel_Y_Ratio) + Config.Label_Y_Base;
LabelMoveInfo.log($"计算贴标像素点位为{p},轴点位为{p1},角度{labelAngle},R轴{labelAxisPos},盘宽{LabelMoveInfo.MoveParam.PlateW}");
Label_X_Axis.AbsMove(LabelMoveInfo, p.X, Config.Label_X_P2_speed);
Label_Y_Axis.AbsMove(LabelMoveInfo, p.Y, Config.Label_Y_P2_speed);
Label_R_Axis.AbsMove(LabelMoveInfo, labelAxisPos, Config.Label_R_P2_speed);
Label_Z_Axis.AbsMove(LabelMoveInfo, Config.Label_Z_P3, Config.Label_Z_P3_speed);
LabelMoveInfo.NextMoveStep(MoveStep.Lbl11);
LabelMoveInfo.log("Label_XYZ转到贴标点.");
......@@ -90,6 +103,17 @@ namespace DeviceLibrary
}
}
string LabelState() {
string state = "";
if (LabelMoveInfo.MoveStep >= MoveStep.Lbl_Printted) {
state += "标签已打印,当前ReelID:" + LabelMoveInfo.MoveParam.WareCode;
}
if (LabelMoveInfo.MoveStep == MoveStep.Lbl01)
{
state += "等待标签打印";
}
return state;
}
}
......
......@@ -18,7 +18,6 @@ namespace DeviceLibrary
Led RunningLed;
Led RightLed;
Led LeftLed;
List<Led> LedGroup;
System.Threading.Timer ledtimer;
void LedProcessInit()
......@@ -56,28 +55,29 @@ namespace DeviceLibrary
|| alarmType == AlarmType.AxisMoveError) {
AlarmLed.LedState = LedState.on;
}
//右侧料串已空
if (RightMoveInfo.IsStep(MoveStep.Wait) && IOValue(IO_Type.RightEnd_Check).Equals(IO_VALUE.HIGH))
RightLed.LedState = LedState.blink;
else
RightLed.LedState = LedState.off;
//左侧料串已满
if (LeftMoveInfo.IsStep(MoveStep.Wait) && IOValue(IO_Type.LeftEnd_Check).Equals(IO_VALUE.HIGH))
LeftLed.LedState = LedState.blink;
else
LeftLed.LedState = LedState.off;
LedGroup.ForEach((x) => { x.run(); });
if (runStatus == RunStatus.Running)
{
//右侧料串已空
if (RightMoveInfo.IsStep(MoveStep.Wait) && IOValue(IO_Type.RightEnd_Check).Equals(IO_VALUE.HIGH) && RightShelfNoTray)
RightLed.LedState = LedState.blink;
else
RightLed.LedState = LedState.off;
//左侧料串已满
if (LeftMoveInfo.IsStep(MoveStep.Wait) && IOValue(IO_Type.LeftEnd_Check).Equals(IO_VALUE.HIGH) && LeftShelfNoTray)
LeftLed.LedState = LedState.blink;
else
LeftLed.LedState = LedState.off;
}
Led.LedGroup.ForEach((x) => { x.run(); });
}
}
public class Led {
public static List<Led> LedGroup = new List<Led>();
public LedState LedState = LedState.off;
ushort ledio;
public Led(ushort io) {
public Led(ushort io) {
ledio = io;
LedGroup.Add(this);
}
IO_VALUE iovalue;
IO_VALUE lastiovalue;
......
......@@ -12,6 +12,7 @@ namespace DeviceLibrary
partial class MainMachine
{
bool LeftShelfNoTray = false;
int LeftCount = 0;
void LeftProcess()
{
if (CheckWait(LeftMoveInfo))
......@@ -20,6 +21,7 @@ namespace DeviceLibrary
switch (LeftMoveInfo.MoveStep)
{
case MoveStep.L01:
LeftCount = 0;
LeftMoveInfo.NextMoveStep(MoveStep.L03);
LeftBatchAxisToP2(true);
LeftMoveInfo.log($"批量轴上升到P2位置,第一次提升,LeftStartMovePosition={LeftStartMovePosition}");
......@@ -57,6 +59,7 @@ namespace DeviceLibrary
case MoveStep.L10_WaitReelPut:
break;
case MoveStep.L11_ReelPutted:
LeftCount++;
LeftMoveInfo.NextMoveStep(MoveStep.L12);
LeftBatchAxisToP2(false);
LeftMoveInfo.log($"料盘已放入,批量轴上升,LeftStartMovePosition={LeftStartMovePosition}");
......@@ -171,7 +174,25 @@ namespace DeviceLibrary
}
}
string LeftState()
{
string state = "";
if (IOValue(IO_Type.LeftEnd_Check).Equals(IO_VALUE.HIGH))
{
state += $"有料窜,已提取{RightCount}张料盘";
if (LeftShelfNoTray)
state += ",料串已清空";
else
state += ".";
state += "当前ReelID:" + LeftMoveInfo.MoveParam.WareCode;
}
else
{
return "无料窜";
}
return state;
}
int LeftStartMovePosition = 0;
void LeftBatchAxisToP2(bool isFirstMove = true)
......
......@@ -159,6 +159,16 @@ namespace DeviceLibrary
}
}
string MiddleState() {
string state = "";
if (MiddleMoveInfo.MoveStep == MoveStep.M_Standby || MiddleMoveInfo.MoveStep == MoveStep.Wait)
state += "等待中";
else
state += "当前ReelID:" + MiddleMoveInfo.MoveParam.WareCode;
return state;
}
}
......
......@@ -31,7 +31,7 @@ namespace DeviceLibrary
}*/
}
Asa.PrintLabel.PrinterStatus LastPrintStatus = Asa.PrintLabel.PrinterStatus.Unknown;
public Asa.PrintLabel.PrinterStatus LastPrintStatus = Asa.PrintLabel.PrinterStatus.Unknown;
void Print_PrintStatusChanged(Asa.PrintLabel.PrinterStatus sta, string msg)
{
if (sta.Equals(LastPrintStatus).Equals(false))
......@@ -57,7 +57,7 @@ namespace DeviceLibrary
}
LastPrintStatus = sta;
}
public string LastPrintLabel="";
void StartPrintLabel(string wareCode, string wareCount, string FactoryCode = "")
{
try
......@@ -70,6 +70,7 @@ namespace DeviceLibrary
text.Add("DateTime", System.DateTime.Now.ToString("F"));
text.Add("FactoryCode", FactoryCode);
LastPrintLabel = wareCode;
RobotManage.PrintBean.Print(text);
LogUtil.info("PrintLabel 打印标签 StartPrintLabel 结束 ");
}
......
......@@ -13,6 +13,7 @@ namespace DeviceLibrary
partial class MainMachine
{
bool RightShelfNoTray = false;
int RightCount = 0;
void RightProcess()
{
if (CheckWait(RightMoveInfo))
......@@ -21,6 +22,7 @@ namespace DeviceLibrary
switch (RightMoveInfo.MoveStep)
{
case MoveStep.R01:
RightCount = 0;
RightMoveInfo.NextMoveStep(MoveStep.R03);
RightBatchAxisToP2(true);
RightMoveInfo.log($"批量轴上升到P2位置,第一次提升,RightStartMovePosition={RightStartMovePosition}");
......@@ -98,6 +100,7 @@ namespace DeviceLibrary
case MoveStep.R10_WaitReelLeave:
break;
case MoveStep.R11_NextReel:
RightCount++;
RightMoveInfo.NextMoveStep(MoveStep.R02);
RightMoveInfo.log($"料盘已取走,开始准备下一盘料");
break;
......@@ -190,7 +193,25 @@ namespace DeviceLibrary
break;
}
}
string RightState() {
string state = "";
if (IOValue(IO_Type.RightEnd_Check).Equals(IO_VALUE.HIGH))
{
state += $"有料窜,已提取{RightCount}张料盘";
if (RightShelfNoTray)
state += ",料串已清空";
else
state += ".";
state += "当前ReelID:"+ RightMoveInfo.MoveParam.WareCode;
}
else
{
return "无料窜";
}
return state;
}
/// <summary>
/// 扫码线程
/// </summary>
......@@ -214,13 +235,7 @@ namespace DeviceLibrary
LastCodeList = CodeManager.CameraScan(new List<string> { Config.RightCameraName });
}
IOMove(IO_Type.Camera_Led, IO_VALUE.LOW);
//Point Right_Batch_Point = new Point(Config.Right_Batch_X, Config.Right_Batch_Y);
//LastCodeList.ForEach((c)=> {
// Point op = Common.PointRotate(Right_Batch_Point, new Point(c.X, c.Y), 83d / 180 * Math.PI);
// c.X = op.X;
// c.Y = op.Y;
//});
return LastCodeList;
}));
}
......
......@@ -40,7 +40,6 @@ namespace DeviceLibrary
MoveInfo LabelMoveInfo;
MoveInfo MiddleMoveInfo;
List<MoveInfo> moveInfoList;
public delegate void ProcessMsg(List<Msg> msg);
public event ProcessMsg ProcessMsgEvent;
......@@ -71,22 +70,26 @@ namespace DeviceLibrary
public MainMachine(Robot_Config _config) {
Config = _config;
ResetMoveInfo = new MoveInfo("重置");
RightMoveInfo = new MoveInfo("右侧取料");
RightMoveInfo.SetStateDelegate(RightState);
MiddleMoveInfo = new MoveInfo("移栽");
MiddleMoveInfo.SetStateDelegate(MiddleState);
LeftMoveInfo = new MoveInfo("左侧收料");
LeftMoveInfo.SetStateDelegate(LeftState);
LabelMoveInfo = new MoveInfo("贴标");
MiddleMoveInfo = new MoveInfo("移栽");
moveInfoList = new List<MoveInfo> { RightMoveInfo, MiddleMoveInfo, LabelMoveInfo, LeftMoveInfo, ResetMoveInfo };
LabelMoveInfo.SetStateDelegate(LabelState);
ResetMoveInfo = new MoveInfo("重置");
#region 初始化led
AlarmLed = new Led(Config.DOList[IO_Type.Alarm_HddLed].GetIOAddr());
StandbyLed = new Led(Config.DOList[IO_Type.RunSign_HddLed].GetIOAddr());
RunningLed = new Led(Config.DOList[IO_Type.AutoRun_HddLed].GetIOAddr());
RightLed = new Led(Config.DOList[IO_Type.RightState_Led].GetIOAddr());
LeftLed = new Led(Config.DOList[IO_Type.LeftState_Led].GetIOAddr());
LedGroup = new List<Led> { AlarmLed, StandbyLed, RunningLed, RightLed, LeftLed };
#endregion
#region 初始化伺服轴
Take_Middle_Axis = new AxisBean(Config.Take_Middle_Axis, Name);
Take_UpDown_Axis = new AxisBean(Config.Take_UpDown_Axis, Name);
Left_Batch_Axis = new AxisBean(Config.Left_Batch_Axis, Name);
......@@ -95,7 +98,7 @@ namespace DeviceLibrary
Label_Y_Axis = new AxisBean(Config.Label_Y_Axis, Name);
Label_Z_Axis = new AxisBean(Config.Label_Z_Axis, Name);
Label_R_Axis = new AxisBean(Config.Label_R_Axis, Name);
#endregion
electricClamp = RobotManage.electricGripper;
......@@ -103,14 +106,14 @@ namespace DeviceLibrary
LedProcessInit();
}
/// <summary>
/// 整机启动变量
/// 整机启动变量,设置为false后将退出线程,只在停止时调用
/// </summary>
bool mstart=true;
public void Run() {
mstart = true;
while (mstart) {
try
{
{
canRunning = DeviceCheck();
if (canRunning)
{
......@@ -133,14 +136,15 @@ namespace DeviceLibrary
HomeReset();
}
}
catch (Exception ex){
catch (Exception ex)
{
Msg.add(ex.Message, MsgLevel.warning);
}
finally {
ProcessMsgEvent?.Invoke(Msg.get());
ProcessMoveinfoEvent?.Invoke(moveInfoList);
ProcessMoveinfoEvent?.Invoke(MoveInfo.List);
Msg.clear();
}
}
}
LogUtil.info("主线程已退出.");
}
......@@ -234,10 +238,13 @@ namespace DeviceLibrary
ok = false;
}
if (IOValue(IO_Type.GratingSignal_Check).Equals(IO_VALUE.LOW))
{
Msg.add("安全光栅被遮挡", MsgLevel.warning);
if (!IgnoreSafecheck && !IgnoreGratingSignal)
{
if (!IgnoreSafecheck && !IgnoreGratingSignal
&& IOValue(IO_Type.RightCar_Check).Equals(IO_VALUE.LOW)
&& IOValue(IO_Type.LeftCar_Check).Equals(IO_VALUE.LOW))
ok = false;
Msg.add("安全光栅被遮挡"+(!ok?"[忽略]":""), MsgLevel.warning);
}
if (IOValue(IO_Type.HasNgBox).Equals(IO_VALUE.LOW))
{
......
......@@ -10,6 +10,7 @@ namespace DeviceLibrary
{
public class MoveInfo
{
public static List<MoveInfo> List = new List<MoveInfo>();
public int TimeOutSeconds = 60;
public MoveInfo(string name)
{
......@@ -17,6 +18,8 @@ namespace DeviceLibrary
this.moveStep = MoveStep.Wait;
IsInWait = false;
this.Name = name;
List.Add(this);
}
public string Name { get; set; }
......@@ -30,13 +33,23 @@ namespace DeviceLibrary
MoveStep moveStep;
public int CanWhileCount = 0;
delegate string StateDelegate();
StateDelegate stateDelegate;
public void SetStateDelegate(Func<string> target) {
stateDelegate = new StateDelegate(target);
}
public String GetStateStr() {
if (stateDelegate != null)
return stateDelegate.Invoke();
return "";
}
public MoveStep MoveStep
{
get { return moveStep; }
}
public int ErrorLogType { get; internal set; }
public void NewMove(MoveStep step)
{
this.MoveParam = new LabelParam();
......
......@@ -27,6 +27,7 @@ namespace DeviceLibrary
public static void Init() {
try
{
mainMachine = null;
string msg = "";
string configFile = Path.Combine(baseDir, "config\\Config.csv");
......@@ -55,12 +56,16 @@ namespace DeviceLibrary
LoadFinishEvent?.Invoke(false, ex.Message);
}
}
public static void LoadDebug() {
LoadFinishEvent?.Invoke(true, "打开调试模式");
}
public static void Start() {
Init();
//Init();
if (!IsLoadOk)
{
LogUtil.info("系统还未加载完毕,无法启动");
if (!IsDebug)
return;
}
mainThread = new Thread(new ThreadStart(mainMachine.Run));
mainThread.Start();
......
<?xml version="1.0" encoding="UTF-8"?>
<config ver="10">
<item key="App_Title" ver="10" value="自动贴标机" />
<item key="PrinterName" ver="10" value="Microsoft Print to PDF" />
<item key="LabelName" ver="10" value="457" />
<item key="AngleChange " ver="10" value="83" />
<item key="ElectricGripperPort" ver="10" value="COM12" />
</config>
\ No newline at end of file
......@@ -118,5 +118,10 @@
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</Content>
</ItemGroup>
<ItemGroup>
<None Include="Config\general.config">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</None>
</ItemGroup>
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
</Project>
\ No newline at end of file
......@@ -6,7 +6,6 @@ using System.Threading.Tasks;
namespace DeviceLibrary
{
public class ElectricGripper
{
private Neotel.Rmaxis axis;
......
......@@ -26,7 +26,7 @@ namespace DeviceLibrary
{
ConfigIO configIo = StoreManager.Config.DOList[ioType];
instance.WriteSingleDO(configIo.DeviceName, configIo.SlaveID, configIo.GetIOAddr(), ioValue);
Thread.Sleep(60);
//Thread.Sleep(60);
}
else
{
......
......@@ -113,12 +113,12 @@ namespace OnlineStore.LoadCSVLibrary
/// PRO,20,图像/X轴比值,Cam_Pixel_X_Ratio,6,,,,,,,,,,,,
/// </summary>
[ConfigProAttribute("Cam_Pixel_X_Ratio")]
public int Cam_Pixel_X_Ratio { get; set; }
public double Cam_Pixel_X_Ratio { get; set; }
/// <summary>
/// PRO,20,图像/Y轴比值,Cam_Pixel_Y_Ratio,5,,,,,,,,,,,,
/// </summary>
[ConfigProAttribute("Cam_Pixel_Y_Ratio")]
public int Cam_Pixel_Y_Ratio { get; set; }
public double Cam_Pixel_Y_Ratio { get; set; }
/// <summary>
/// PRO,20,像素偏离位置7寸,Label_Offset_Pixel_7,200,,,,,,,,,,,,
/// </summary>
......
支持 Markdown 格式
你添加了 0 到此讨论。请谨慎行事。
Finish editing this message first!