Commit e8b2b136 LN

伺服调试优化

1 个父辈 0925a58d
...@@ -123,6 +123,12 @@ ...@@ -123,6 +123,12 @@
<Compile Include="ServoAxisInfo.Designer.cs"> <Compile Include="ServoAxisInfo.Designer.cs">
<DependentUpon>ServoAxisInfo.cs</DependentUpon> <DependentUpon>ServoAxisInfo.cs</DependentUpon>
</Compile> </Compile>
<Compile Include="useControl\AxisMoveControl.cs">
<SubType>UserControl</SubType>
</Compile>
<Compile Include="useControl\AxisMoveControl.Designer.cs">
<DependentUpon>AxisMoveControl.cs</DependentUpon>
</Compile>
<EmbeddedResource Include="FrmAxisDebug.resx"> <EmbeddedResource Include="FrmAxisDebug.resx">
<DependentUpon>FrmAxisDebug.cs</DependentUpon> <DependentUpon>FrmAxisDebug.cs</DependentUpon>
</EmbeddedResource> </EmbeddedResource>
...@@ -157,6 +163,9 @@ ...@@ -157,6 +163,9 @@
<EmbeddedResource Include="ServoAxisInfo.resx"> <EmbeddedResource Include="ServoAxisInfo.resx">
<DependentUpon>ServoAxisInfo.cs</DependentUpon> <DependentUpon>ServoAxisInfo.cs</DependentUpon>
</EmbeddedResource> </EmbeddedResource>
<EmbeddedResource Include="useControl\AxisMoveControl.resx">
<DependentUpon>AxisMoveControl.cs</DependentUpon>
</EmbeddedResource>
<None Include="Properties\Settings.settings"> <None Include="Properties\Settings.settings">
<Generator>SettingsSingleFileGenerator</Generator> <Generator>SettingsSingleFileGenerator</Generator>
<LastGenOutput>Settings.Designer.cs</LastGenOutput> <LastGenOutput>Settings.Designer.cs</LastGenOutput>
......
...@@ -64,6 +64,8 @@ namespace OnlineStore.ACSquareStore ...@@ -64,6 +64,8 @@ namespace OnlineStore.ACSquareStore
chbUseTrayCheck.Checked = StoreManager.UseShelfCheck; chbUseTrayCheck.Checked = StoreManager.UseShelfCheck;
// txtTempPort.Text = store.Config.Humiture_Port; // txtTempPort.Text = store.Config.Humiture_Port;
InitPosDebugBox(); InitPosDebugBox();
axisMoveControl1.LoadData(StoreManager.Store.moveAxisList.ToArray());
tabControl1.TabPages.Remove(tabPage1);
LoadOk = true; LoadOk = true;
} }
#region 库位调试 #region 库位调试
...@@ -1252,6 +1254,7 @@ namespace OnlineStore.ACSquareStore ...@@ -1252,6 +1254,7 @@ namespace OnlineStore.ACSquareStore
//groupComAxis.Enabled = status; //groupComAxis.Enabled = status;
groupInout.Enabled = status; groupInout.Enabled = status;
tabControl_Pos.Enabled = status; tabControl_Pos.Enabled = status;
axisMoveControl1.Enabled = status;
} }
private void btnDebug_Click(object sender, EventArgs e) private void btnDebug_Click(object sender, EventArgs e)
......
namespace OnlineStore.AssemblyLine
{
partial class AxisMoveControl
{
/// <summary>
/// 必需的设计器变量。
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// 清理所有正在使用的资源。
/// </summary>
/// <param name="disposing">如果应释放托管资源,为 true;否则为 false。</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
#region 组件设计器生成的代码
/// <summary>
/// 设计器支持所需的方法 - 不要修改
/// 使用代码编辑器修改此方法的内容。
/// </summary>
private void InitializeComponent()
{
this.groupAxis = new System.Windows.Forms.GroupBox();
this.groupBox1 = new System.Windows.Forms.GroupBox();
this.txtBusyStatus = new System.Windows.Forms.TextBox();
this.label11 = new System.Windows.Forms.Label();
this.txtHomeStatus = new System.Windows.Forms.TextBox();
this.label10 = new System.Windows.Forms.Label();
this.label3 = new System.Windows.Forms.Label();
this.label24 = new System.Windows.Forms.Label();
this.label5 = new System.Windows.Forms.Label();
this.btnGetAlarm = new System.Windows.Forms.Button();
this.txtAlarmStatus = new System.Windows.Forms.TextBox();
this.txtLimit2 = new System.Windows.Forms.TextBox();
this.txtServoStatue = new System.Windows.Forms.TextBox();
this.label22 = new System.Windows.Forms.Label();
this.txtLimit1 = new System.Windows.Forms.TextBox();
this.label6 = new System.Windows.Forms.Label();
this.txtHomeSingle = new System.Windows.Forms.TextBox();
this.panel1 = new System.Windows.Forms.Panel();
this.btnComAlarmClear = new System.Windows.Forms.Button();
this.btnAxisStop = new System.Windows.Forms.Button();
this.btnAxisReturnHome = new System.Windows.Forms.Button();
this.comboBox1 = new System.Windows.Forms.ComboBox();
this.btnMCopy = new System.Windows.Forms.Button();
this.btnDelMove = new System.Windows.Forms.Button();
this.btnOpenAxis = new System.Windows.Forms.Button();
this.txtMiddleSpeed = new System.Windows.Forms.TextBox();
this.btnCloseAxis = new System.Windows.Forms.Button();
this.btnAddMove = new System.Windows.Forms.Button();
this.txtASpeed = new System.Windows.Forms.TextBox();
this.label1 = new System.Windows.Forms.Label();
this.label47 = new System.Windows.Forms.Label();
this.btnReadPosition = new System.Windows.Forms.Button();
this.btnAxisVMove = new System.Windows.Forms.Button();
this.label8 = new System.Windows.Forms.Label();
this.btnAxisRMove = new System.Windows.Forms.Button();
this.lblCountPulse = new System.Windows.Forms.TextBox();
this.btnAxisAMove = new System.Windows.Forms.Button();
this.label49 = new System.Windows.Forms.Label();
this.txtAPosition = new System.Windows.Forms.TextBox();
this.label46 = new System.Windows.Forms.Label();
this.label48 = new System.Windows.Forms.Label();
this.label45 = new System.Windows.Forms.Label();
this.txtAxisValue = new System.Windows.Forms.TextBox();
this.txtAxisDeviceName = new System.Windows.Forms.TextBox();
this.lblServerOn = new System.Windows.Forms.Label();
this.label13 = new System.Windows.Forms.Label();
this.textBoxON = new System.Windows.Forms.TextBox();
this.groupAxis.SuspendLayout();
this.groupBox1.SuspendLayout();
this.panel1.SuspendLayout();
this.SuspendLayout();
//
// groupAxis
//
this.groupAxis.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
| System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right)));
this.groupAxis.Controls.Add(this.groupBox1);
this.groupAxis.Controls.Add(this.panel1);
this.groupAxis.Controls.Add(this.lblServerOn);
this.groupAxis.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
this.groupAxis.Location = new System.Drawing.Point(4, 4);
this.groupAxis.Name = "groupAxis";
this.groupAxis.Size = new System.Drawing.Size(686, 296);
this.groupAxis.TabIndex = 218;
this.groupAxis.TabStop = false;
this.groupAxis.Text = "伺服运动";
//
// groupBox1
//
this.groupBox1.Controls.Add(this.label13);
this.groupBox1.Controls.Add(this.textBoxON);
this.groupBox1.Controls.Add(this.txtBusyStatus);
this.groupBox1.Controls.Add(this.label11);
this.groupBox1.Controls.Add(this.txtHomeStatus);
this.groupBox1.Controls.Add(this.label10);
this.groupBox1.Controls.Add(this.label3);
this.groupBox1.Controls.Add(this.label24);
this.groupBox1.Controls.Add(this.label5);
this.groupBox1.Controls.Add(this.btnGetAlarm);
this.groupBox1.Controls.Add(this.txtAlarmStatus);
this.groupBox1.Controls.Add(this.txtLimit2);
this.groupBox1.Controls.Add(this.txtServoStatue);
this.groupBox1.Controls.Add(this.label22);
this.groupBox1.Controls.Add(this.txtLimit1);
this.groupBox1.Controls.Add(this.label6);
this.groupBox1.Controls.Add(this.txtHomeSingle);
this.groupBox1.Location = new System.Drawing.Point(553, 12);
this.groupBox1.Name = "groupBox1";
this.groupBox1.Size = new System.Drawing.Size(125, 279);
this.groupBox1.TabIndex = 302;
this.groupBox1.TabStop = false;
this.groupBox1.Text = "状态";
//
// txtBusyStatus
//
this.txtBusyStatus.Enabled = false;
this.txtBusyStatus.Location = new System.Drawing.Point(91, 101);
this.txtBusyStatus.Name = "txtBusyStatus";
this.txtBusyStatus.Size = new System.Drawing.Size(25, 23);
this.txtBusyStatus.TabIndex = 288;
//
// label11
//
this.label11.AutoSize = true;
this.label11.Location = new System.Drawing.Point(6, 131);
this.label11.Name = "label11";
this.label11.Size = new System.Drawing.Size(81, 17);
this.label11.TabIndex = 292;
this.label11.Text = "HOME-CMP:";
//
// txtHomeStatus
//
this.txtHomeStatus.Enabled = false;
this.txtHomeStatus.Location = new System.Drawing.Point(91, 128);
this.txtHomeStatus.Name = "txtHomeStatus";
this.txtHomeStatus.Size = new System.Drawing.Size(25, 23);
this.txtHomeStatus.TabIndex = 291;
//
// label10
//
this.label10.AutoSize = true;
this.label10.Location = new System.Drawing.Point(21, 104);
this.label10.Name = "label10";
this.label10.Size = new System.Drawing.Size(66, 17);
this.label10.TabIndex = 289;
this.label10.Text = "BUSY状态:";
//
// label3
//
this.label3.AutoSize = true;
this.label3.Location = new System.Drawing.Point(28, 77);
this.label3.Name = "label3";
this.label3.Size = new System.Drawing.Size(59, 17);
this.label3.TabIndex = 286;
this.label3.Text = "报警状态:";
//
// label24
//
this.label24.AutoSize = true;
this.label24.Location = new System.Drawing.Point(16, 212);
this.label24.Name = "label24";
this.label24.Size = new System.Drawing.Size(71, 17);
this.label24.TabIndex = 316;
this.label24.Text = "负极限信号:";
this.label24.TextAlign = System.Drawing.ContentAlignment.MiddleRight;
//
// label5
//
this.label5.AutoSize = true;
this.label5.Location = new System.Drawing.Point(28, 50);
this.label5.Name = "label5";
this.label5.Size = new System.Drawing.Size(59, 17);
this.label5.TabIndex = 328;
this.label5.Text = "伺服状态:";
//
// btnGetAlarm
//
this.btnGetAlarm.FlatStyle = System.Windows.Forms.FlatStyle.Flat;
this.btnGetAlarm.Location = new System.Drawing.Point(7, 239);
this.btnGetAlarm.Name = "btnGetAlarm";
this.btnGetAlarm.Size = new System.Drawing.Size(110, 34);
this.btnGetAlarm.TabIndex = 284;
this.btnGetAlarm.Text = "读报状态";
this.btnGetAlarm.UseVisualStyleBackColor = true;
this.btnGetAlarm.Click += new System.EventHandler(this.btnGetAlarm_Click);
//
// txtAlarmStatus
//
this.txtAlarmStatus.Enabled = false;
this.txtAlarmStatus.Location = new System.Drawing.Point(91, 74);
this.txtAlarmStatus.Name = "txtAlarmStatus";
this.txtAlarmStatus.Size = new System.Drawing.Size(25, 23);
this.txtAlarmStatus.TabIndex = 285;
//
// txtLimit2
//
this.txtLimit2.Enabled = false;
this.txtLimit2.Location = new System.Drawing.Point(91, 209);
this.txtLimit2.Name = "txtLimit2";
this.txtLimit2.Size = new System.Drawing.Size(25, 23);
this.txtLimit2.TabIndex = 313;
//
// txtServoStatue
//
this.txtServoStatue.Enabled = false;
this.txtServoStatue.Location = new System.Drawing.Point(91, 47);
this.txtServoStatue.Name = "txtServoStatue";
this.txtServoStatue.Size = new System.Drawing.Size(25, 23);
this.txtServoStatue.TabIndex = 327;
//
// label22
//
this.label22.AutoSize = true;
this.label22.Location = new System.Drawing.Point(16, 185);
this.label22.Name = "label22";
this.label22.Size = new System.Drawing.Size(71, 17);
this.label22.TabIndex = 312;
this.label22.Text = "正极限信号:";
this.label22.TextAlign = System.Drawing.ContentAlignment.MiddleRight;
//
// txtLimit1
//
this.txtLimit1.Enabled = false;
this.txtLimit1.Location = new System.Drawing.Point(91, 182);
this.txtLimit1.Name = "txtLimit1";
this.txtLimit1.Size = new System.Drawing.Size(25, 23);
this.txtLimit1.TabIndex = 309;
//
// label6
//
this.label6.AutoSize = true;
this.label6.Location = new System.Drawing.Point(28, 158);
this.label6.Name = "label6";
this.label6.Size = new System.Drawing.Size(59, 17);
this.label6.TabIndex = 300;
this.label6.Text = "原点信号:";
//
// txtHomeSingle
//
this.txtHomeSingle.Enabled = false;
this.txtHomeSingle.Location = new System.Drawing.Point(91, 155);
this.txtHomeSingle.Name = "txtHomeSingle";
this.txtHomeSingle.Size = new System.Drawing.Size(25, 23);
this.txtHomeSingle.TabIndex = 297;
//
// panel1
//
this.panel1.Controls.Add(this.btnComAlarmClear);
this.panel1.Controls.Add(this.btnAxisStop);
this.panel1.Controls.Add(this.btnAxisReturnHome);
this.panel1.Controls.Add(this.comboBox1);
this.panel1.Controls.Add(this.btnMCopy);
this.panel1.Controls.Add(this.btnDelMove);
this.panel1.Controls.Add(this.btnOpenAxis);
this.panel1.Controls.Add(this.txtMiddleSpeed);
this.panel1.Controls.Add(this.btnCloseAxis);
this.panel1.Controls.Add(this.btnAddMove);
this.panel1.Controls.Add(this.txtASpeed);
this.panel1.Controls.Add(this.label1);
this.panel1.Controls.Add(this.label47);
this.panel1.Controls.Add(this.btnReadPosition);
this.panel1.Controls.Add(this.btnAxisVMove);
this.panel1.Controls.Add(this.label8);
this.panel1.Controls.Add(this.btnAxisRMove);
this.panel1.Controls.Add(this.lblCountPulse);
this.panel1.Controls.Add(this.btnAxisAMove);
this.panel1.Controls.Add(this.label49);
this.panel1.Controls.Add(this.txtAPosition);
this.panel1.Controls.Add(this.label46);
this.panel1.Controls.Add(this.label48);
this.panel1.Controls.Add(this.label45);
this.panel1.Controls.Add(this.txtAxisValue);
this.panel1.Controls.Add(this.txtAxisDeviceName);
this.panel1.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
this.panel1.Location = new System.Drawing.Point(7, 17);
this.panel1.Name = "panel1";
this.panel1.Size = new System.Drawing.Size(540, 273);
this.panel1.TabIndex = 219;
//
// btnComAlarmClear
//
this.btnComAlarmClear.FlatStyle = System.Windows.Forms.FlatStyle.Flat;
this.btnComAlarmClear.Location = new System.Drawing.Point(307, 172);
this.btnComAlarmClear.Name = "btnComAlarmClear";
this.btnComAlarmClear.Size = new System.Drawing.Size(110, 34);
this.btnComAlarmClear.TabIndex = 50;
this.btnComAlarmClear.Text = "清除报警";
this.btnComAlarmClear.UseVisualStyleBackColor = true;
this.btnComAlarmClear.Click += new System.EventHandler(this.btnComAlarmClear_Click);
//
// btnAxisStop
//
this.btnAxisStop.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(255)))), ((int)(((byte)(255)))), ((int)(((byte)(192)))));
this.btnAxisStop.Cursor = System.Windows.Forms.Cursors.Default;
this.btnAxisStop.FlatStyle = System.Windows.Forms.FlatStyle.Flat;
this.btnAxisStop.Font = new System.Drawing.Font("微软雅黑", 10.5F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
this.btnAxisStop.ForeColor = System.Drawing.SystemColors.ControlText;
this.btnAxisStop.Location = new System.Drawing.Point(427, 93);
this.btnAxisStop.Name = "btnAxisStop";
this.btnAxisStop.RightToLeft = System.Windows.Forms.RightToLeft.No;
this.btnAxisStop.Size = new System.Drawing.Size(110, 114);
this.btnAxisStop.TabIndex = 246;
this.btnAxisStop.Text = " 停止运动";
this.btnAxisStop.UseVisualStyleBackColor = false;
this.btnAxisStop.Click += new System.EventHandler(this.btnAxisStop_Click);
//
// btnAxisReturnHome
//
this.btnAxisReturnHome.BackColor = System.Drawing.SystemColors.Control;
this.btnAxisReturnHome.Cursor = System.Windows.Forms.Cursors.Default;
this.btnAxisReturnHome.FlatStyle = System.Windows.Forms.FlatStyle.Flat;
this.btnAxisReturnHome.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
this.btnAxisReturnHome.ForeColor = System.Drawing.SystemColors.ControlText;
this.btnAxisReturnHome.Location = new System.Drawing.Point(307, 132);
this.btnAxisReturnHome.Name = "btnAxisReturnHome";
this.btnAxisReturnHome.RightToLeft = System.Windows.Forms.RightToLeft.No;
this.btnAxisReturnHome.Size = new System.Drawing.Size(110, 34);
this.btnAxisReturnHome.TabIndex = 247;
this.btnAxisReturnHome.Text = "原点返回";
this.btnAxisReturnHome.UseVisualStyleBackColor = true;
this.btnAxisReturnHome.Click += new System.EventHandler(this.btnAxisReturnHome_Click);
//
// comboBox1
//
this.comboBox1.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
this.comboBox1.Font = new System.Drawing.Font("微软雅黑", 10.5F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
this.comboBox1.FormattingEnabled = true;
this.comboBox1.Location = new System.Drawing.Point(71, 16);
this.comboBox1.Name = "comboBox1";
this.comboBox1.Size = new System.Drawing.Size(227, 28);
this.comboBox1.TabIndex = 301;
this.comboBox1.SelectedIndexChanged += new System.EventHandler(this.comboBox1_SelectedIndexChanged);
//
// btnMCopy
//
this.btnMCopy.FlatStyle = System.Windows.Forms.FlatStyle.Flat;
this.btnMCopy.Location = new System.Drawing.Point(468, 228);
this.btnMCopy.Name = "btnMCopy";
this.btnMCopy.Size = new System.Drawing.Size(69, 28);
this.btnMCopy.TabIndex = 334;
this.btnMCopy.Text = "复制";
this.btnMCopy.UseVisualStyleBackColor = true;
this.btnMCopy.Visible = false;
//
// btnDelMove
//
this.btnDelMove.BackColor = System.Drawing.SystemColors.Control;
this.btnDelMove.FlatStyle = System.Windows.Forms.FlatStyle.Flat;
this.btnDelMove.Font = new System.Drawing.Font("微软雅黑", 10.5F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
this.btnDelMove.Location = new System.Drawing.Point(321, 220);
this.btnDelMove.Name = "btnDelMove";
this.btnDelMove.Size = new System.Drawing.Size(140, 45);
this.btnDelMove.TabIndex = 332;
this.btnDelMove.Text = "点动-(上升)";
this.btnDelMove.UseVisualStyleBackColor = false;
this.btnDelMove.MouseDown += new System.Windows.Forms.MouseEventHandler(this.btnDelMove_MouseDown);
this.btnDelMove.MouseUp += new System.Windows.Forms.MouseEventHandler(this.btnDelMove_MouseUp);
//
// btnOpenAxis
//
this.btnOpenAxis.BackColor = System.Drawing.SystemColors.Control;
this.btnOpenAxis.Cursor = System.Windows.Forms.Cursors.Default;
this.btnOpenAxis.FlatStyle = System.Windows.Forms.FlatStyle.Flat;
this.btnOpenAxis.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
this.btnOpenAxis.ForeColor = System.Drawing.SystemColors.ControlText;
this.btnOpenAxis.Location = new System.Drawing.Point(307, 12);
this.btnOpenAxis.Name = "btnOpenAxis";
this.btnOpenAxis.RightToLeft = System.Windows.Forms.RightToLeft.No;
this.btnOpenAxis.Size = new System.Drawing.Size(110, 34);
this.btnOpenAxis.TabIndex = 253;
this.btnOpenAxis.Text = "打开伺服";
this.btnOpenAxis.UseVisualStyleBackColor = true;
this.btnOpenAxis.Click += new System.EventHandler(this.btnOpenAxis_Click);
//
// txtMiddleSpeed
//
this.txtMiddleSpeed.Font = new System.Drawing.Font("微软雅黑", 10.5F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
this.txtMiddleSpeed.Location = new System.Drawing.Point(74, 229);
this.txtMiddleSpeed.MaxLength = 6;
this.txtMiddleSpeed.Name = "txtMiddleSpeed";
this.txtMiddleSpeed.Size = new System.Drawing.Size(73, 26);
this.txtMiddleSpeed.TabIndex = 331;
this.txtMiddleSpeed.Text = "100";
//
// btnCloseAxis
//
this.btnCloseAxis.BackColor = System.Drawing.SystemColors.Control;
this.btnCloseAxis.Cursor = System.Windows.Forms.Cursors.Default;
this.btnCloseAxis.FlatStyle = System.Windows.Forms.FlatStyle.Flat;
this.btnCloseAxis.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
this.btnCloseAxis.ForeColor = System.Drawing.SystemColors.ControlText;
this.btnCloseAxis.Location = new System.Drawing.Point(427, 12);
this.btnCloseAxis.Name = "btnCloseAxis";
this.btnCloseAxis.RightToLeft = System.Windows.Forms.RightToLeft.No;
this.btnCloseAxis.Size = new System.Drawing.Size(110, 34);
this.btnCloseAxis.TabIndex = 252;
this.btnCloseAxis.Text = "关闭伺服";
this.btnCloseAxis.UseVisualStyleBackColor = true;
this.btnCloseAxis.Click += new System.EventHandler(this.btnCloseAxis_Click);
//
// btnAddMove
//
this.btnAddMove.BackColor = System.Drawing.SystemColors.Control;
this.btnAddMove.FlatStyle = System.Windows.Forms.FlatStyle.Flat;
this.btnAddMove.Font = new System.Drawing.Font("微软雅黑", 10.5F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
this.btnAddMove.Location = new System.Drawing.Point(172, 220);
this.btnAddMove.Name = "btnAddMove";
this.btnAddMove.Size = new System.Drawing.Size(140, 45);
this.btnAddMove.TabIndex = 330;
this.btnAddMove.Text = "点动+(上升)";
this.btnAddMove.UseVisualStyleBackColor = false;
this.btnAddMove.MouseDown += new System.Windows.Forms.MouseEventHandler(this.btnAddMove_MouseDown);
this.btnAddMove.MouseUp += new System.Windows.Forms.MouseEventHandler(this.btnAddMove_MouseUp);
//
// txtASpeed
//
this.txtASpeed.AcceptsReturn = true;
this.txtASpeed.BackColor = System.Drawing.SystemColors.Window;
this.txtASpeed.Cursor = System.Windows.Forms.Cursors.IBeam;
this.txtASpeed.Font = new System.Drawing.Font("微软雅黑", 10.5F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
this.txtASpeed.ForeColor = System.Drawing.SystemColors.WindowText;
this.txtASpeed.Location = new System.Drawing.Point(207, 102);
this.txtASpeed.MaxLength = 12;
this.txtASpeed.Name = "txtASpeed";
this.txtASpeed.RightToLeft = System.Windows.Forms.RightToLeft.No;
this.txtASpeed.Size = new System.Drawing.Size(91, 26);
this.txtASpeed.TabIndex = 251;
this.txtASpeed.Text = "200";
//
// label1
//
this.label1.AutoSize = true;
this.label1.Location = new System.Drawing.Point(9, 234);
this.label1.Name = "label1";
this.label1.Size = new System.Drawing.Size(68, 17);
this.label1.TabIndex = 329;
this.label1.Text = "点动速度:";
//
// label47
//
this.label47.AutoSize = true;
this.label47.Cursor = System.Windows.Forms.Cursors.Default;
this.label47.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
this.label47.ForeColor = System.Drawing.SystemColors.ControlText;
this.label47.Location = new System.Drawing.Point(142, 107);
this.label47.Name = "label47";
this.label47.RightToLeft = System.Windows.Forms.RightToLeft.No;
this.label47.Size = new System.Drawing.Size(59, 17);
this.label47.TabIndex = 250;
this.label47.Text = "目标速度:";
this.label47.TextAlign = System.Drawing.ContentAlignment.MiddleRight;
//
// btnReadPosition
//
this.btnReadPosition.BackColor = System.Drawing.SystemColors.Control;
this.btnReadPosition.Cursor = System.Windows.Forms.Cursors.Default;
this.btnReadPosition.FlatStyle = System.Windows.Forms.FlatStyle.Flat;
this.btnReadPosition.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
this.btnReadPosition.ForeColor = System.Drawing.SystemColors.ControlText;
this.btnReadPosition.Location = new System.Drawing.Point(188, 143);
this.btnReadPosition.Name = "btnReadPosition";
this.btnReadPosition.RightToLeft = System.Windows.Forms.RightToLeft.No;
this.btnReadPosition.Size = new System.Drawing.Size(110, 34);
this.btnReadPosition.TabIndex = 278;
this.btnReadPosition.Text = "读取位置";
this.btnReadPosition.UseVisualStyleBackColor = true;
this.btnReadPosition.Click += new System.EventHandler(this.btnReadPosition_Click);
//
// btnAxisVMove
//
this.btnAxisVMove.BackColor = System.Drawing.SystemColors.Control;
this.btnAxisVMove.Cursor = System.Windows.Forms.Cursors.Default;
this.btnAxisVMove.FlatStyle = System.Windows.Forms.FlatStyle.Flat;
this.btnAxisVMove.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
this.btnAxisVMove.ForeColor = System.Drawing.SystemColors.ControlText;
this.btnAxisVMove.Location = new System.Drawing.Point(307, 92);
this.btnAxisVMove.Name = "btnAxisVMove";
this.btnAxisVMove.RightToLeft = System.Windows.Forms.RightToLeft.No;
this.btnAxisVMove.Size = new System.Drawing.Size(110, 34);
this.btnAxisVMove.TabIndex = 249;
this.btnAxisVMove.Text = "匀速运动";
this.btnAxisVMove.UseVisualStyleBackColor = true;
this.btnAxisVMove.Click += new System.EventHandler(this.btnAxisVMove_Click);
//
// label8
//
this.label8.AutoSize = true;
this.label8.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
this.label8.Location = new System.Drawing.Point(18, 152);
this.label8.Name = "label8";
this.label8.Size = new System.Drawing.Size(59, 17);
this.label8.TabIndex = 255;
this.label8.Text = "实时位置:";
//
// btnAxisRMove
//
this.btnAxisRMove.BackColor = System.Drawing.SystemColors.Control;
this.btnAxisRMove.Cursor = System.Windows.Forms.Cursors.Default;
this.btnAxisRMove.FlatStyle = System.Windows.Forms.FlatStyle.Flat;
this.btnAxisRMove.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
this.btnAxisRMove.ForeColor = System.Drawing.SystemColors.ControlText;
this.btnAxisRMove.Location = new System.Drawing.Point(427, 51);
this.btnAxisRMove.Name = "btnAxisRMove";
this.btnAxisRMove.RightToLeft = System.Windows.Forms.RightToLeft.No;
this.btnAxisRMove.Size = new System.Drawing.Size(110, 34);
this.btnAxisRMove.TabIndex = 248;
this.btnAxisRMove.Text = "相对运动";
this.btnAxisRMove.UseVisualStyleBackColor = true;
this.btnAxisRMove.Click += new System.EventHandler(this.btnAxisRMove_Click);
//
// lblCountPulse
//
this.lblCountPulse.Font = new System.Drawing.Font("微软雅黑", 10.5F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
this.lblCountPulse.Location = new System.Drawing.Point(83, 147);
this.lblCountPulse.Name = "lblCountPulse";
this.lblCountPulse.ReadOnly = true;
this.lblCountPulse.Size = new System.Drawing.Size(103, 26);
this.lblCountPulse.TabIndex = 38;
//
// btnAxisAMove
//
this.btnAxisAMove.BackColor = System.Drawing.SystemColors.Control;
this.btnAxisAMove.Cursor = System.Windows.Forms.Cursors.Default;
this.btnAxisAMove.FlatStyle = System.Windows.Forms.FlatStyle.Flat;
this.btnAxisAMove.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
this.btnAxisAMove.ForeColor = System.Drawing.SystemColors.ControlText;
this.btnAxisAMove.Location = new System.Drawing.Point(307, 52);
this.btnAxisAMove.Name = "btnAxisAMove";
this.btnAxisAMove.RightToLeft = System.Windows.Forms.RightToLeft.No;
this.btnAxisAMove.Size = new System.Drawing.Size(110, 34);
this.btnAxisAMove.TabIndex = 245;
this.btnAxisAMove.Text = "绝对运动";
this.btnAxisAMove.UseVisualStyleBackColor = true;
this.btnAxisAMove.Click += new System.EventHandler(this.btnAxisAMove_Click);
//
// label49
//
this.label49.AutoSize = true;
this.label49.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
this.label49.ImageAlign = System.Drawing.ContentAlignment.MiddleRight;
this.label49.Location = new System.Drawing.Point(10, 21);
this.label49.Name = "label49";
this.label49.Size = new System.Drawing.Size(51, 17);
this.label49.TabIndex = 233;
this.label49.Text = "AC伺服:";
this.label49.TextAlign = System.Drawing.ContentAlignment.MiddleRight;
//
// txtAPosition
//
this.txtAPosition.BackColor = System.Drawing.SystemColors.Window;
this.txtAPosition.Cursor = System.Windows.Forms.Cursors.IBeam;
this.txtAPosition.Font = new System.Drawing.Font("微软雅黑", 10.5F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
this.txtAPosition.ForeColor = System.Drawing.SystemColors.WindowText;
this.txtAPosition.Location = new System.Drawing.Point(207, 60);
this.txtAPosition.MaxLength = 12;
this.txtAPosition.Name = "txtAPosition";
this.txtAPosition.RightToLeft = System.Windows.Forms.RightToLeft.No;
this.txtAPosition.Size = new System.Drawing.Size(91, 26);
this.txtAPosition.TabIndex = 244;
this.txtAPosition.Text = "3000";
//
// label46
//
this.label46.AutoSize = true;
this.label46.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
this.label46.ImageAlign = System.Drawing.ContentAlignment.MiddleRight;
this.label46.Location = new System.Drawing.Point(26, 107);
this.label46.Name = "label46";
this.label46.Size = new System.Drawing.Size(35, 17);
this.label46.TabIndex = 239;
this.label46.Text = "地址:";
this.label46.TextAlign = System.Drawing.ContentAlignment.MiddleRight;
//
// label48
//
this.label48.AutoSize = true;
this.label48.Cursor = System.Windows.Forms.Cursors.Default;
this.label48.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
this.label48.ForeColor = System.Drawing.SystemColors.ControlText;
this.label48.Location = new System.Drawing.Point(142, 65);
this.label48.Name = "label48";
this.label48.RightToLeft = System.Windows.Forms.RightToLeft.No;
this.label48.Size = new System.Drawing.Size(59, 17);
this.label48.TabIndex = 243;
this.label48.Text = "目标位置:";
this.label48.TextAlign = System.Drawing.ContentAlignment.MiddleRight;
//
// label45
//
this.label45.AutoSize = true;
this.label45.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
this.label45.ImageAlign = System.Drawing.ContentAlignment.MiddleRight;
this.label45.Location = new System.Drawing.Point(14, 65);
this.label45.Name = "label45";
this.label45.Size = new System.Drawing.Size(47, 17);
this.label45.TabIndex = 240;
this.label45.Text = "端口号:";
this.label45.TextAlign = System.Drawing.ContentAlignment.MiddleRight;
//
// txtAxisValue
//
this.txtAxisValue.Font = new System.Drawing.Font("微软雅黑", 10.5F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
this.txtAxisValue.Location = new System.Drawing.Point(71, 102);
this.txtAxisValue.MaxLength = 10;
this.txtAxisValue.Name = "txtAxisValue";
this.txtAxisValue.ReadOnly = true;
this.txtAxisValue.Size = new System.Drawing.Size(68, 26);
this.txtAxisValue.TabIndex = 242;
this.txtAxisValue.Text = "0";
//
// txtAxisDeviceName
//
this.txtAxisDeviceName.Font = new System.Drawing.Font("微软雅黑", 10.5F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
this.txtAxisDeviceName.Location = new System.Drawing.Point(71, 60);
this.txtAxisDeviceName.MaxLength = 10;
this.txtAxisDeviceName.Name = "txtAxisDeviceName";
this.txtAxisDeviceName.ReadOnly = true;
this.txtAxisDeviceName.Size = new System.Drawing.Size(68, 26);
this.txtAxisDeviceName.TabIndex = 241;
this.txtAxisDeviceName.Text = "0";
//
// lblServerOn
//
this.lblServerOn.AutoSize = true;
this.lblServerOn.FlatStyle = System.Windows.Forms.FlatStyle.Flat;
this.lblServerOn.Font = new System.Drawing.Font("微软雅黑", 10.5F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
this.lblServerOn.ForeColor = System.Drawing.Color.Red;
this.lblServerOn.Location = new System.Drawing.Point(32, 115);
this.lblServerOn.Name = "lblServerOn";
this.lblServerOn.Size = new System.Drawing.Size(0, 19);
this.lblServerOn.TabIndex = 268;
//
// label13
//
this.label13.AutoSize = true;
this.label13.Location = new System.Drawing.Point(8, 23);
this.label13.Name = "label13";
this.label13.Size = new System.Drawing.Size(79, 17);
this.label13.TabIndex = 330;
this.label13.Text = "伺服ON输入:";
//
// textBoxON
//
this.textBoxON.Enabled = false;
this.textBoxON.Location = new System.Drawing.Point(91, 20);
this.textBoxON.Name = "textBoxON";
this.textBoxON.Size = new System.Drawing.Size(25, 23);
this.textBoxON.TabIndex = 329;
//
// AxisMoveControl
//
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.None;
this.Controls.Add(this.groupAxis);
this.Name = "AxisMoveControl";
this.Size = new System.Drawing.Size(696, 305);
this.groupAxis.ResumeLayout(false);
this.groupAxis.PerformLayout();
this.groupBox1.ResumeLayout(false);
this.groupBox1.PerformLayout();
this.panel1.ResumeLayout(false);
this.panel1.PerformLayout();
this.ResumeLayout(false);
}
#endregion
private System.Windows.Forms.GroupBox groupAxis;
private System.Windows.Forms.ComboBox comboBox1;
private System.Windows.Forms.Label label6;
private System.Windows.Forms.TextBox txtHomeSingle;
private System.Windows.Forms.Label label11;
private System.Windows.Forms.TextBox txtHomeStatus;
private System.Windows.Forms.Label label10;
private System.Windows.Forms.TextBox txtBusyStatus;
private System.Windows.Forms.Label label3;
private System.Windows.Forms.TextBox txtAlarmStatus;
private System.Windows.Forms.Button btnGetAlarm;
internal System.Windows.Forms.Button btnReadPosition;
private System.Windows.Forms.Label lblServerOn;
private System.Windows.Forms.Label label8;
internal System.Windows.Forms.Button btnOpenAxis;
internal System.Windows.Forms.Button btnCloseAxis;
private System.Windows.Forms.TextBox lblCountPulse;
internal System.Windows.Forms.TextBox txtASpeed;
internal System.Windows.Forms.Label label47;
internal System.Windows.Forms.Button btnAxisVMove;
internal System.Windows.Forms.Button btnAxisRMove;
internal System.Windows.Forms.Button btnAxisReturnHome;
internal System.Windows.Forms.Button btnAxisAMove;
private System.Windows.Forms.Button btnComAlarmClear;
internal System.Windows.Forms.TextBox txtAPosition;
internal System.Windows.Forms.Label label48;
internal System.Windows.Forms.Button btnAxisStop;
private System.Windows.Forms.TextBox txtAxisValue;
private System.Windows.Forms.TextBox txtAxisDeviceName;
private System.Windows.Forms.Label label45;
private System.Windows.Forms.Label label46;
private System.Windows.Forms.Label label49;
private System.Windows.Forms.Label label24;
private System.Windows.Forms.TextBox txtLimit2;
private System.Windows.Forms.Label label22;
private System.Windows.Forms.TextBox txtLimit1;
private System.Windows.Forms.Panel panel1;
private System.Windows.Forms.Label label5;
private System.Windows.Forms.TextBox txtServoStatue;
private System.Windows.Forms.Button btnMCopy;
private System.Windows.Forms.Button btnDelMove;
private System.Windows.Forms.TextBox txtMiddleSpeed;
private System.Windows.Forms.Button btnAddMove;
private System.Windows.Forms.Label label1;
private System.Windows.Forms.GroupBox groupBox1;
private System.Windows.Forms.Label label13;
private System.Windows.Forms.TextBox textBoxON;
}
}
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using OnlineStore.DeviceLibrary;
using OnlineStore.Common;
using System.Threading;
using OnlineStore.LoadCSVLibrary;
namespace OnlineStore.AssemblyLine
{
public partial class AxisMoveControl : UserControl
{
private List<ConfigMoveAxis> axisList = new List<ConfigMoveAxis>();
private string PortName = "";
private int SlvAddr = 0;
public AxisMoveControl( )
{
InitializeComponent();
}
public void LoadData( params ConfigMoveAxis[] moveAxis)
{
axisList = new List<ConfigMoveAxis>(moveAxis);
if (axisList.Count > 0)
{
comboBox1.Items.Clear();
foreach (ConfigMoveAxis a in axisList)
{
comboBox1.Items.Add(a.Explain);
}
comboBox1.SelectedIndex = 0;
PortName = moveAxis[0].DeviceName;
SlvAddr = moveAxis[0].GetAxisValue();
txtAxisDeviceName.Text = PortName;
txtAxisValue.Text = SlvAddr.ToString();
}
}
private void btnOpenAxis_Click(object sender, EventArgs e)
{
LogUtil.info("点击【打开伺服】,【" + PortName + "_" + SlvAddr + "】 ");
ACServerManager.AlarmClear(PortName, SlvAddr);
System.Threading.Thread.Sleep(100);
ACServerManager.ServoOn(PortName, SlvAddr);
System.Threading.Thread.Sleep(100);
}
private void btnCloseAxis_Click(object sender, EventArgs e)
{
LogUtil.info("点击【关闭伺服】,【" + PortName + "_" + SlvAddr + "】 ");
// ACServerManager.ServoOff(PortName, SlvAddr);
ACServerManager.ServoOff(PortName, SlvAddr);
}
private void btnAxisAMove_Click(object sender, EventArgs e)
{
int position = FormUtil.GetIntValue(txtAPosition);
int speed = FormUtil.GetIntValue(txtASpeed);
LogUtil.info("点击【绝对运动】,【" + PortName + "_" + SlvAddr + "】位置【" + position + "】速度【" + speed + "】");
ACServerManager.AbsMove(PortName, SlvAddr, position, speed);
}
private void btnAxisRMove_Click(object sender, EventArgs e)
{
int position = FormUtil.GetIntValue(txtAPosition);
int speed = FormUtil.GetIntValue(txtASpeed);
LogUtil.info("点击【相对运动】,【" + PortName + "_" + SlvAddr + "】位置【" + position + "】速度【" + speed + "】");
ACServerManager.RelMove(PortName, SlvAddr, position, speed);
}
private void btnAxisVMove_Click(object sender, EventArgs e)
{
int speed = FormUtil.GetIntValue(txtASpeed);
LogUtil.info("点击【匀速运动】,【" + PortName + "_" + SlvAddr + "】 速度【" + speed + "】");
ACServerManager.SpeedMove(PortName, SlvAddr, speed);
}
private void btnAxisStop_Click(object sender, EventArgs e)
{
LogUtil.info("点击【停止运动】,【" + PortName + "_" + SlvAddr + "】 ");
ACServerManager.SuddenStop(PortName, SlvAddr);
if (btnAddMove.BackColor == Color.Green)
{
btnAddMove.BackColor = System.Drawing.SystemColors.Control;
}
if (btnDelMove.BackColor == Color.Green)
{
btnDelMove.BackColor = System.Drawing.SystemColors.Control;
}
btnReadPosition_Click(null, null);
}
private void btnComAlarmClear_Click(object sender, EventArgs e)
{
LogUtil.info("点击【清理报警】,【" + PortName + "_" + SlvAddr + "】 ");
ACServerManager.AlarmClear(PortName, SlvAddr);
Thread.Sleep(100);
ACServerManager.ServoOn(PortName, SlvAddr);
}
private void btnAxisReturnHome_Click(object sender, EventArgs e)
{
int speed = FormUtil.GetIntValue(txtASpeed);
LogUtil.info("点击【原点返回】,【" + PortName + "_" + SlvAddr + "】 速度【" + speed + "】");
ACServerManager.HomeMove(PortName, SlvAddr, speed);
}
private void btnGetAlarm_Click(object sender, EventArgs e)
{
txtServoStatue.Text = ACServerManager.SRV_ON(PortName, SlvAddr) ? "✔" : "✘";
this.txtAlarmStatus.Text = ACServerManager.GetAlarmStatus(PortName, SlvAddr).ToString();
this.txtBusyStatus.Text = ACServerManager.GetBusyStatus(PortName, SlvAddr).ToString();
this.txtHomeStatus.Text = ACServerManager.GetHomeEndStatus(PortName, SlvAddr).ToString();
this.txtHomeSingle.Text = ACServerManager.GetHomeSingle(PortName, SlvAddr).ToString();
this.txtLimit1.Text = ACServerManager.GetLimitPositiveSingle(PortName, SlvAddr).ToString();
this.txtLimit2.Text = ACServerManager.GetLimitNegativeSingle(PortName, SlvAddr).ToString();
txtServoStatue.Text = ACServerManager.ServerOnStatus(PortName, SlvAddr) ? "✔" : "✘";
}
private void btnReadPosition_Click(object sender, EventArgs e)
{
lblCountPulse.Text = ACServerManager.GetActualtPosition(PortName, SlvAddr).ToString();
}
private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
{
if (comboBox1.SelectedIndex >= 0)
{
ConfigMoveAxis axis = axisList[comboBox1.SelectedIndex];
PortName = axis.DeviceName;
SlvAddr = axis.GetAxisValue();
txtAxisDeviceName.Text = PortName;
txtAxisValue.Text = SlvAddr.ToString();
Color color = Color.Black;
if (comboBox1.SelectedIndex.Equals(0))
{
btnAddMove.Text = "点动+(前进)";
btnDelMove.Text = "点动-(后退)";
color = Color.Blue;
}
else if (comboBox1.SelectedIndex.Equals(1))
{
btnAddMove.Text = "点动+(前进)";
btnDelMove.Text = "点动-(后退)";
color = Color.Green;
} else if (comboBox1.SelectedIndex.Equals(2))
{
btnAddMove.Text = "点动+(上升)";
btnDelMove.Text = "点动-(下降)";
color = Color.Red;
}
txtASpeed.Text = axis.TargetSpeed / 2 + "";
txtMiddleSpeed.Text = axis.TargetPosition / 2 + "";
btnOpenAxis.ForeColor = color;
btnCloseAxis.ForeColor = color;
btnAxisAMove.ForeColor = color;
btnAxisRMove.ForeColor = color;
btnAxisVMove.ForeColor = color;
btnAxisReturnHome.ForeColor = color;
btnAxisStop.ForeColor = color;
btnComAlarmClear.ForeColor = color;
btnReadPosition.ForeColor = color;
btnGetAlarm.ForeColor = color;
btnAddMove.ForeColor = color;
btnDelMove.ForeColor = color;
this.txtAlarmStatus.Text = "";
this.txtBusyStatus.Text = "";
this.txtHomeStatus.Text = "";
this.txtHomeSingle.Text = "";
this.txtLimit1.Text = "";
this.txtLimit2.Text = "";
txtServoStatue.Text = "";
}
}
private void AxisMove( int speed)
{
LogUtil.info("【" + PortName + "_" + SlvAddr + "】点动: 速度:" + speed);
ACServerManager.SpeedMove(PortName, SlvAddr, speed);
}
private void btnAddMove_MouseDown(object sender, MouseEventArgs e)
{
if (btnAddMove.BackColor.Equals(System.Drawing.SystemColors.Control))
{
int speed = FormUtil.GetIntValue(txtMiddleSpeed);
if (speed <= 0)
{
MessageBox.Show("提示", "请先输入正确的速度");
return;
}
btnAddMove.BackColor = Color.Green;
AxisMove( speed);
}
}
private void btnAddMove_MouseUp(object sender, MouseEventArgs e)
{
if (btnAddMove.BackColor == Color.Green )
{
btnAddMove.BackColor = System.Drawing.SystemColors.Control;
ACServerManager.SuddenStop(PortName, SlvAddr);
btnReadPosition_Click(null, null);
}
}
private void btnDelMove_MouseDown(object sender, MouseEventArgs e)
{
if (btnDelMove.BackColor.Equals(System.Drawing.SystemColors.Control))
{
int speed = FormUtil.GetIntValue(txtMiddleSpeed);
if (speed <= 0)
{
MessageBox.Show("提示", "请先输入正确的速度");
return;
}
btnDelMove.BackColor = Color.Green;
AxisMove(-speed);
}
}
private void btnDelMove_MouseUp(object sender, MouseEventArgs e)
{
if ( btnDelMove.BackColor == Color.Green)
{
btnDelMove.BackColor = System.Drawing.SystemColors.Control;
ACServerManager.SuddenStop(PortName, SlvAddr);
btnReadPosition_Click(null, null);
}
}
}
}
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
</root>
\ No newline at end of file \ No newline at end of file
...@@ -58,6 +58,7 @@ ...@@ -58,6 +58,7 @@
<Compile Include="acSquareStore\Square_BoxBean.cs" /> <Compile Include="acSquareStore\Square_BoxBean.cs" />
<Compile Include="acSquareStore\Square_BoxBean_Partial.cs" /> <Compile Include="acSquareStore\Square_BoxBean_Partial.cs" />
<Compile Include="acSquareStore\StoreManager.cs" /> <Compile Include="acSquareStore\StoreManager.cs" />
<Compile Include="baan\AxisBean.cs" />
<Compile Include="IO\AIOBOX\AIOBOXManager.cs" /> <Compile Include="IO\AIOBOX\AIOBOXManager.cs" />
<Compile Include="IO\IOManager.cs" /> <Compile Include="IO\IOManager.cs" />
<Compile Include="IO\KangNaiDe\KNDManager.cs" /> <Compile Include="IO\KangNaiDe\KNDManager.cs" />
......
...@@ -8,11 +8,18 @@ namespace OnlineStore.DeviceLibrary ...@@ -8,11 +8,18 @@ namespace OnlineStore.DeviceLibrary
public class ACCMDManager public class ACCMDManager
{ {
/// <summary> /// <summary>
/// 0020h 伺服 On 输入(SRV-ON) ReadOnly 0:输入 OFF、1:输入 ON
/// </summary>
public static string SRV_ON = "0020";
/// <summary>
/// 0130h 选通输入(STB) 状态 ReadOnly 0: 输入 OFF 1: 输入 ON
/// </summary>
internal static string STB_State = "0130";
/// <summary>
/// 0132h 原点接近传感器输入 (HOME) 状态 ReadOnly 0: 输入 OFF 1: 输入 ON /// 0132h 原点接近传感器输入 (HOME) 状态 ReadOnly 0: 输入 OFF 1: 输入 ON
/// </summary> /// </summary>
public static string Home_Single = "0132"; public static string Home_Single = "0132";
//
//
/// <summary> /// <summary>
/// 0022h 负方向驱动禁止输入(NOT) ReadOnly 0: 输入 OFF、 1: 输入 ON /// 0022h 负方向驱动禁止输入(NOT) ReadOnly 0: 输入 OFF、 1: 输入 ON
/// </summary> /// </summary>
......
using OnlineStore.Common; using OnlineStore.Common;
using OnlineStore.LoadCSVLibrary; using OnlineStore.LoadCSVLibrary;
using System; using System;
using System.Collections.Concurrent;
using System.Collections.Generic; using System.Collections.Generic;
using System.IO.Ports; using System.IO.Ports;
using System.Linq; using System.Linq;
...@@ -8,17 +9,17 @@ using System.Text; ...@@ -8,17 +9,17 @@ using System.Text;
using System.Threading; using System.Threading;
namespace OnlineStore.DeviceLibrary namespace OnlineStore.DeviceLibrary
{ {
/// <summary> /// <summary>
/// 外部调用的接口放在此文件中 /// 外部调用的接口放在此文件中
/// </summary> /// </summary>
public partial class ACServerManager public partial class ACServerManager
{ {
public static bool IsShowMsg = false; public static bool IsShowMsg = false ;
private static int SleepMSendons = 20; private static int SleepMSendons = 20;
private static int ReviceOutTimeMS = 100; private static int ReviceOutTimeMS = 100;
private static Dictionary<string, Dictionary<string, int>> ComAddrValue = new Dictionary<string, Dictionary<string, int>>(); private static ConcurrentDictionary<string, ConcurrentDictionary<string, int>> ComAddrValue = new ConcurrentDictionary<string, ConcurrentDictionary<string, int>>();
private static string mapObj = ""; //private static string mapObj = "";
private static int GetAddrValue(string portName, int slvAddr, string addr) private static int GetAddrValue(string portName, int slvAddr, string addr)
{ {
...@@ -26,7 +27,7 @@ namespace OnlineStore.DeviceLibrary ...@@ -26,7 +27,7 @@ namespace OnlineStore.DeviceLibrary
try try
{ {
string name = portName + "_" + slvAddr; string name = portName + "_" + slvAddr;
Dictionary<string, int> map = null; ConcurrentDictionary<string, int> map = null;
ComAddrValue.TryGetValue(name, out map); ComAddrValue.TryGetValue(name, out map);
if (map == null) if (map == null)
{ {
...@@ -39,7 +40,7 @@ namespace OnlineStore.DeviceLibrary ...@@ -39,7 +40,7 @@ namespace OnlineStore.DeviceLibrary
} }
catch (Exception ex) catch (Exception ex)
{ {
LogUtil.error("UpdateAddrValue出错:" + ex.ToString()); LogUtil.error("UpdateAddrValue出错:"+ex.ToString());
} }
return value; return value;
} }
...@@ -47,26 +48,26 @@ namespace OnlineStore.DeviceLibrary ...@@ -47,26 +48,26 @@ namespace OnlineStore.DeviceLibrary
{ {
try try
{ {
lock (mapObj) //lock (mapObj)
//{
string name = portName + "_" + slvAddr;
ConcurrentDictionary<string, int> map = null;
ComAddrValue.TryGetValue(name, out map);
if (map == null)
{ {
string name = portName + "_" + slvAddr; map = new ConcurrentDictionary<string, int>();
Dictionary<string, int> map = null; ComAddrValue.TryAdd(name, map);
ComAddrValue.TryGetValue(name, out map);
if (map == null)
{
map = new Dictionary<string, int>();
ComAddrValue.Add(name, map);
}
if (map.ContainsKey(addr))
{
ComAddrValue[name][addr] = value;
}
else
{
ComAddrValue[name].Add(addr, value);
}
} }
//if (map.ContainsKey(addr))
//{
// ComAddrValue[name][addr] = value;
//}
//else
//{
ComAddrValue[name].AddOrUpdate(addr, value, (k, v) => value);
//}
//}
} }
catch (Exception ex) catch (Exception ex)
{ {
...@@ -78,7 +79,7 @@ namespace OnlineStore.DeviceLibrary ...@@ -78,7 +79,7 @@ namespace OnlineStore.DeviceLibrary
public static void ClearSpeed() public static void ClearSpeed()
{ {
LogUtil.info("清理之前设置保存的速度列表"); LogUtil.info("清理之前设置保存的速度列表");
ComAddrValue = new Dictionary<string, Dictionary<string, int>>(); ComAddrValue = new ConcurrentDictionary<string, ConcurrentDictionary<string, int>>();
} }
public static bool OpenPort(string portName) public static bool OpenPort(string portName)
{ {
...@@ -89,7 +90,7 @@ namespace OnlineStore.DeviceLibrary ...@@ -89,7 +90,7 @@ namespace OnlineStore.DeviceLibrary
int ACBaudRate = ConfigAppSettings.GetIntValue(Setting_Init.ACBaudRate); int ACBaudRate = ConfigAppSettings.GetIntValue(Setting_Init.ACBaudRate);
if (ACBaudRate <= 0) if (ACBaudRate <= 0)
{ {
ACBaudRate = 115200; ACBaudRate = 9600;
} }
AcSerialBean bean = new AcSerialBean(portName, ACBaudRate, Parity.Even, 8, StopBits.One); AcSerialBean bean = new AcSerialBean(portName, ACBaudRate, Parity.Even, 8, StopBits.One);
bool result = bean.openPort(); bool result = bean.openPort();
...@@ -138,17 +139,16 @@ namespace OnlineStore.DeviceLibrary ...@@ -138,17 +139,16 @@ namespace OnlineStore.DeviceLibrary
} }
} }
/// <summary> /// <summary>
/// 是否成功打开伺服 /// 是否有伺服使能信号
/// </summary> /// </summary>
public static bool ServerOnStatus(string portName, int slvAddr) public static bool SRV_ON(string portName, int slvAddr)
{ {
if (!serialBeanMap.ContainsKey(portName)) if (!serialBeanMap.ContainsKey(portName))
{ {
return false; return false;
} }
PreReadCoilAddr = ACCMDManager.ServerOn_Addr; PreReadCoilAddr = ACCMDManager.SRV_ON;
byte[] dataArray = ACCMDManager.GetWriteData(slvAddr, ACCMDManager.CMD_ReadCoil, PreReadCoilAddr, "0000", 1); byte[] dataArray = ACCMDManager.GetWriteData(slvAddr, ACCMDManager.CMD_ReadCoil, PreReadCoilAddr, "0000", 1);
//SendData(portName,dataArray); //SendData(portName,dataArray);
byte[] reviceData = SendCommand(portName, dataArray, ReviceOutTimeMS, 6); byte[] reviceData = SendCommand(portName, dataArray, ReviceOutTimeMS, 6);
...@@ -157,61 +157,77 @@ namespace OnlineStore.DeviceLibrary ...@@ -157,61 +157,77 @@ namespace OnlineStore.DeviceLibrary
return result >= 1; return result >= 1;
} }
/// <summary> /// <summary>
/// 是否成功打开伺服
/// </summary>
public static bool ServerOnStatus(string portName, int slvAddr)
{
if (!serialBeanMap.ContainsKey(portName))
{
return false ;
}
PreReadCoilAddr = ACCMDManager.ServerOn_Addr;
byte[] dataArray = ACCMDManager.GetWriteData(slvAddr, ACCMDManager.CMD_ReadCoil, PreReadCoilAddr, "0000", 1);
//SendData(portName,dataArray);
byte[] reviceData = SendCommand(portName, dataArray, ReviceOutTimeMS, 6);
int result= GetCoilData(portName, reviceData, PreReadCoilAddr);
//TODO
return result>=1;
}
/// <summary>
/// 是否原点返回完成 /// 是否原点返回完成
/// </summary> /// </summary>
public static bool IsHomeMoveEnd(string portName, int slvAddr) public static bool IsHomeMoveEnd(string portName, int slvAddr)
{ {
int status = GetHomeEndStatus(portName, slvAddr); int status = GetHomeEndStatus(portName, slvAddr);
bool isOk = ACServerManager.GetBusyStatus(portName, slvAddr).Equals(0); bool isOk = ACServerManager.GetBusyStatus(portName, slvAddr).Equals(0);
if (status >= 1 && isOk) if (status >= 1&&isOk)
{ {
return true; return true;
} } return false;
return false;
} }
public static void InitSlvAddr(string portName, int slvAddr) public static void InitSlvAddr(string portName, int slvAddr)
{ {
InitSlvAddr(portName, slvAddr, 100, 30, 30); InitSlvAddr(portName, slvAddr, 100, 30, 30 );
//InitSlvAddr(portName, slvAddr, 100, 30, 30, 100, 50, 30); //InitSlvAddr(portName, slvAddr, 100, 30, 30, 100, 50, 30);
} }
//把数字转换为四位的字符串 //把数字转换为四位的字符串
public static string SpeedToStr(int speed, int length) public static string SpeedToStr(int speed,int length)
{ {
string str = String.Format("{0:X}", speed); string str = String.Format("{0:X}", speed);
return str.PadLeft(length, '0'); return str.PadLeft(length, '0');
} }
public static void InitSlvAddr(string portName, int slvAddr, int targetSpeed, int addSpeed, int delSpeed) public static void InitSlvAddr(string portName, int slvAddr,int targetSpeed,int addSpeed,int delSpeed )
//public static void InitSlvAddr(string portName, int slvAddr,int targetSpeed,int addSpeed,int delSpeed,int homeHighSpeed,int homeLowSpeed,int homeAddSpeed) //public static void InitSlvAddr(string portName, int slvAddr,int targetSpeed,int addSpeed,int delSpeed,int homeHighSpeed,int homeLowSpeed,int homeAddSpeed)
{ {
LogUtil.info("开始初始化伺服【" + portName + "】【" + slvAddr + "】"); LogUtil.info("开始初始化伺服【" + portName + "】【" + slvAddr + "】");
//写入block //写入block
int sleep = 20; int sleep = 50;
string slvAddrStr = string.Format(strFromat, slvAddr); string slvAddrStr = string.Format(strFromat, slvAddr);
//block0=原点返回,正方向 ////block0=原点返回,正方向
string str0 = slvAddrStr + "104800 000408 00000420 00000000 ffff"; //string str0 = slvAddrStr + "104800 000408 00000420 00000000 ffff";
SendStrAndSleep(portName, str0, sleep); //SendStrAndSleep(portName, str0, sleep);
//block1=原点返回,反方向 ////block1=原点返回,反方向
string str1 = slvAddrStr + "104804 000408 04000420 00000000 ffff"; //string str1 = slvAddrStr + "104804 000408 04000420 00000000 ffff";
SendStrAndSleep(portName, str1, sleep); //SendStrAndSleep(portName, str1, sleep);
//block2=绝对位置运动 ////block2=绝对位置运动
string str2 = slvAddrStr + "104808 000408 10000211EC78FFFF ffff"; //string str2 = slvAddrStr + "104808 000408 10000211EC78FFFF ffff";
SendStrAndSleep(portName, str2, sleep); //SendStrAndSleep(portName, str2, sleep);
//block3=相对位置运动 ////block3=相对位置运动
string str3 = slvAddrStr + "10480C 000408 10000111EC78FFFF ffff"; //string str3 = slvAddrStr + "10480C 000408 10000111EC78FFFF ffff";
SendStrAndSleep(portName, str3, sleep); //SendStrAndSleep(portName, str3, sleep);
//block4=正方向匀速运动 ////block4=正方向匀速运动
string str4 = slvAddrStr + "104810 000408 10000311 00000000 ffff"; //string str4 = slvAddrStr + "104810 000408 10000311 00000000 ffff";
SendStrAndSleep(portName, str4, sleep); //SendStrAndSleep(portName, str4, sleep);
//block5=反方向匀速运动 ////block5=反方向匀速运动
string str5 = slvAddrStr + "104814 000408 14000311 00000000 ffff"; //string str5 = slvAddrStr + "104814 000408 14000311 00000000 ffff";
SendStrAndSleep(portName, str5, sleep); //SendStrAndSleep(portName, str5, sleep);
//block6=减速停止 ////block6=减速停止
string str6 = slvAddrStr + "104818 000408 00000500 00000000 ffff"; //string str6 = slvAddrStr + "104818 000408 00000500 00000000 ffff";
SendStrAndSleep(portName, str6, sleep); //SendStrAndSleep(portName, str6, sleep);
//block7=紧急停止 ////block7=紧急停止
string str7 = slvAddrStr + "10481c 000408 00000510 00000000 ffff"; //string str7 = slvAddrStr + "10481c 000408 00000510 00000000 ffff";
SendStrAndSleep(portName, str7, sleep); //SendStrAndSleep(portName, str7, sleep);
//0106460001009D12 //0106460001009D12
//速度 V1 =100 //速度 V1 =100
...@@ -235,7 +251,7 @@ namespace OnlineStore.DeviceLibrary ...@@ -235,7 +251,7 @@ namespace OnlineStore.DeviceLibrary
public static void UpdateEEPROM(string portName, int slvAddr) public static void UpdateEEPROM(string portName, int slvAddr)
{ {
string addr = ACCMDManager.EEPROM_Param_Addr; string addr = ACCMDManager.EEPROM_Param_Addr;
string data = "6173"; string data = "6173";
int length = 2; int length = 2;
byte[] dataArray = ACCMDManager.GetWriteData(slvAddr, ACCMDManager.CMD_WriteRegisters, addr, data, length); byte[] dataArray = ACCMDManager.GetWriteData(slvAddr, ACCMDManager.CMD_WriteRegisters, addr, data, length);
SendData(portName, dataArray, 5); SendData(portName, dataArray, 5);
...@@ -261,13 +277,13 @@ namespace OnlineStore.DeviceLibrary ...@@ -261,13 +277,13 @@ namespace OnlineStore.DeviceLibrary
SendData(portName, dataArray); SendData(portName, dataArray);
} }
public static void RelMove(string portName, int slvAddr, int position, int targetSpeed) public static void RelMove(string portName, int slvAddr, int position,int targetSpeed)
{ {
//先更新速度 //先更新速度
string slvAddrStr = string.Format(strFromat, slvAddr); string slvAddrStr = string.Format(strFromat, slvAddr);
string v1 = slvAddrStr + "064601 " + SpeedToStr(targetSpeed, 4) + " ffff"; string v1 = slvAddrStr + "064601 " + SpeedToStr(targetSpeed, 4) + " ffff";
SendStrAndSleep(portName, v1, SleepMSendons); SendStrAndSleep(portName, v1,SleepMSendons);
RelMove(portName, slvAddr, position); RelMove(portName, slvAddr, position);
} }
public static void RelMove(string portName, int slvAddr, int position) public static void RelMove(string portName, int slvAddr, int position)
...@@ -309,24 +325,24 @@ namespace OnlineStore.DeviceLibrary ...@@ -309,24 +325,24 @@ namespace OnlineStore.DeviceLibrary
} }
data = ACCMDManager.buildCheckData(data, data.Length - 2); data = ACCMDManager.buildCheckData(data, data.Length - 2);
SendData(portName, data); SendData(portName, data);
System.Threading.Thread.Sleep(SleepMSendons); System.Threading.Thread.Sleep(SleepMSendons);
UpdateBlock(portName, slvAddr, ACCMDManager.Block_RelMove); UpdateBlock(portName, slvAddr, ACCMDManager.Block_RelMove);
OpenAndCloseSTB(portName, slvAddr); OpenAndCloseSTB(portName, slvAddr);
} }
public static void HomeMove(string portName, int slvAddr, int speed) public static void HomeMove(string portName, int slvAddr, int speed,bool mustMove=false)
{ {
try try
{ {
//先判断是否在原点,如果已经在原点,先向正方向走2000 //先判断是否在原点,如果已经在原点,先向正方向走2000
int homeSingle = GetHomeSingle(portName, slvAddr); int homeSingle = GetHomeSingle(portName, slvAddr);
if (homeSingle.Equals(1)) if (homeSingle.Equals(1)||mustMove)
{ {
int isHomeEnd = GetHomeEndStatus(portName, slvAddr); int isHomeEnd = GetHomeEndStatus(portName, slvAddr);
if (isHomeEnd.Equals(1)) if (isHomeEnd.Equals(1))
{ {
int value = ConfigAppSettings.GetIntValue(Setting_Init.Inout_Relative); int value = 2000;
LogUtil.info("轴【" + portName + "_" + slvAddr + "】原点返回时发现原点已亮且回过原点,需要先相对走" + value); LogUtil.info("轴【" + portName +"_"+slvAddr +"】"+ mustMove + " HomeMove,需要先相对走" + value);
RelMove(portName, slvAddr, value); RelMove(portName, slvAddr, value);
bool isStop = false; bool isStop = false;
for (int i = 0; i <= 10; i++) for (int i = 0; i <= 10; i++)
...@@ -347,16 +363,16 @@ namespace OnlineStore.DeviceLibrary ...@@ -347,16 +363,16 @@ namespace OnlineStore.DeviceLibrary
} }
else else
{ {
int volSpeed = Math.Abs(speed / 5); int volSpeed =Math.Abs( speed / 5);
int time = 1500; int time = 1500;
LogUtil.info("轴【" + portName + "_" + slvAddr + "】原点返回时发现原点已亮但未回过原点,先匀速向上走" + time + ",速度[" + volSpeed + "]"); LogUtil.info("轴【" + portName + "_" + slvAddr + "】" + mustMove + " HomeMove,先匀速向上走" + time+",速度["+ volSpeed + "]" );
//需要匀速向上走 //需要匀速向上走
ACServerManager.SpeedMove(portName, slvAddr, volSpeed); ACServerManager.SpeedMove(portName, slvAddr, volSpeed);
Thread.Sleep(time); Thread.Sleep(time);
LogUtil.info("轴【" + portName + "_" + slvAddr + "】匀速 已等待" + time + ",直接停止"); LogUtil.info("轴【" + portName + "_" + slvAddr + "】匀速 已等待" + time + ",直接停止");
SuddenStop(portName, slvAddr); SuddenStop(portName, slvAddr);
Thread.Sleep(100); Thread.Sleep(SleepMSendons);
} }
} }
} }
...@@ -397,13 +413,13 @@ namespace OnlineStore.DeviceLibrary ...@@ -397,13 +413,13 @@ namespace OnlineStore.DeviceLibrary
} }
public static void SpeedMove(string portName, int slvAddr, int speed) public static void SpeedMove(string portName, int slvAddr, int speed)
{ {
SetSpeed(portName, slvAddr, speed); SetSpeed(portName, slvAddr, speed);
if (speed > 0) if (speed > 0)
{ {
UpdateBlock(portName, slvAddr, ACCMDManager.Block_VolMove0); UpdateBlock(portName, slvAddr, ACCMDManager.Block_VolMove0);
} }
else else
{ {
UpdateBlock(portName, slvAddr, ACCMDManager.Block_VolMove1); UpdateBlock(portName, slvAddr, ACCMDManager.Block_VolMove1);
} }
//Thread.Sleep(SleepMSendons); //Thread.Sleep(SleepMSendons);
...@@ -429,13 +445,13 @@ namespace OnlineStore.DeviceLibrary ...@@ -429,13 +445,13 @@ namespace OnlineStore.DeviceLibrary
//先更新速度 //先更新速度
string slvAddrStr = string.Format(strFromat, slvAddr); string slvAddrStr = string.Format(strFromat, slvAddr);
int preSpeed = GetAddrValue(portName, slvAddr, ACCMDManager.Speed_Addr); int preSpeed = GetAddrValue(portName,slvAddr, ACCMDManager.Speed_Addr);
if ((preSpeed.Equals(-1)) || (!preSpeed.Equals(targetSpeed))) if ((preSpeed.Equals(-1)) || (!preSpeed.Equals(targetSpeed)))
{ {
//速度 V1 =100 //速度 V1 =100
string v1 = slvAddrStr + "064601 " + SpeedToStr(targetSpeed, 4) + " ffff"; string v1 = slvAddrStr + "064601 " + SpeedToStr(targetSpeed, 4) + " ffff";
SendStrAndSleep(portName, v1, SleepMSendons); SendStrAndSleep(portName, v1, SleepMSendons);
UpdateAddrValue(portName, slvAddr, ACCMDManager.Speed_Addr, targetSpeed); UpdateAddrValue(portName,slvAddr, ACCMDManager.Speed_Addr, targetSpeed);
} }
//绝对运动 //绝对运动
AbsMove(portName, slvAddr, targetPosition); AbsMove(portName, slvAddr, targetPosition);
...@@ -488,4 +504,3 @@ namespace OnlineStore.DeviceLibrary ...@@ -488,4 +504,3 @@ namespace OnlineStore.DeviceLibrary
} }
} }
} }
...@@ -28,6 +28,7 @@ namespace OnlineStore.DeviceLibrary ...@@ -28,6 +28,7 @@ namespace OnlineStore.DeviceLibrary
return null; return null;
} }
public static bool SendStrAndSleep(string portName, string str, int sleepS) public static bool SendStrAndSleep(string portName, string str, int sleepS)
{ {
byte[] data = AcSerialBean.StringToByte(str); byte[] data = AcSerialBean.StringToByte(str);
...@@ -37,7 +38,7 @@ namespace OnlineStore.DeviceLibrary ...@@ -37,7 +38,7 @@ namespace OnlineStore.DeviceLibrary
bool result = SendData(portName, data); bool result = SendData(portName, data);
System.Threading.Thread.Sleep(sleepS); System.Threading.Thread.Sleep(sleepS);
return result; return result;
} }
public static void SaveData(string portName, byte slvAddr, string regAddr, int value) public static void SaveData(string portName, byte slvAddr, string regAddr, int value)
{ {
...@@ -91,12 +92,18 @@ namespace OnlineStore.DeviceLibrary ...@@ -91,12 +92,18 @@ namespace OnlineStore.DeviceLibrary
} }
public static bool SendData(string portName, byte[] data) public static bool SendData(string portName, byte[] data)
{ {
if (data == null) if (data == null)
{ {
return false; return false;
} }
int timeOut = ReviceOutTimeMS;
//if (data[1].Equals((byte)10))
//{
// timeOut = 1000;
//}
bool result = false; bool result = false;
byte[] returnData = SendCommand(portName, data, ReviceOutTimeMS, 8, out result); byte[] returnData = SendCommand(portName, data, timeOut, 8, out result);
if (returnData != null) if (returnData != null)
{ {
string strSend = ""; string strSend = "";
...@@ -152,9 +159,10 @@ namespace OnlineStore.DeviceLibrary ...@@ -152,9 +159,10 @@ namespace OnlineStore.DeviceLibrary
else else
{ {
int ret= bean.SendCommand(data, ref returnData, outTime, reviceLength); int ret= bean.SendCommand(data, ref returnData, outTime, reviceLength);
string rDataStr = AcSerialBean.ByteToString(returnData);
if (!ret.Equals(reviceLength)) if (!ret.Equals(reviceLength))
{ {
LogUtil.error("串口" + portName + " 写入数据:" + strSend + ",预计返回字节数【"+reviceLength+"】实际返回【"+ret+"】"); LogUtil.error("串口" + portName + " 写入数据:" + strSend + ",预计返回字节数【"+reviceLength+"】实际返回【"+ret+"】【"+rDataStr+"】");
} }
System.Threading.Thread.Sleep(2); System.Threading.Thread.Sleep(2);
} }
...@@ -172,7 +180,7 @@ namespace OnlineStore.DeviceLibrary ...@@ -172,7 +180,7 @@ namespace OnlineStore.DeviceLibrary
/// <param name="outTime">超时时间</param> /// <param name="outTime">超时时间</param>
/// <param name="result">返回结果,是否发送成功</param> /// <param name="result">返回结果,是否发送成功</param>
/// <returns>返回值的长度</returns> /// <returns>返回值的长度</returns>
public static byte[] SendCommand(string portName, byte[] data, int outTime, int reviceLength,out bool result) public static byte[] SendCommand(string portName, byte[] data, int outTime, int reviceLength, out bool result)
{ {
if (outTime < 100) if (outTime < 100)
{ {
...@@ -207,12 +215,15 @@ namespace OnlineStore.DeviceLibrary ...@@ -207,12 +215,15 @@ namespace OnlineStore.DeviceLibrary
else else
{ {
int ret = bean.SendCommand(data, ref returnData, outTime, reviceLength); int ret = bean.SendCommand(data, ref returnData, outTime, reviceLength);
if (!ret.Equals(reviceLength)) if (!ret.Equals(reviceLength))
{ {
LogUtil.error("串口" + portName + " 写入数据:" + strSend + ",预计返回字节数【" + reviceLength + "】实际返回【" + ret + "】"); string datastr = AcSerialBean.ByteToString(returnData);
}else LogUtil.error("串口" + portName + " 写入数据:" + strSend + ",预计返回字节数【" + reviceLength + "】实际返回【" + ret + "】:"+ datastr);
}
else
{ {
result = true ; result = true;
} }
System.Threading.Thread.Sleep(2); System.Threading.Thread.Sleep(2);
} }
...@@ -270,15 +281,46 @@ namespace OnlineStore.DeviceLibrary ...@@ -270,15 +281,46 @@ namespace OnlineStore.DeviceLibrary
int length = 2; int length = 2;
byte[] dataArray = ACCMDManager.GetWriteData(slvAddr, ACCMDManager.CMD_WriteCoil, addr, data, length); byte[] dataArray = ACCMDManager.GetWriteData(slvAddr, ACCMDManager.CMD_WriteCoil, addr, data, length);
SendData(portName, dataArray);
System.Threading.Thread.Sleep(500); for (int i = 1; i <= 3; i++)
data = "0000"; {
dataArray = ACCMDManager.GetWriteData(slvAddr, ACCMDManager.CMD_WriteCoil, addr, data, length); bool result = SendData(portName, dataArray);
SendData(portName, dataArray); if (result)
} {
System.Threading.Thread.Sleep(500);
data = "0000";
dataArray = ACCMDManager.GetWriteData(slvAddr, ACCMDManager.CMD_WriteCoil, addr, data, length);
result = SendData(portName, dataArray);
break;
}
else
{
LogUtil.error("【" + portName + "_" + slvAddr + "】 , 第" + i + "次,SuddenStop 发送数据失败");
Thread.Sleep(180);
}
}
}
public static void OpenAndCloseSTB(string portName, int slvAddr) public static void OpenAndCloseSTB(string portName, int slvAddr)
{ {
if (GetBusyStatus(portName, slvAddr).Equals(1))
{
LogUtil.error("伺服【" + portName + "_" + slvAddr + "】OpenSTB时发现 busy=1,直接返回");
return;
}
System.Threading.Thread.Sleep(SleepMSendons);
if (GetSTBState(portName, slvAddr).Equals(1))
{
LogUtil.error("伺服【" + portName + "_" + slvAddr + "】OpenSTB时发现 STB=ON,先关闭STB");
CloseSTB(portName, slvAddr);
System.Threading.Thread.Sleep(SleepMSendons);
if (GetSTBState(portName, slvAddr).Equals(1))
{
LogUtil.error("伺服【" + portName + "_" + slvAddr + "】OpenSTB时发现 STB=ON,先关闭STB 后发现STB仍为ON,直接返回");
return;
}
}
OnlyOpenSTB(portName, slvAddr); OnlyOpenSTB(portName, slvAddr);
System.Threading.Thread.Sleep(200); System.Threading.Thread.Sleep(200);
CloseSTB(portName, slvAddr); CloseSTB(portName, slvAddr);
...@@ -382,7 +424,7 @@ namespace OnlineStore.DeviceLibrary ...@@ -382,7 +424,7 @@ namespace OnlineStore.DeviceLibrary
{ {
return GetActualtPosition(axis.DeviceName, axis.GetAxisValue()); return GetActualtPosition(axis.DeviceName, axis.GetAxisValue());
} }
public static int GetActualtPosition(string portName, int slvAddr) public static int GetActualtPosition(string portName, int slvAddr,int rGetCount=3)
{ {
PreReadAddr = ACCMDManager.ActualPosition; PreReadAddr = ACCMDManager.ActualPosition;
byte[] dataArray = ACCMDManager.GetWriteData(slvAddr, ACCMDManager.CMD_ReadRegisters, ACCMDManager.ActualPosition, "0000", 2); byte[] dataArray = ACCMDManager.GetWriteData(slvAddr, ACCMDManager.CMD_ReadRegisters, ACCMDManager.ActualPosition, "0000", 2);
...@@ -390,7 +432,7 @@ namespace OnlineStore.DeviceLibrary ...@@ -390,7 +432,7 @@ namespace OnlineStore.DeviceLibrary
byte[] reviceData = SendCommand(portName, dataArray, ReviceOutTimeMS, 9); byte[] reviceData = SendCommand(portName, dataArray, ReviceOutTimeMS, 9);
int result = -1; int result = -1;
for (int i = 1; i <= 3; i++) for (int i = 1; i <= rGetCount; i++)
{ {
result = GetRegisterData(portName, reviceData, ACCMDManager.ActualPosition); result = GetRegisterData(portName, reviceData, ACCMDManager.ActualPosition);
if (!result.Equals(-1)) if (!result.Equals(-1))
...@@ -401,6 +443,7 @@ namespace OnlineStore.DeviceLibrary ...@@ -401,6 +443,7 @@ namespace OnlineStore.DeviceLibrary
{ {
LogUtil.error("第" + i + "次获取" + portName + "_" + slvAddr + "的实时位置" + result); LogUtil.error("第" + i + "次获取" + portName + "_" + slvAddr + "的实时位置" + result);
} }
Thread.Sleep(180);
} }
return result; return result;
} }
...@@ -469,6 +512,19 @@ namespace OnlineStore.DeviceLibrary ...@@ -469,6 +512,19 @@ namespace OnlineStore.DeviceLibrary
return GetCoilData(portName, reviceData, ACCMDManager.Home_Single); return GetCoilData(portName, reviceData, ACCMDManager.Home_Single);
} }
/// <summary> /// <summary>
/// 获取STB信号值,1=On,0=OFF
/// </summary>
/// <param name="portName"></param>
/// <param name="slvAddr"></param>
/// <returns></returns>
public static int GetSTBState(string portName, int slvAddr)
{
PreReadCoilAddr = ACCMDManager.STB_State;
byte[] dataArray = ACCMDManager.GetWriteData(slvAddr, ACCMDManager.CMD_ReadCoil, ACCMDManager.STB_State, "0000", 1);
byte[] reviceData = SendCommand(portName, dataArray, ReviceOutTimeMS, 6);
return GetCoilData(portName, reviceData, ACCMDManager.STB_State);
}
/// <summary>
/// 负极限 /// 负极限
/// </summary> /// </summary>
public static int GetLimitNegativeSingle(string portName, int slvAddr) public static int GetLimitNegativeSingle(string portName, int slvAddr)
......
类型,说明,名称,属性值,设备名称,默认值,描述,电器定义,代码定义,SlaveID,
PRO,IO模块对应的DI数量,IO_DILength,192.168.200.11#16,,,,,,,,,,,,
PRO,模块对应的DO数量,IO_DOLength,192.168.200.11#16,,,,,,,,,,,,
PRO,是否有仓门,HasDoor,1,,,,,,,,,,,,
PRO,IO模块IP,PRO_AOI_IP_1,192.168.200.11,,,,,,,,,,,,
,,,,,,,,,,
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,(X轴-前后轴) ,Middle_Axis,1,COM2,0,,,,,
AXIS,(Y轴-进出轴),InOut_Axis,3,COM2,0,,,,,
AXIS,(Z轴-升降轴),UpDown_Axis,2,COM2,0,,,,,
,,,,,,,,,,
PRO,升降轴 进料口取料点 P1,UpDownAxis_DoorO_P1,61268,,,,,,,,,,,,
PRO,升降轴 进料口出料前点 P2,UpDownAxis_DoorI_P2,91242,,,,,,,,,,,,
PRO,升降轴 进料口取料缓冲点 P7,UpDownAxis_DoorOB_P7,91242,,,,,,,,,,,,
PRO,升降轴 进料口出料缓冲点 P8,UpDownAxis_DoorIB_P8,61268,,,,,,,,,,,,
PRO,(X轴-前后轴)P1 待机原位点,MiddleAxis_P1_Position,25250,,,,,,,,,,,,
PRO,( Y轴-进出轴)P1待机原位点,InOutAxis_P1_Position,0,,,,,,,,,,,,
PRO,( Y轴-进出轴)P1左侧托架取料点P2,InOutAxis_P2_Position,167268,,,,,,,,,,,,
PRO,( Y轴-进出轴)P1右侧托架取料点P3,InOutAxis_P3_Position,-168641,,,,,,, ,,,,,
PRO,是否有左右侧门,IsHasDoorLimit,1,,,,,,, ,,,,,
PRO,气压检测IO关闭需要持续的时间,AirCheckSeconds,3,,,,,,, ,,,,,
,,,,,,,,,,
PRO,预警温度,WarnTemperate,80,,,,,,,,,,,,
PRO,预警湿度,WarnHumidity,80,,,,,,,,,,,,
PRO,(X轴-前后轴) 目标速度,MiddleAxis_TargetSpeed,500,,,,,,,,,,,,
PRO,(X轴-前后轴) 加速度,MiddleAxis_AddSpeed,5000,,,,,,,,,,,,
PRO,(X轴-前后轴) 减速度,MiddleAxis_DelSpeed,5000,,,,,,,,,,,,
PRO,(X轴-前后轴) 原点低速度,MiddleAxis_HomeLowSpeed,80,,,,,,,,,,,,
PRO,(X轴-前后轴) 原点高速,MiddleAxis_HomeHighSpeed,60,,,,,,,,,,,,
PRO,(X轴-前后轴) 原点加速度,MiddleAxis_HomeAddSpeed,50,,,,,,,,,,,,
PRO,(Z轴-升降轴)目标速度,UpdownAxis_TargetSpeed,500,,,,,,,,,,,,
PRO,(Z轴-升降轴)加速度,UpdownAxis_AddSpeed,4000,,,,,,,,,,,,
PRO,(Z轴-升降轴)减速度,UpdownAxis_DelSpeed,4000,,,,,,,,,,,,
PRO,(Z轴-升降轴)原点低速度,UpdownAxis_HomeLowSpeed,100,,,,,,,,,,,,
PRO,(Z轴-升降轴)原点高速,UpdownAxis_HomeHighSpeed,200,,,,,,,,,,,,
PRO,(Z轴-升降轴)原点加速度,UpdownAxis_HomeAddSpeed,200,,,,,,,,,,,,
PRO,( Y轴-进出轴)目标速度,InoutAxis_TargetSpeed,200,,,,,,,,,,,,
PRO,( Y轴-进出轴)加速度,InoutAxis_AddSpeed,5000,,,,,,,,,,,,
PRO,( Y轴-进出轴)减速度,InoutAxis_DelSpeed,5000,,,,,,,,,,,,
PRO,( Y轴-进出轴)原点低速,InoutAxis_HomeLowSpeed,20,,,,,,,,,,,,
PRO,( Y轴-进出轴)原点高速,InoutAxis_HomeHighSpeed,60,,,,,,,,,,,,
PRO,( Y轴-进出轴)原点加速度,InoutAxis_HomeAddSpeed,200,,,,,,, ,,,,,
,,,,,,,,,,
PRO,(Z轴-升降轴)P1速度,UpDownAxis_P1_Speed,1800,,,,,,,,,,,,
PRO,(Z轴-升降轴)P2速度,UpDownAxis_P2_Speed,1800,,,,,,,,,,,,
PRO,(Z轴-升降轴)P3速度,UpDownAxis_P3_Speed,1800,,,,,,,,,,,,
PRO,(Z轴-升降轴)P4速度,UpDownAxis_P4_Speed,500,,,,,,,,,,,,
PRO,(Z轴-升降轴)P5速度,UpDownAxis_P5_Speed,1800,,,,,,,,,,,,
PRO,(Z轴-升降轴)P6速度,UpDownAxis_P6_Speed,500,,,,,,,,,,,,
PRO,(Z轴-升降轴)P7速度,UpDownAxis_P7_Speed,500,,,,,, ,,,,,,
PRO,(Z轴-升降轴)P8速度,UpDownAxis_P8_Speed,500,,,,,,,,,,,,
PRO,(X轴-前后轴)P1速度,MiddleAxis_P1_Speed,2000,,,,,,,,,,,,
PRO,(X轴-前后轴)P2速度,MiddleAxis_P2_Speed,2000,,,,,,,,,,,,
PRO,(Y轴-进出轴)P1速度,InOutAxis_P1_Speed,500,,,,,,,,,,,,
PRO,(Y轴-进出轴)P2速度,InOutAxis_P2_Speed,500,,,,,,,,,,,,
PRO,(Y轴-进出轴)P3速度,InOutAxis_P3_Speed,500,,,,,,, ,,,,,
PRO,(Y轴-进出轴)P4速度,InOutAxis_P4_Speed,500,,,,,,, ,,,,,
PRO,(X轴-前后轴) 停止时可误差的脉冲数的最小值,MiddleAxis_ErrorCountMin,10,,,,,,,,,,,,
PRO,(Z轴-升降轴)停止时可误差的脉冲数的最小值,UpdownAxis_ErrorCountMin,10,,,,,, ,,,,,,
PRO,(Y轴-进出轴)停止时可误差的脉冲数的最小值,InoutAxis_ErrorCountMin,10,,,,,,,,,,,,
PRO,(X轴-前后轴) 停止时可误差的脉冲数的最大值,MiddleAxis_ErrorCountMax,1000,,,,,,,,,,,,
PRO,(Z轴-升降轴)停止时可误差的脉冲数的最大值,UpdownAxis_ErrorCountMax,1000,,,,,,,,,,,,
PRO,(Y轴-进出轴)停止时可误差的脉冲数的最大值,InoutAxis_ErrorCountMax,1000,,,,,,,,,,,,
PRO,出入库多少次,会自动重置前后轴,Box_ResetMCount,1000,,,,,,,,,,,,
PRO,出入库多少次,会自动重置所有轴操作,Box_ResetACount,100,,,,,,,,,,,,
PRO,IO信号超时时间(毫秒),IOSingle_TimerOut,10000,,,,,,,,,,,,
PRO,是否使用料盘检测信号,IsUse_Tray_Check,0,,,,,, ,,,,,,
PRO,(X轴-前后轴) 最小限位,MiddleAxis_PositionMin,0,,,,,,,,,,,,
PRO,(Z轴-升降轴)最小限位,UpdownAxis_PositionMin,0,,,,,,,,,,,,
PRO,(Y轴-进出轴)最小限位,InoutAxis_PositionMin,0,,,,,,,,,,,,
PRO,(X轴-前后轴) 最大限位,MiddleAxis_PositionMax,0,,,,,,,,,,,,
PRO,(Z轴-升降轴)最大限位,UpdownAxis_PositionMax,0,,,,,,,,,,,,
PRO,(Y轴-进出轴)最大限位,InoutAxis_PositionMax,0,,,,,,,,,,,,
PRO,需要吹气的温度(温度标准),Max_Temperature,0,,,,,,,,,,,,
PRO,需要吹气的湿度(湿度标准),Max_Humidity,10,,,,,,,,,,,,
PRO,每次吹气的时间(分钟),BlowAir_Time,10,,,,,,,,,,,,
PRO,两次吹气间隔(分钟),BlowAir_Interval,0,,,,,,, ,,,,,
PRO,温湿度端口号(分号分隔),Humiture_Port,COM3;COM4;COM5,,,,,,,,,,,,
,,,,,,,,, ,
,,,,,,,,, ,
位置,优先级,高度,宽度,料仓ID,前后轴位置P2,升降轴库位出料前点P5,升降轴库位出料缓冲点P6,升降轴库位入料前点P3,升降轴库位入料缓冲点P4,进出轴库位取料点P4
AC1#L1_1_1,132,34,38,1,398000,55000,110000,110000,55000,170000
AC1#L1_1_2,131,30,38,1,398800,361000,410000,410000,361000,170000
AC1#L1_1_3,130,30,38,1,398800,661000,710000,710000,661000,170000
AC1#L1_1_4,129,20,38,1,398800,961000,1010000,1010000,961000,170000
AC1#L1_1_5,128,20,38,1,398800,1261000,1310000,1310000,1261000,170000
AC1#L1_1_6,127,20,38,1,398800,1561000,1610000,1610000,1561000,170000
AC1#L2_1_1,126,34,38,1,679000,55000,110000,110000,55000,170000
AC1#L2_1_2,125,30,38,1,679000,361000,410000,410000,361000,170000
AC1#L2_1_3,124,30,38,1,679000,661000,710000,710000,661000,170000
AC1#L2_1_4,123,20,38,1,679000,961000,1010000,1010000,961000,170000
AC1#L2_1_5,122,20,38,1,679000,1261000,1310000,1310000,1261000,170000
AC1#L2_1_6,121,20,38,1,679500,1561000,1610000,1610000,1561000,170000
AC1#L3_1_1,120,34,38,1,960818,55000,110000,110000,55000,170000
AC1#L3_1_2,119,30,38,1,960818,361000,410000,410000,361000,170000
AC1#L3_1_3,118,30,38,1,960818,661000,710000,710000,661000,170000
AC1#L3_1_4,117,20,38,1,960818,961000,1010000,1010000,961000,170000
AC1#L3_1_5,116,20,38,1,960818,1261000,1310000,1310000,1261000,170000
AC1#L3_1_6,115,20,38,1,961818,1561000,1610000,1610000,1561000,170000
AC1#L4_1_1,114,34,38,1,1243818,55000,110000,110000,55000,170000
AC1#L4_1_2,113,30,38,1,1243818,361000,410000,410000,361000,170000
AC1#L4_1_3,112,30,38,1,1243818,661000,710000,710000,661000,170000
AC1#L4_1_4,111,20,38,1,1243818,961000,1010000,1010000,961000,170000
AC1#L4_1_5,110,20,38,1,1245818,1261000,1310000,1310000,1261000,170000
AC1#L4_1_6,109,20,38,1,1245818,1561000,1610000,1610000,1561000,170000
AC1#L5_1_1,108,34,38,1,1524418,55000,110000,110000,55000,170000
AC1#L5_1_2,107,30,38,1,1524418,361000,410000,410000,361000,170000
AC1#L5_1_3,106,30,38,1,1524418,661000,710000,710000,661000,170000
AC1#L5_1_4,105,20,38,1,1525019,961000,1010000,1010000,961000,170000
AC1#L5_1_5,104,20,38,1,1525019,1261000,1310000,1310000,1261000,170000
AC1#L5_1_6,103,20,38,1,1525019,1561000,1610000,1610000,1561000,170000
AC1#L6_1_1,102,34,38,1,1804118,55000,110000,110000,55000,170000
AC1#L6_1_2,101,30,38,1,1804118,361000,410000,410000,361000,170000
AC1#L6_1_3,100,30,38,1,1805118,661000,710000,710000,661000,170000
AC1#L6_1_4,99,20,38,1,1805118,961000,1010000,1010000,961000,170000
AC1#L6_1_5,98,20,38,1,1805118,1261000,1310000,1310000,1261000,170000
AC1#L6_1_6,97,20,38,1,1805118,1561000,1610000,1610000,1561000,170000
AC1#L7_1_1,96,34,38,1,2084918,55000,110000,110000,55000,170000
AC1#L7_1_2,95,30,38,1,2085718,361000,410000,410000,361000,170000
AC1#L7_1_3,94,30,38,1,2086518,661000,710000,710000,661000,170000
AC1#L7_1_4,93,20,38,1,2087318,961000,1010000,1010000,961000,170000
AC1#L7_1_5,92,20,38,1,2088118,1261000,1310000,1310000,1261000,170000
AC1#L7_1_6,91,20,38,1,2088918,1561000,1610000,1610000,1561000,170000
AC1#L8_1_1,90,34,38,1,2366918,55000,110000,110000,55000,170000
AC1#L8_1_2,89,30,38,1,2367718,361000,410000,410000,361000,170000
AC1#L8_1_3,88,30,38,1,2368518,661000,710000,710000,661000,170000
AC1#L8_1_4,87,20,38,1,2369318,961000,1010000,1010000,961000,170000
AC1#L8_1_5,86,20,38,1,2370118,1261000,1310000,1310000,1261000,170000
AC1#L8_1_6,85,20,38,1,2370918,1561000,1610000,1610000,1561000,170000
AC1#L9_1_1,84,34,38,1,2647418,55000,110000,110000,55000,170000
AC1#L9_1_2,83,30,38,1,2647418,361000,410000,410000,361000,170000
AC1#L9_1_3,82,30,38,1,2647418,661000,710000,710000,661000,170000
AC1#L9_1_4,81,20,38,1,2647418,961000,1010000,1010000,961000,170000
AC1#L9_1_5,80,20,38,1,2650618,1261000,1310000,1310000,1261000,170000
AC1#L9_1_6,79,20,38,1,2650618,1561000,1610000,1610000,1561000,170000
AC1#L10_1_1,78,34,38,1,2929618,55000,110000,110000,55000,170000
AC1#L10_1_2,77,30,38,1,2929618,361000,410000,410000,361000,170000
AC1#L10_1_3,76,30,38,1,2929618,661000,710000,710000,661000,170000
AC1#L10_1_4,75,20,38,1,2929618,961000,1010000,1010000,961000,170000
AC1#L10_1_5,74,20,38,1,2932818,1261000,1310000,1310000,1261000,170000
AC1#L10_1_6,73,20,38,1,2932818,1561000,1610000,1610000,1561000,170000
AC1#L11_1_1,72,34,38,1,3210018,55000,110000,110000,55000,170000
AC1#L11_1_2,71,30,38,1,3211018,361000,410000,410000,361000,170000
AC1#L11_1_3,70,30,38,1,3212018,661000,710000,710000,661000,170000
AC1#L11_1_4,69,20,38,1,3213018,961000,1010000,1010000,961000,170000
AC1#L11_1_5,68,20,38,1,3216402,1261000,1310000,1310000,1261000,170000
AC1#L11_1_6,67,20,38,1,3216402,1561000,1610000,1610000,1561000,170000
AC1#R1_1_1,66,34,38,1,398000,55000,110000,110000,55000,-170000
AC1#R1_1_2,65,30,38,1,398800,361000,410000,410000,361000,-170000
AC1#R1_1_3,64,30,38,1,398800,661000,710000,710000,661000,-170000
AC1#R1_1_4,63,20,38,1,398800,961000,1010000,1010000,961000,-170000
AC1#R1_1_5,62,20,38,1,398800,1261000,1310000,1310000,1261000,-170000
AC1#R1_1_6,61,20,38,1,398800,1561000,1610000,1610000,1561000,-170000
AC1#R2_1_1,60,34,38,1,679000,55000,110000,110000,55000,-170000
AC1#R2_1_2,59,30,38,1,679000,361000,410000,410000,361000,-170000
AC1#R2_1_3,58,30,38,1,679000,661000,710000,710000,661000,-170000
AC1#R2_1_4,57,20,38,1,679000,961000,1010000,1010000,961000,-170000
AC1#R2_1_5,56,20,38,1,679000,1261000,1310000,1310000,1261000,-170000
AC1#R2_1_6,55,20,38,1,679500,1561000,1610000,1610000,1561000,-170000
AC1#R3_1_1,54,34,38,1,960818,55000,110000,110000,55000,-170000
AC1#R3_1_2,53,30,38,1,960818,361000,410000,410000,361000,-170000
AC1#R3_1_3,52,30,38,1,960818,661000,710000,710000,661000,-170000
AC1#R3_1_4,51,20,38,1,960818,961000,1010000,1010000,961000,-170000
AC1#R3_1_5,50,20,38,1,960818,1261000,1310000,1310000,1261000,-170000
AC1#R3_1_6,49,20,38,1,961818,1561000,1610000,1610000,1561000,-170000
AC1#R4_1_1,48,34,38,1,1243818,55000,110000,110000,55000,-170000
AC1#R4_1_2,47,30,38,1,1243818,361000,410000,410000,361000,-170000
AC1#R4_1_3,46,30,38,1,1243818,661000,710000,710000,661000,-170000
AC1#R4_1_4,45,20,38,1,1243818,961000,1010000,1010000,961000,-170000
AC1#R4_1_5,44,20,38,1,1245818,1261000,1310000,1310000,1261000,-170000
AC1#R4_1_6,43,20,38,1,1245818,1561000,1610000,1610000,1561000,-170000
AC1#R5_1_1,42,34,38,1,1524418,55000,110000,110000,55000,-170000
AC1#R5_1_2,41,30,38,1,1524418,361000,410000,410000,361000,-170000
AC1#R5_1_3,40,30,38,1,1524418,661000,710000,710000,661000,-170000
AC1#R5_1_4,39,20,38,1,1525019,961000,1010000,1010000,961000,-170000
AC1#R5_1_5,38,20,38,1,1525019,1261000,1310000,1310000,1261000,-170000
AC1#R5_1_6,37,20,38,1,1525019,1561000,1610000,1610000,1561000,-170000
AC1#R6_1_1,36,34,38,1,1804118,55000,110000,110000,55000,-170000
AC1#R6_1_2,35,30,38,1,1804118,361000,410000,410000,361000,-170000
AC1#R6_1_3,34,30,38,1,1805118,661000,710000,710000,661000,-170000
AC1#R6_1_4,33,20,38,1,1805118,961000,1010000,1010000,961000,-170000
AC1#R6_1_5,32,20,38,1,1805118,1261000,1310000,1310000,1261000,-170000
AC1#R6_1_6,31,20,38,1,1805118,1561000,1610000,1610000,1561000,-170000
AC1#R7_1_1,30,34,38,1,2084918,55000,110000,110000,55000,-170000
AC1#R7_1_2,29,30,38,1,2085718,361000,410000,410000,361000,-170000
AC1#R7_1_3,28,30,38,1,2086518,661000,710000,710000,661000,-170000
AC1#R7_1_4,27,20,38,1,2087318,961000,1010000,1010000,961000,-170000
AC1#R7_1_5,26,20,38,1,2088118,1261000,1310000,1310000,1261000,-170000
AC1#R7_1_6,25,20,38,1,2088918,1561000,1610000,1610000,1561000,-170000
AC1#R8_1_1,24,34,38,1,2366918,55000,110000,110000,55000,-170000
AC1#R8_1_2,23,30,38,1,2367718,361000,410000,410000,361000,-170000
AC1#R8_1_3,22,30,38,1,2368518,661000,710000,710000,661000,-170000
AC1#R8_1_4,21,20,38,1,2369318,961000,1010000,1010000,961000,-170000
AC1#R8_1_5,20,20,38,1,2370118,1261000,1310000,1310000,1261000,-170000
AC1#R8_1_6,19,20,38,1,2370918,1561000,1610000,1610000,1561000,-170000
AC1#R9_1_1,18,34,38,1,2647418,55000,110000,110000,55000,-170000
AC1#R9_1_2,17,30,38,1,2647418,361000,410000,410000,361000,-170000
AC1#R9_1_3,16,30,38,1,2647418,661000,710000,710000,661000,-170000
AC1#R9_1_4,15,20,38,1,2647418,961000,1010000,1010000,961000,-170000
AC1#R9_1_5,14,20,38,1,2650618,1261000,1310000,1310000,1261000,-170000
AC1#R9_1_6,13,20,38,1,2650618,1561000,1610000,1610000,1561000,-170000
AC1#R10_1_1,12,34,38,1,2929618,55000,110000,110000,55000,-170000
AC1#R10_1_2,11,30,38,1,2929618,361000,410000,410000,361000,-170000
AC1#R10_1_3,10,30,38,1,2929618,661000,710000,710000,661000,-170000
AC1#R10_1_4,9,20,38,1,2929618,961000,1010000,1010000,961000,-170000
AC1#R10_1_5,8,20,38,1,2932818,1261000,1310000,1310000,1261000,-170000
AC1#R10_1_6,7,20,38,1,2932818,1561000,1610000,1610000,1561000,-170000
AC1#R11_1_1,6,34,38,1,3210018,55000,110000,110000,55000,-170000
AC1#R11_1_2,5,30,38,1,3211018,361000,410000,410000,361000,-170000
AC1#R11_1_3,4,30,38,1,3212018,661000,710000,710000,661000,-170000
AC1#R11_1_4,3,20,38,1,3213018,961000,1010000,1010000,961000,-170000
AC1#R11_1_5,2,20,38,1,3216402,1261000,1310000,1310000,1261000,-170000
AC1#R11_1_6,1,20,38,1,3216402,1561000,1610000,1610000,1561000,-170000
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
{
public class AxisBean
{
public ConfigMoveAxis Config = null;
public static int TimeoutInterval = 500;
/// <summary>
/// 正常工作过程中判断位置是否到达时使用
/// </summary>
public int LastPosition = 0;
public string AxisName;
public AxisBean(ConfigMoveAxis axisConfig, string deviceName)
{
this.Config = axisConfig;
AxisName = deviceName + " " + Config.Explain + "[" + Config.DeviceName + "-" + Config.GetAxisValue() + "]";
}
private bool IsIntSlvBlock = false;
public bool Open(bool isCheck, out string Msg)
{
Msg = "";
string portName = Config.DeviceName;
int slvAddr = Config.GetAxisValue();
//打开所有轴
ACServerManager.OpenPort(Config.DeviceName);
Thread.Sleep(50);
//初始化
if (!IsIntSlvBlock)
{
ACServerManager.InitSlvAddr(portName, slvAddr, Config.TargetSpeed, Config.AddSpeed, Config.DelSpeed);
Thread.Sleep(100);
}
ACServerManager.AlarmClear(portName, slvAddr);
Thread.Sleep(50);
ACServerManager.ServoOn(portName, slvAddr);
Thread.Sleep(1000);
//打开所有轴
if (isCheck)
{
if (!OpenAxis(out Msg))
{
return false;
}
}
IsIntSlvBlock = true;
return true;
}
/// <summary>
/// 打开所有轴
/// </summary>
/// <returns></returns>
private bool OpenAxis(out string msg)
{
msg = "";
//判断轴是否正常
string portName = Config.DeviceName;
int slvAddr = Config.GetAxisValue();
//ExceptionMsgManager.updateMsg(AxisName, portName + "_" + slvAddr);
if (ACServerManager.ServerOnStatus(portName, slvAddr))
{
LogUtil.info(AxisName + "成功打开");
}
else
{
//清理报警,再重新打开一次
LogUtil.info(AxisName + "第一次打开失败,先清理一下报警,再重新打开一次");
ACServerManager.AlarmClear(portName, slvAddr);
System.Threading.Thread.Sleep(1200);
ACServerManager.ServoOn(portName, slvAddr);
System.Threading.Thread.Sleep(100);
if (ACServerManager.ServerOnStatus(portName, slvAddr))
{
LogUtil.info(AxisName + "清理报警后重新打卡轴成功:" + Config.Explain);
}
else
{
ACServerManager.ServoOff(portName, slvAddr);
msg = "打开轴" + Config.Explain + "失败 ";
LogUtil.info(AxisName + msg);
LogUtil.error(AxisName+portName+"_"+slvAddr+ msg);
return false;
}
}
return true;
}
public void ServoOff()
{
LogUtil.info("ServoOff【" + AxisName + "】");
ACServerManager.ServoOff(Config.DeviceName, Config.GetAxisValue());
}
public void HomeMove(StoreMoveInfo MoveInfo)
{
Config.TargetPosition = 0;
LogUtil.info(AxisName + "speed[" + Config.TargetSpeed + "]开始原点返回");
MoveInfo.WaitList.Add(WaitResultInfo.WaitAxis(Config, true));
ACServerManager.HomeMove(Config.DeviceName, (short)Config.GetAxisValue(), Config.HomeHighSpeed);
}
/// <summary>
/// 松下伺服电机运动
/// </summary>
public void AbsMove(StoreMoveInfo MoveInfo, int targetPosition, int targetSpeed)
{
if (MoveInfo == null)
{
AbsMove(targetPosition, targetSpeed);
}
else
{
MoveInfo.WaitList.Add(WaitResultInfo.WaitAxis(Config, targetPosition, targetSpeed));
Config.TargetPosition = targetPosition;
ACServerManager.AbsMove(Config.DeviceName, Config.GetAxisValue(), targetPosition, targetSpeed);
}
}
/// <summary>
/// 判断AC伺服电机轴是否运动完成
/// </summary>
public static bool ACAxisMoveIsEnd(StoreMoveInfo MoveInfo, ConfigMoveAxis axis, int targetPosition, int targetSpeed, out string msg)
{
msg = "";
string deviceName = axis.DeviceName;
short axisNo = axis.GetAxisValue();
bool isOk = ACServerManager.GetBusyStatus(deviceName, axisNo).Equals(0);
int outCount = ACServerManager.GetActualtPosition(deviceName, axisNo);
int errorCount = Math.Abs(outCount - targetPosition);
if (isOk)
{
if (errorCount <= axis.CanErrorCountMax)
{
return true;
}
//判断是否需要重新运动
if (MoveInfo.CanWhileCount > 0)
{
//bool needHomeMove = MoveInfo.IsUpdownAxisMove;
bool needHomeMove = false;
string clearMsg = "";
//判断轴是否报警
if (MoveInfo.CanWhileCount <= 3)
{
int isAlarm = ACServerManager.GetAlarmStatus(deviceName, axisNo);
if (isAlarm.Equals(1))
{
clearMsg = "清理报警,";
ACServerManager.AlarmClear(deviceName, axisNo);
Thread.Sleep(200);
ACServerManager.ServoOn(deviceName, axisNo);
Thread.Sleep(500);
}
}
if (String.IsNullOrEmpty(clearMsg))
{
ACServerManager.SuddenStop(axis.DeviceName, axis.GetAxisValue());
Thread.Sleep(100);
}
if (needHomeMove && MoveInfo.CanWhileCount == 3)
{
LogUtil.error(MoveInfo.MoveStep + axis.DisplayStr + "目标位置[" + targetPosition + "]当前位置[" + outCount +
"],误差过大," + clearMsg + "自动回原点一次后再开始运动,剩余[" + MoveInfo.CanWhileCount + "]次");
ACServerManager.HomeMove(axis.DeviceName, axis.GetAxisValue(), axis.HomeHighSpeed);
MoveInfo.CanWhileCount--;
Thread.Sleep(200);
}
else
{
LogUtil.error(MoveInfo.MoveStep + axis.DisplayStr + "目标位置[" + targetPosition + "]当前位置[" + outCount +
"],误差过大," + clearMsg + "重新开始运动,剩余[" + MoveInfo.CanWhileCount + "]次");
ACServerManager.AbsMove(axis.DeviceName, axis.GetAxisValue(), targetPosition, targetSpeed);
MoveInfo.CanWhileCount--;
Thread.Sleep(200);
}
}
else
{
msg = " " + MoveInfo.MoveStep + axis.DisplayStr + ",目标位置[" + targetPosition + "]当前位置[" + outCount
+ "],误差过大,需要报警";
LogUtil.error(LogUtil.LOGGER, msg,105, 600);
}
}
return false;
}
public static bool HomeMoveIsEnd(StoreMoveInfo MoveInfo, ConfigMoveAxis axis, out string msg)
{
msg = "";
if (ACServerManager.IsHomeMoveEnd(axis.DeviceName, axis.GetAxisValue()))
{
//原点完成并且位置=0
int outCount = ACServerManager.GetActualtPosition(axis.DeviceName, axis.GetAxisValue());
int errorCount = Math.Abs(outCount);
if (errorCount <= axis.CanErrorCountMax)
{
return true;
}
//判断是否需要重新运动
if (MoveInfo.CanWhileCount > 0)
{
LogUtil.error(MoveInfo.MoveStep + axis.DisplayStr + "收到原点完成信号,当前位置[" + outCount + "],重新回原点,剩余[" + MoveInfo.CanWhileCount + "]次");
//LogUtil.error( StoreName + moveAxis.DisplayStr + "重新回原点");
ACServerManager.HomeMove(axis.DeviceName, axis.GetAxisValue(), axis.HomeHighSpeed,true);
MoveInfo.CanWhileCount--;
}
else
{
msg =MoveInfo.MoveStep + " " + axis.DisplayStr + ",收到原点完成信号,当前位置[" + outCount + "],误差过大,需要报警";
LogUtil.error(msg);
}
}
return false;
}
public int GetAclPosition()
{
int p = ACServerManager.GetActualtPosition(Config);
return p;
}
public bool IsInPosition(int targetP)
{
int currp = GetAclPosition();
int chaz = targetP - currp;
if (Math.Abs(chaz) < Config.CanErrorCountMax)
{
return true;
}
return false;
}
/// <summary>
/// 绝对运动至点,不等待结果
/// </summary>
private void AbsMove(int targetPos, double targetSpeed)
{
if (targetPos.Equals(-1))
{
return;
}
LastPosition = -1;
if (targetSpeed > Config.TargetSpeed || targetSpeed <= 0)
{
targetSpeed = Config.TargetSpeed;
}
//小于1,表示是目标速度的百分比
else if (targetSpeed <= 1)
{
targetSpeed = Config.TargetSpeed * targetSpeed;
}
ACServerManager.AbsMove(Config.DeviceName, Config.GetAxisValue(), targetPos, (int)targetSpeed);
}
public void SuddenStop()
{
ACServerManager.SuddenStop(Config.DeviceName, Config.GetAxisValue());
}
}
}
using OnlineStore.Common;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
namespace OnlineStore.DeviceLibrary
{
public class WaitUtil
{
public delegate bool IsOk();
/// <summary>
/// 使用异步委托检测超时,防止isOk方法不返回结果导致卡死的问题
/// </summary>
/// <param name="waitName"></param>
/// <param name="timeout"></param>
/// <param name="isOk"></param>
public static bool Wait(int timeout, IsOk isOk, string waitName = "")
{
DateTime startTime = System.DateTime.Now;
TimeSpan timoutSpan = TimeSpan.FromMilliseconds(timeout);
TimeSpan waitSpan = TimeSpan.FromMilliseconds(0);
int sleepTime = 10;
while (true)
{
TimeSpan remainTimes = timoutSpan.Subtract(waitSpan);
if (remainTimes.TotalMilliseconds < 0)
{
//已经超时
throw new TimeoutException(waitName + "超时");
}
try
{
IAsyncResult re = isOk.BeginInvoke(null, null);
var waitResult = re.AsyncWaitHandle.WaitOne(remainTimes);
if (waitResult)
{
bool okResult = isOk.EndInvoke(re);
if (okResult)
{
return true ;
}
}
}
catch (Exception ex)
{
LogUtil.error("同步等待出现异常:" ,ex);
}
Thread.Sleep(sleepTime);
waitSpan = System.DateTime.Now.Subtract(startTime);
}
}
}
}
支持 Markdown 格式
你添加了 0 到此讨论。请谨慎行事。
Finish editing this message first!