基于 ACS 进阶例程,初版提交
This commit is contained in:
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -0,0 +1,31 @@
|
||||
|
||||
Microsoft Visual Studio Solution File, Format Version 12.00
|
||||
# Visual Studio 15
|
||||
VisualStudioVersion = 15.0.27428.1
|
||||
MinimumVisualStudioVersion = 10.0.40219.1
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ACS Motion", "ACS Motion\ACS Motion.csproj", "{19741897-37D8-43EE-94A2-637975035CEA}"
|
||||
EndProject
|
||||
Global
|
||||
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||
Debug|x64 = Debug|x64
|
||||
Debug|x86 = Debug|x86
|
||||
Release|x64 = Release|x64
|
||||
Release|x86 = Release|x86
|
||||
EndGlobalSection
|
||||
GlobalSection(ProjectConfigurationPlatforms) = postSolution
|
||||
{19741897-37D8-43EE-94A2-637975035CEA}.Debug|x64.ActiveCfg = Debug|x64
|
||||
{19741897-37D8-43EE-94A2-637975035CEA}.Debug|x64.Build.0 = Debug|x64
|
||||
{19741897-37D8-43EE-94A2-637975035CEA}.Debug|x86.ActiveCfg = Debug|x86
|
||||
{19741897-37D8-43EE-94A2-637975035CEA}.Debug|x86.Build.0 = Debug|x86
|
||||
{19741897-37D8-43EE-94A2-637975035CEA}.Release|x64.ActiveCfg = Release|x64
|
||||
{19741897-37D8-43EE-94A2-637975035CEA}.Release|x64.Build.0 = Release|x64
|
||||
{19741897-37D8-43EE-94A2-637975035CEA}.Release|x86.ActiveCfg = Release|x86
|
||||
{19741897-37D8-43EE-94A2-637975035CEA}.Release|x86.Build.0 = Release|x86
|
||||
EndGlobalSection
|
||||
GlobalSection(SolutionProperties) = preSolution
|
||||
HideSolutionNode = FALSE
|
||||
EndGlobalSection
|
||||
GlobalSection(ExtensibilityGlobals) = postSolution
|
||||
SolutionGuid = {2AD1F058-954D-4783-8021-C4C483496DBA}
|
||||
EndGlobalSection
|
||||
EndGlobal
|
||||
@@ -0,0 +1,119 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||
<PropertyGroup>
|
||||
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
|
||||
<Platform Condition=" '$(Platform)' == '' ">x86</Platform>
|
||||
<ProductVersion>8.0.30703</ProductVersion>
|
||||
<SchemaVersion>2.0</SchemaVersion>
|
||||
<ProjectGuid>{19741897-37D8-43EE-94A2-637975035CEA}</ProjectGuid>
|
||||
<OutputType>WinExe</OutputType>
|
||||
<AppDesignerFolder>Properties</AppDesignerFolder>
|
||||
<RootNamespace>ACS_DotNET_Library_Advanced_Demo</RootNamespace>
|
||||
<AssemblyName>ACS_DotNET_Library_Advanced_Demo</AssemblyName>
|
||||
<TargetFrameworkVersion>v2.0</TargetFrameworkVersion>
|
||||
<FileAlignment>512</FileAlignment>
|
||||
<SccProjectName>SAK</SccProjectName>
|
||||
<SccLocalPath>SAK</SccLocalPath>
|
||||
<SccAuxPath>SAK</SccAuxPath>
|
||||
<SccProvider>SAK</SccProvider>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|x86' ">
|
||||
<PlatformTarget>x86</PlatformTarget>
|
||||
<DebugSymbols>true</DebugSymbols>
|
||||
<DebugType>full</DebugType>
|
||||
<Optimize>false</Optimize>
|
||||
<OutputPath>bin\Debug\</OutputPath>
|
||||
<DefineConstants>DEBUG;TRACE</DefineConstants>
|
||||
<ErrorReport>prompt</ErrorReport>
|
||||
<WarningLevel>4</WarningLevel>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|x86' ">
|
||||
<PlatformTarget>x86</PlatformTarget>
|
||||
<DebugType>pdbonly</DebugType>
|
||||
<Optimize>true</Optimize>
|
||||
<OutputPath>bin\Release\</OutputPath>
|
||||
<DefineConstants>TRACE</DefineConstants>
|
||||
<ErrorReport>prompt</ErrorReport>
|
||||
<WarningLevel>4</WarningLevel>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|x64'">
|
||||
<DebugSymbols>true</DebugSymbols>
|
||||
<OutputPath>bin\x64\Debug\</OutputPath>
|
||||
<DefineConstants>DEBUG;TRACE</DefineConstants>
|
||||
<DebugType>full</DebugType>
|
||||
<PlatformTarget>x64</PlatformTarget>
|
||||
<ErrorReport>prompt</ErrorReport>
|
||||
<CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|x64'">
|
||||
<OutputPath>bin\x64\Release\</OutputPath>
|
||||
<DefineConstants>TRACE</DefineConstants>
|
||||
<Optimize>true</Optimize>
|
||||
<DebugType>pdbonly</DebugType>
|
||||
<PlatformTarget>x64</PlatformTarget>
|
||||
<ErrorReport>prompt</ErrorReport>
|
||||
<CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
|
||||
</PropertyGroup>
|
||||
<ItemGroup>
|
||||
<Reference Include="ACS.SPiiPlusNET, Version=2.50.0.26599, Culture=neutral, processorArchitecture=MSIL">
|
||||
<SpecificVersion>False</SpecificVersion>
|
||||
<HintPath>..\..\ACS.SPiiPlusNET.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="System" />
|
||||
<Reference Include="System.Data" />
|
||||
<Reference Include="System.Deployment" />
|
||||
<Reference Include="System.Drawing" />
|
||||
<Reference Include="System.Windows.Forms" />
|
||||
<Reference Include="System.Xml" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Compile Include="MainForm.cs">
|
||||
<SubType>Form</SubType>
|
||||
</Compile>
|
||||
<Compile Include="MainForm.Designer.cs">
|
||||
<DependentUpon>MainForm.cs</DependentUpon>
|
||||
</Compile>
|
||||
<Compile Include="Program.cs" />
|
||||
<Compile Include="Properties\AssemblyInfo.cs" />
|
||||
<EmbeddedResource Include="MainForm.resx">
|
||||
<DependentUpon>MainForm.cs</DependentUpon>
|
||||
<SubType>Designer</SubType>
|
||||
</EmbeddedResource>
|
||||
<EmbeddedResource Include="Properties\Resources.resx">
|
||||
<Generator>ResXFileCodeGenerator</Generator>
|
||||
<LastGenOutput>Resources.Designer.cs</LastGenOutput>
|
||||
<SubType>Designer</SubType>
|
||||
</EmbeddedResource>
|
||||
<Compile Include="Properties\Resources.Designer.cs">
|
||||
<AutoGen>True</AutoGen>
|
||||
<DependentUpon>Resources.resx</DependentUpon>
|
||||
<DesignTime>True</DesignTime>
|
||||
</Compile>
|
||||
<None Include="Properties\Settings.settings">
|
||||
<Generator>SettingsSingleFileGenerator</Generator>
|
||||
<LastGenOutput>Settings.Designer.cs</LastGenOutput>
|
||||
</None>
|
||||
<Compile Include="Properties\Settings.Designer.cs">
|
||||
<AutoGen>True</AutoGen>
|
||||
<DependentUpon>Settings.settings</DependentUpon>
|
||||
<DesignTimeSharedInput>True</DesignTimeSharedInput>
|
||||
</Compile>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<None Include="Images\Error.bmp" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<None Include="Images\Off.bmp" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<None Include="Images\On.bmp" />
|
||||
</ItemGroup>
|
||||
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
|
||||
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.
|
||||
Other similar extension points exist, see Microsoft.Common.targets.
|
||||
<Target Name="BeforeBuild">
|
||||
</Target>
|
||||
<Target Name="AfterBuild">
|
||||
</Target>
|
||||
-->
|
||||
</Project>
|
||||
Binary file not shown.
|
After Width: | Height: | Size: 1.3 KiB |
Binary file not shown.
|
After Width: | Height: | Size: 1.3 KiB |
Binary file not shown.
|
After Width: | Height: | Size: 1.3 KiB |
Generated
+1849
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,881 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.ComponentModel;
|
||||
using System.Data;
|
||||
using System.Drawing;
|
||||
using System.Text;
|
||||
using System.Windows.Forms;
|
||||
using System.Threading;
|
||||
using System.IO;
|
||||
|
||||
using ACS.SPiiPlusNET; // ACS .NET Library
|
||||
using System.Runtime.InteropServices;
|
||||
|
||||
namespace ACS_DotNET_Library_Advanced_Demo
|
||||
{
|
||||
public partial class MainForm : Form
|
||||
{
|
||||
private Api _ACS;
|
||||
|
||||
private const int MAX_AXIS_COUNT = 32;
|
||||
private const int MAX_BUFFER_CNT = 64;
|
||||
|
||||
private const int MAX_UI_LIMIT_CNT = 8;
|
||||
private const int MAX_UI_IO_CNT = 8;
|
||||
|
||||
private int m_nTotalAxis = 0;
|
||||
private int m_nTotalBuffer = 0;
|
||||
private Axis[] m_arrAxisList = null;
|
||||
|
||||
private bool m_bConnected = false;
|
||||
|
||||
// For update values
|
||||
private MotorStates m_nMotorState;
|
||||
private ProgramStates m_nProgramState;
|
||||
private object m_objReadVar = null;
|
||||
private Array m_arrReadVector = null;
|
||||
private double m_lfRPos, m_lfFPos, m_lfPE, m_lfFVEL;
|
||||
private int m_nValues, m_nOutputState;
|
||||
|
||||
|
||||
private Label[] m_lblLeftLimit;
|
||||
private Label[] m_lblRightLimit;
|
||||
private Label[] m_lblInput;
|
||||
private Label[] m_lblOutput;
|
||||
private Button[] m_btnOutput;
|
||||
|
||||
public MainForm()
|
||||
{
|
||||
InitializeComponent();
|
||||
|
||||
_ACS = new Api();
|
||||
|
||||
// Register Event
|
||||
_ACS.PHYSICALMOTIONEND += _ACS_PHYSICALMOTIONEND;
|
||||
_ACS.PROGRAMEND += _ACS_PROGRAMEND;
|
||||
}
|
||||
|
||||
#region Initialize
|
||||
private void Form1_Load(object sender, EventArgs e)
|
||||
{
|
||||
rdoTCP.Checked = true;
|
||||
btnOpen.Enabled = true;
|
||||
btnClose.Enabled = false;
|
||||
|
||||
m_lblLeftLimit = new Label[MAX_UI_LIMIT_CNT];
|
||||
m_lblLeftLimit[0] = lblLL0;
|
||||
m_lblLeftLimit[1] = lblLL1;
|
||||
m_lblLeftLimit[2] = lblLL2;
|
||||
m_lblLeftLimit[3] = lblLL3;
|
||||
m_lblLeftLimit[4] = lblLL4;
|
||||
m_lblLeftLimit[5] = lblLL5;
|
||||
m_lblLeftLimit[6] = lblLL6;
|
||||
m_lblLeftLimit[7] = lblLL7;
|
||||
|
||||
m_lblRightLimit = new Label[MAX_UI_LIMIT_CNT];
|
||||
m_lblRightLimit[0] = lblRL0;
|
||||
m_lblRightLimit[1] = lblRL1;
|
||||
m_lblRightLimit[2] = lblRL2;
|
||||
m_lblRightLimit[3] = lblRL3;
|
||||
m_lblRightLimit[4] = lblRL4;
|
||||
m_lblRightLimit[5] = lblRL5;
|
||||
m_lblRightLimit[6] = lblRL6;
|
||||
m_lblRightLimit[7] = lblRL7;
|
||||
|
||||
m_lblInput = new Label[MAX_UI_IO_CNT];
|
||||
m_lblInput[0] = lblIN0;
|
||||
m_lblInput[1] = lblIN1;
|
||||
m_lblInput[2] = lblIN2;
|
||||
m_lblInput[3] = lblIN3;
|
||||
m_lblInput[4] = lblIN4;
|
||||
m_lblInput[5] = lblIN5;
|
||||
m_lblInput[6] = lblIN6;
|
||||
m_lblInput[7] = lblIN7;
|
||||
|
||||
m_lblOutput = new Label[MAX_UI_IO_CNT];
|
||||
m_lblOutput[0] = lblOUT0;
|
||||
m_lblOutput[1] = lblOUT1;
|
||||
m_lblOutput[2] = lblOUT2;
|
||||
m_lblOutput[3] = lblOUT3;
|
||||
m_lblOutput[4] = lblOUT4;
|
||||
m_lblOutput[5] = lblOUT5;
|
||||
m_lblOutput[6] = lblOUT6;
|
||||
m_lblOutput[7] = lblOUT7;
|
||||
|
||||
m_btnOutput = new Button[MAX_UI_IO_CNT];
|
||||
m_btnOutput[0] = btnSW0;
|
||||
m_btnOutput[1] = btnSW1;
|
||||
m_btnOutput[2] = btnSW2;
|
||||
m_btnOutput[3] = btnSW3;
|
||||
m_btnOutput[4] = btnSW4;
|
||||
m_btnOutput[5] = btnSW5;
|
||||
m_btnOutput[6] = btnSW6;
|
||||
m_btnOutput[7] = btnSW7;
|
||||
|
||||
//m_nFault = new int[MAX_AXIS_COUNT];
|
||||
//Array.Clear(m_nFault, 0, MAX_AXIS_COUNT);
|
||||
m_nOutputState = 0;
|
||||
|
||||
// Clear connection list from SPiiPlus UserMode-Driver (UMD)
|
||||
TernminateUMD_Connection();
|
||||
}
|
||||
|
||||
private void rdoTCP_CheckedChanged(object sender, EventArgs e)
|
||||
{
|
||||
txtIP.Enabled = true;
|
||||
txtPort.Enabled = true;
|
||||
}
|
||||
|
||||
private void rdoSimu_CheckedChanged(object sender, EventArgs e)
|
||||
{
|
||||
txtIP.Enabled = false;
|
||||
txtPort.Enabled = false;
|
||||
}
|
||||
#endregion
|
||||
|
||||
#region Communication - Open / Close
|
||||
private void btnOpen_Click(object sender, EventArgs e)
|
||||
{
|
||||
string strTemp;
|
||||
int i;
|
||||
//double lfTemp = 0.0f;
|
||||
|
||||
try
|
||||
{
|
||||
if (rdoTCP.Checked)
|
||||
{
|
||||
// TCP/IP (Ethernet)
|
||||
_ACS.OpenCommEthernetTCP(
|
||||
txtIP.Text, // IP Address (Default : 10.0.0.100)
|
||||
Convert.ToInt32(txtPort.Text.Trim()) // TCP/IP Port nubmer (default : 701)
|
||||
);
|
||||
}
|
||||
else if (rdoSimu.Checked)
|
||||
{
|
||||
// Simmulation mode
|
||||
_ACS.OpenCommSimulator();
|
||||
}
|
||||
m_bConnected = true;
|
||||
|
||||
// Get Total number of axes
|
||||
// Using Transaction function : return string text from controller, we need to convert to integer value
|
||||
strTemp = _ACS.Transaction("?SYSINFO(13)");
|
||||
m_nTotalAxis = Convert.ToInt32(strTemp.Trim());
|
||||
|
||||
// Using Sysinfo function
|
||||
//_ACS.GetSysInfo(_ACS.ACSC_SYS_NAXES_KEY, out lfTemp);
|
||||
|
||||
// When we are using multi axes command (ex) ToPointM, HaltM, ...), we need to allocate the array size more 1.
|
||||
// Because of the last delimeter (-1)
|
||||
m_arrAxisList = new Axis[m_nTotalAxis + 1];
|
||||
for (i = 0; i < m_nTotalAxis; i++)
|
||||
{
|
||||
cboAxisNo.Items.Add(i.ToString());
|
||||
m_arrAxisList[i] = (Axis)i;
|
||||
}
|
||||
// Insert '-1' at the last
|
||||
m_arrAxisList[m_nTotalAxis] = Axis.ACSC_NONE;
|
||||
cboAxisNo.SelectedIndex = 0;
|
||||
|
||||
// Update current motion paramter to UI.
|
||||
UpdateProfile();
|
||||
|
||||
strTemp = _ACS.Transaction("?SYSINFO(10)");
|
||||
m_nTotalBuffer = Convert.ToInt32(strTemp.Trim());
|
||||
for (i = 0; i < m_nTotalBuffer; i++) { cboBufferNo.Items.Add(i.ToString()); }
|
||||
cboBufferNo.SelectedIndex = 0;
|
||||
|
||||
btnOpen.Enabled = false;
|
||||
btnClose.Enabled = true;
|
||||
|
||||
// Set updating timer
|
||||
tmrMonitor.Interval = 50;
|
||||
tmrMonitor.Start();
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
MessageBox.Show(ex.Message, "ERROR", MessageBoxButtons.OK, MessageBoxIcon.Error);
|
||||
System.Diagnostics.Debug.WriteLine(ex.Message);
|
||||
}
|
||||
//catch (COMException comex)
|
||||
//{
|
||||
// MessageBox.Show("Connection fail", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
|
||||
// System.Diagnostics.Debug.WriteLine("Connection fail" + comex.Message);
|
||||
|
||||
// m_bConnected = false;
|
||||
// return;
|
||||
//}
|
||||
}
|
||||
|
||||
private void btnClose_Click(object sender, EventArgs e)
|
||||
{
|
||||
if (m_bConnected) _ACS.CloseComm();
|
||||
|
||||
tmrMonitor.Stop();
|
||||
|
||||
btnOpen.Enabled = true;
|
||||
btnClose.Enabled = false;
|
||||
}
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// Terminate connections from SPiiPlus User Mode Driver
|
||||
/// - Maximum connections up to 10 in UMD
|
||||
/// </summary>
|
||||
private void TernminateUMD_Connection()
|
||||
{
|
||||
try
|
||||
{
|
||||
string terminateExceptionConnName = "ACS.Framework.exe";
|
||||
|
||||
ACSC_CONNECTION_DESC[] connectionList = _ACS.GetConnectionsList();
|
||||
for (int index = 0; index < connectionList.Length; index++)
|
||||
{
|
||||
|
||||
if (terminateExceptionConnName.CompareTo((string)connectionList[index].Application) != 0)
|
||||
_ACS.TerminateConnection(connectionList[index]);
|
||||
}
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
System.Diagnostics.Debug.WriteLine(ex.ToString());
|
||||
}
|
||||
}
|
||||
#endregion
|
||||
|
||||
#region Update UI data from Controller
|
||||
/// <summary>
|
||||
/// Update Motion Profile from Controller
|
||||
/// </summary>
|
||||
private void UpdateProfile()
|
||||
{
|
||||
if (m_bConnected)
|
||||
{
|
||||
txtVel.Text = _ACS.GetVelocity((Axis)cboAxisNo.SelectedIndex).ToString();
|
||||
txtAcc.Text = _ACS.GetAcceleration((Axis)cboAxisNo.SelectedIndex).ToString();
|
||||
txtDec.Text = _ACS.GetDeceleration((Axis)cboAxisNo.SelectedIndex).ToString();
|
||||
txtKdec.Text = _ACS.GetKillDeceleration((Axis)cboAxisNo.SelectedIndex).ToString();
|
||||
txtJerk.Text = _ACS.GetJerk((Axis)cboAxisNo.SelectedIndex).ToString();
|
||||
}
|
||||
}
|
||||
|
||||
private void cboAxisNo_SelectedIndexChanged(object sender, EventArgs e)
|
||||
{
|
||||
UpdateProfile();
|
||||
}
|
||||
|
||||
private void tmrMonitor_Tick(object sender, EventArgs e)
|
||||
{
|
||||
// Get selected axis number
|
||||
int iAxisNo = cboAxisNo.SelectedIndex;
|
||||
// Get selected buffer number
|
||||
int iBufferNo = cboBufferNo.SelectedIndex;
|
||||
|
||||
if (m_bConnected)
|
||||
{
|
||||
try
|
||||
{
|
||||
// Instruction 1. Using library functions - acsc_GetFPosition, acsc_GetRPosition, ....
|
||||
// Instruction 2. Read ACS variable - Already defined almost things (FPOS, RPOS, ...)
|
||||
// Motion parameters and state is array (Max length is total number of axes)
|
||||
//
|
||||
// * Library function can read only 1 axis information, so if you want to read several axes, you have to call the function many times.
|
||||
// (This may cause communication delay.)
|
||||
// Recommand (if you want to read many axes) : read/write variable using ReadVariable, ReadVariableScalar, ReadVariableVector, ReadVariableMatrix
|
||||
|
||||
//
|
||||
// Get Motor State
|
||||
// ACSPL+ Variable : MST (integer)
|
||||
m_nMotorState = _ACS.GetMotorState((Axis)iAxisNo);
|
||||
|
||||
// Returned value is integer, you need to use bitmaks
|
||||
if ((m_nMotorState & MotorStates.ACSC_MST_MOVE) != 0) lblMoving.Image = Properties.Resources.On; else lblMoving.Image = Properties.Resources.Off;
|
||||
if ((m_nMotorState & MotorStates.ACSC_MST_INPOS) != 0) lblInPos.Image = Properties.Resources.On; else lblInPos.Image = Properties.Resources.Off;
|
||||
if ((m_nMotorState & MotorStates.ACSC_MST_ACC) != 0) lblAcc.Image = Properties.Resources.On; else lblAcc.Image = Properties.Resources.Off;
|
||||
if ((m_nMotorState & MotorStates.ACSC_MST_ENABLE) != 0) lblEnable.Image = Properties.Resources.On; else lblEnable.Image = Properties.Resources.Off;
|
||||
|
||||
// Reference position
|
||||
// ACSPL+ Variable : RPOS (real)
|
||||
m_lfRPos = _ACS.GetRPosition((Axis)iAxisNo);
|
||||
|
||||
// Feedback position (Encoder value)
|
||||
// ACSPL+ Variable : FPO (real)
|
||||
m_lfFPos = _ACS.GetFPosition((Axis)iAxisNo);
|
||||
|
||||
// PE (Position Error)
|
||||
// There is no function in library. We need to use ReadVariable function
|
||||
m_lfPE = (double)_ACS.ReadVariable("PE", ProgramBuffer.ACSC_NONE, iAxisNo, iAxisNo);
|
||||
|
||||
// Feedback Velocity
|
||||
m_lfFVEL = (double)_ACS.ReadVariable("FVEL", ProgramBuffer.ACSC_NONE, iAxisNo, iAxisNo);
|
||||
|
||||
txtRPOS.Text = String.Format("{0:0.0000}", m_lfRPos);
|
||||
txtFPOS.Text = String.Format("{0:0.0000}", m_lfFPos);
|
||||
txtPE.Text = String.Format("{0:0.0000}", m_lfPE);
|
||||
txtFVEL.Text = String.Format("{0:0.0000}", m_lfFVEL);
|
||||
|
||||
// Program State
|
||||
// State : Compiled, Running, Suspended, Autoroutine is running (ON syntax)
|
||||
//
|
||||
// ACSPL+ Variable : PST (integer)
|
||||
m_nProgramState = _ACS.GetProgramState((ProgramBuffer)iBufferNo);
|
||||
if ((m_nProgramState & ProgramStates.ACSC_PST_RUN) != 0)
|
||||
{
|
||||
lblPRG_Status_LED.Image = Properties.Resources.On;
|
||||
lblPRG_Status.Text = "Running";
|
||||
}
|
||||
else
|
||||
{
|
||||
lblPRG_Status_LED.Image = Properties.Resources.Off;
|
||||
lblPRG_Status.Text = "Stop";
|
||||
}
|
||||
|
||||
// Read left/right hardware limits state
|
||||
// ACSPL+ Variable : FAULT (integer)
|
||||
m_objReadVar = _ACS.ReadVariableAsVector("FAULT", ProgramBuffer.ACSC_NONE, 0, m_nTotalAxis - 1, -1, -1);
|
||||
if (m_objReadVar != null)
|
||||
{
|
||||
m_arrReadVector = m_objReadVar as Array;
|
||||
if (m_arrReadVector != null)
|
||||
{
|
||||
for (int i = 0; i < m_nTotalAxis; i++)
|
||||
{
|
||||
UpdateLimitState(i, (int)m_arrReadVector.GetValue(i));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Read digital input/output (Port means all of bits)
|
||||
// If you want to read only 1 bit (not an integer), use "GetInput" function
|
||||
m_nValues = _ACS.GetInputPort(0); // _ACS.ReadVariableAsVector("IN", -1, 0, 0, -1, -1);
|
||||
UpdateIOState(m_nValues, true);
|
||||
|
||||
m_nOutputState = _ACS.GetOutputPort(0); // _ACS.ReadVariableAsVector("OUT", -1, 0, 0, -1, -1);
|
||||
UpdateIOState(m_nOutputState, false);
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
MessageBox.Show(ex.Message, "ERROR", MessageBoxButtons.OK, MessageBoxIcon.Error);
|
||||
System.Diagnostics.Debug.WriteLine(ex.Message);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Update limit state
|
||||
private void UpdateLimitState(int axisNo, int fault)
|
||||
{
|
||||
if (axisNo < MAX_UI_LIMIT_CNT)
|
||||
{
|
||||
if ((fault & (int)SafetyControlMasks.ACSC_SAFETY_LL) != 0) m_lblLeftLimit[axisNo].Image = Properties.Resources.Error; else m_lblLeftLimit[axisNo].Image = Properties.Resources.Off;
|
||||
if ((fault & (int)SafetyControlMasks.ACSC_SAFETY_RL) != 0) m_lblRightLimit[axisNo].Image = Properties.Resources.Error; else m_lblRightLimit[axisNo].Image = Properties.Resources.Off;
|
||||
}
|
||||
}
|
||||
|
||||
// Update general I/O stae
|
||||
private void UpdateIOState(int value, bool isInput)
|
||||
{
|
||||
int bitUpCnt = 0x01;
|
||||
|
||||
for (int i = 0; i < MAX_UI_IO_CNT; i++)
|
||||
{
|
||||
if (isInput)
|
||||
{
|
||||
// Input state
|
||||
if ((value & bitUpCnt) != 0) m_lblInput[i].Image = Properties.Resources.On;
|
||||
else m_lblInput[i].Image = Properties.Resources.Off;
|
||||
}
|
||||
else
|
||||
{
|
||||
// Output state
|
||||
if ((value & bitUpCnt) != 0)
|
||||
{
|
||||
m_btnOutput[i].Text = "OFF";
|
||||
m_lblOutput[i].Image = Properties.Resources.On;
|
||||
}
|
||||
else
|
||||
{
|
||||
m_btnOutput[i].Text = "ON";
|
||||
m_lblOutput[i].Image = Properties.Resources.Off;
|
||||
}
|
||||
}
|
||||
|
||||
// 0x01 => 0x02 => 0x04 => 0x08 ... increase bit number
|
||||
bitUpCnt = (0x01) << (i + 1);
|
||||
}
|
||||
}
|
||||
#endregion
|
||||
|
||||
#region Motor Enable / Disable
|
||||
private void btnEnable_Click(object sender, EventArgs e)
|
||||
{
|
||||
// Enable selected axis
|
||||
_ACS.Enable((Axis)cboAxisNo.SelectedIndex);
|
||||
|
||||
// If you want to enable several axes,
|
||||
//
|
||||
// Ex) Eanble three axes (0, 1, 6)
|
||||
//
|
||||
// int[] AxisList = new int[] { 0, 1, 6, -1 }; !!!! Important !! Must insert '-1' at the last
|
||||
// _ACS.EnableM(AxisList);
|
||||
}
|
||||
|
||||
private void btnDisable_Click(object sender, EventArgs e)
|
||||
{
|
||||
// Disable selected axis
|
||||
_ACS.Disable((Axis)cboAxisNo.SelectedIndex);
|
||||
// Disable multi axes : DisableM(int[] axisList)
|
||||
}
|
||||
|
||||
private void btnDisableAll_Click(object sender, EventArgs e)
|
||||
{
|
||||
// Disable all of axes
|
||||
_ACS.DisableAll();
|
||||
}
|
||||
#endregion
|
||||
|
||||
private void btnSetZero_Click(object sender, EventArgs e)
|
||||
{
|
||||
// Change current poisition as you want
|
||||
// SetFPosition(Axis number, new position)
|
||||
_ACS.SetFPosition((Axis)cboAxisNo.SelectedIndex, 0);
|
||||
}
|
||||
|
||||
#region Move to absolute position
|
||||
private void btnPTP_Click(object sender, EventArgs e)
|
||||
{
|
||||
double lfTargetPos = 0.0f;
|
||||
try
|
||||
{
|
||||
if (txtPTP_Pos.Text.Length > 0)
|
||||
{
|
||||
lfTargetPos = Convert.ToDouble(txtPTP_Pos.Text);
|
||||
_ACS.ToPoint(
|
||||
0, // '0' - Absolute position
|
||||
(Axis)cboAxisNo.SelectedIndex, // Axis number
|
||||
lfTargetPos // Target position
|
||||
);
|
||||
}
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
MessageBox.Show(ex.Message, "ERROR", MessageBoxButtons.OK, MessageBoxIcon.Error);
|
||||
System.Diagnostics.Debug.WriteLine(ex.Message);
|
||||
}
|
||||
}
|
||||
#endregion
|
||||
|
||||
#region Move to relative position (from current position)
|
||||
private void btnPTP_R_Neg_Click(object sender, EventArgs e)
|
||||
{
|
||||
double lfTargetPos = 0.0f;
|
||||
try
|
||||
{
|
||||
if (txtPTP_Pos.Text.Length > 0)
|
||||
{
|
||||
lfTargetPos = Convert.ToDouble(txtPTP_Pos.Text);
|
||||
if (lfTargetPos > 0) lfTargetPos = lfTargetPos * (-1); // Target position (from current position, step move)
|
||||
|
||||
_ACS.ToPoint(
|
||||
MotionFlags.ACSC_AMF_RELATIVE, // Flat
|
||||
(Axis)cboAxisNo.SelectedIndex, // Axis number
|
||||
lfTargetPos // Move distance
|
||||
);
|
||||
}
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
MessageBox.Show(ex.Message, "ERROR", MessageBoxButtons.OK, MessageBoxIcon.Error);
|
||||
System.Diagnostics.Debug.WriteLine(ex.Message);
|
||||
}
|
||||
}
|
||||
|
||||
private void btnPTP_R_Pos_Click(object sender, EventArgs e)
|
||||
{
|
||||
double lfTargetPos = 0.0f;
|
||||
try
|
||||
{
|
||||
if (txtPTP_Pos.Text.Length > 0)
|
||||
{
|
||||
lfTargetPos = Convert.ToDouble(txtPTP_Pos.Text);
|
||||
if (lfTargetPos < 0) lfTargetPos = lfTargetPos * (-1);
|
||||
|
||||
_ACS.ToPoint(MotionFlags.ACSC_AMF_RELATIVE, (Axis)cboAxisNo.SelectedIndex, lfTargetPos);
|
||||
}
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
MessageBox.Show(ex.Message, "ERROR", MessageBoxButtons.OK, MessageBoxIcon.Error);
|
||||
System.Diagnostics.Debug.WriteLine(ex.Message);
|
||||
}
|
||||
}
|
||||
#endregion
|
||||
|
||||
#region Stop motion using deceleration (halt command)
|
||||
private void btnHalt_Click(object sender, EventArgs e)
|
||||
{
|
||||
try
|
||||
{
|
||||
_ACS.Halt((Axis)cboAxisNo.SelectedIndex);
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
MessageBox.Show(ex.Message, "ERROR", MessageBoxButtons.OK, MessageBoxIcon.Error);
|
||||
System.Diagnostics.Debug.WriteLine(ex.Message);
|
||||
}
|
||||
}
|
||||
|
||||
private void btnHallAll_Click(object sender, EventArgs e)
|
||||
{
|
||||
try
|
||||
{
|
||||
// There is no halt all command, so you need to user HaltM function
|
||||
//
|
||||
// ex) You want to stop 0, 2, 5 axis
|
||||
// int[] m_arrAxisList = new int[] { 0, 2, 5, -1 };
|
||||
//
|
||||
if (m_arrAxisList != null) _ACS.HaltM(m_arrAxisList);
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
MessageBox.Show(ex.Message, "ERROR", MessageBoxButtons.OK, MessageBoxIcon.Error);
|
||||
System.Diagnostics.Debug.WriteLine(ex.Message);
|
||||
}
|
||||
}
|
||||
#endregion
|
||||
|
||||
#region JOG Command
|
||||
// Move negative direction
|
||||
private void btnJogNeg_MouseDown(object sender, MouseEventArgs e)
|
||||
{
|
||||
double lfVelocity = 0.0f;
|
||||
|
||||
try
|
||||
{
|
||||
if (chkUseVel.Checked)
|
||||
{
|
||||
lfVelocity = Convert.ToDouble(txtJogVel.Text.Trim());
|
||||
if (lfVelocity > 0) lfVelocity = lfVelocity * (-1); // Negative direction : Using - (minus) velocity
|
||||
|
||||
_ACS.Jog(
|
||||
MotionFlags.ACSC_AMF_VELOCITY, // Velocity flag
|
||||
(Axis)cboAxisNo.SelectedIndex, // Axis number
|
||||
lfVelocity // Velocity
|
||||
);
|
||||
}
|
||||
else
|
||||
{
|
||||
_ACS.Jog(0, (Axis)cboAxisNo.SelectedIndex, (double)GlobalDirection.ACSC_NEGATIVE_DIRECTION);
|
||||
}
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
MessageBox.Show(ex.Message, "ERROR", MessageBoxButtons.OK, MessageBoxIcon.Error);
|
||||
System.Diagnostics.Debug.WriteLine(ex.Message);
|
||||
}
|
||||
}
|
||||
// 정방향 이동 동작
|
||||
private void btnJogPos_MouseDown(object sender, MouseEventArgs e)
|
||||
{
|
||||
double lfVelocity = 0.0f;
|
||||
|
||||
try
|
||||
{
|
||||
if (chkUseVel.Checked)
|
||||
{
|
||||
lfVelocity = Convert.ToDouble(txtJogVel.Text.Trim());
|
||||
if (lfVelocity < 0) lfVelocity = lfVelocity * (-1);
|
||||
|
||||
_ACS.Jog(MotionFlags.ACSC_AMF_VELOCITY, (Axis)cboAxisNo.SelectedIndex, lfVelocity);
|
||||
}
|
||||
else
|
||||
{
|
||||
_ACS.Jog(0, (Axis)cboAxisNo.SelectedIndex, (double)GlobalDirection.ACSC_POSITIVE_DIRECTION);
|
||||
}
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
MessageBox.Show(ex.Message, "ERROR", MessageBoxButtons.OK, MessageBoxIcon.Error);
|
||||
System.Diagnostics.Debug.WriteLine(ex.Message);
|
||||
}
|
||||
}
|
||||
// Stop JOG motion
|
||||
private void btnJog_MouseUp(object sender, MouseEventArgs e)
|
||||
{
|
||||
_ACS.Halt((Axis)cboAxisNo.SelectedIndex);
|
||||
}
|
||||
#endregion
|
||||
|
||||
#region Run/Stop Buffer Program
|
||||
private void btnRunBuffer_Click(object sender, EventArgs e)
|
||||
{
|
||||
string temp;
|
||||
|
||||
try
|
||||
{
|
||||
if (txtLabelName.Text.Length > 0)
|
||||
{
|
||||
temp = txtLabelName.Text.ToUpper();
|
||||
// Allow _ (Under bar) or A ~ Z characters
|
||||
if (temp[0] != 0x5F && (temp[0] < 0x41 || temp[0] > 0x5A))
|
||||
{
|
||||
MessageBox.Show("Wrong 'Label' name inputed.", "ERROR", MessageBoxButtons.OK, MessageBoxIcon.Information);
|
||||
return;
|
||||
}
|
||||
|
||||
// Run buffer program from label position
|
||||
_ACS.RunBuffer((ProgramBuffer)cboBufferNo.SelectedIndex, txtLabelName.Text.Trim());
|
||||
}
|
||||
else
|
||||
{
|
||||
// Run buffer program from first line
|
||||
_ACS.RunBuffer((ProgramBuffer)cboBufferNo.SelectedIndex, null);
|
||||
}
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
MessageBox.Show(ex.Message, "ERROR", MessageBoxButtons.OK, MessageBoxIcon.Error);
|
||||
System.Diagnostics.Debug.WriteLine(ex.Message);
|
||||
}
|
||||
}
|
||||
|
||||
private void btnStopBuffer_Click(object sender, EventArgs e)
|
||||
{
|
||||
// Stop program
|
||||
_ACS.StopBuffer((ProgramBuffer)cboBufferNo.SelectedIndex);
|
||||
}
|
||||
#endregion
|
||||
|
||||
#region Change motion profile
|
||||
private void TextBoxes_KeyPress(object sender, KeyPressEventArgs e)
|
||||
{
|
||||
try
|
||||
{
|
||||
double lfTemp = 0.0f;
|
||||
TextBox textBox = sender as TextBox;
|
||||
if (textBox != null)
|
||||
{
|
||||
// Allow numbers (0 ~ 9), . (DOT), Backspace
|
||||
if ((e.KeyChar >= 0x30 && e.KeyChar <= 0x39) || e.KeyChar == 0x2E || e.KeyChar == 0x08 || e.KeyChar == (char)Keys.Return || e.KeyChar == (char)Keys.Enter)
|
||||
{
|
||||
if ((e.KeyChar == 0x2E) && (textBox.Text.Contains(Convert.ToString(0x2E)))) e.KeyChar = (char)0x00;
|
||||
if (e.KeyChar == (char)Keys.Return || e.KeyChar == (char)Keys.Enter)
|
||||
{
|
||||
e.Handled = true;
|
||||
|
||||
lfTemp = Convert.ToDouble(textBox.Text.Trim());
|
||||
switch (textBox.TabIndex)
|
||||
{
|
||||
// Immediately change value (On the fly) : SetVelocityImm()
|
||||
// Affect next motion : SetVelocity()
|
||||
|
||||
case 0: _ACS.SetVelocityImm((Axis)cboAxisNo.SelectedIndex, lfTemp); break;
|
||||
case 1: _ACS.SetAccelerationImm((Axis)cboAxisNo.SelectedIndex, lfTemp); break;
|
||||
case 2: _ACS.SetDecelerationImm((Axis)cboAxisNo.SelectedIndex, lfTemp); break;
|
||||
case 3: _ACS.SetKillDecelerationImm((Axis)cboAxisNo.SelectedIndex, lfTemp); break;
|
||||
case 4: _ACS.SetJerkImm((Axis)cboAxisNo.SelectedIndex, lfTemp); break;
|
||||
}
|
||||
|
||||
textBox.SelectAll();
|
||||
}
|
||||
}
|
||||
else e.KeyChar = (char)0x00;
|
||||
}
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
System.Diagnostics.Debug.WriteLine("TextBoxes_KeyPress() Error\n" + ex.ToString());
|
||||
}
|
||||
}
|
||||
|
||||
private void TextBoxes_Enter(object sender, EventArgs e)
|
||||
{
|
||||
try
|
||||
{
|
||||
TextBox textBox = sender as TextBox;
|
||||
if (textBox != null) textBox.SelectAll();
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
System.Diagnostics.Debug.WriteLine("TextBoxes_Enter() Error\n" + ex.ToString());
|
||||
}
|
||||
}
|
||||
|
||||
private void TextBoxes_Leave(object sender, EventArgs e)
|
||||
{
|
||||
try
|
||||
{
|
||||
double lfTemp = 0.0f;
|
||||
|
||||
TextBox textBox = sender as TextBox;
|
||||
if (textBox == null) return;
|
||||
|
||||
lfTemp = Convert.ToDouble(textBox.Text.Trim());
|
||||
switch (textBox.TabIndex)
|
||||
{
|
||||
case 0: _ACS.SetVelocityImm((Axis)cboAxisNo.SelectedIndex, lfTemp); break;
|
||||
case 1: _ACS.SetAccelerationImm((Axis)cboAxisNo.SelectedIndex, lfTemp); break;
|
||||
case 2: _ACS.SetDecelerationImm((Axis)cboAxisNo.SelectedIndex, lfTemp); break;
|
||||
case 3: _ACS.SetKillDecelerationImm((Axis)cboAxisNo.SelectedIndex, lfTemp); break;
|
||||
case 4: _ACS.SetJerkImm((Axis)cboAxisNo.SelectedIndex, lfTemp); break;
|
||||
}
|
||||
|
||||
textBox.SelectAll();
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
System.Diagnostics.Debug.WriteLine("TextBoxes_Leave() Error\n" + ex.ToString());
|
||||
}
|
||||
}
|
||||
#endregion
|
||||
|
||||
#region On and Off General Output
|
||||
private void btnSW_Click(object sender, EventArgs e)
|
||||
{
|
||||
int nBitNo = 0x01;
|
||||
|
||||
try
|
||||
{
|
||||
Button btn = sender as Button;
|
||||
if (btn == null) return;
|
||||
|
||||
nBitNo = btn.TabIndex;
|
||||
nBitNo = (0x01) << nBitNo;
|
||||
|
||||
if ((m_nOutputState & nBitNo) != 0)
|
||||
{
|
||||
// Set only 1 bit
|
||||
_ACS.SetOutput(
|
||||
0, // Port number
|
||||
btn.TabIndex, // Bit number
|
||||
0 // 0 = OFF, 1 = ON
|
||||
);
|
||||
|
||||
// If your I/O device is EtherCAT type, you cannot use this function
|
||||
// You can use WriteVariable function and Command function
|
||||
//
|
||||
// Ex) If EtherCAT mapped variable is 'EC_DOUT'
|
||||
// Want to ON bit '3'
|
||||
// _ACS.Command("EC_DOUT.3=1");
|
||||
}
|
||||
else
|
||||
{
|
||||
_ACS.SetOutput(0, btn.TabIndex, 1);
|
||||
}
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
System.Diagnostics.Debug.WriteLine("btnSW_Click() Error\n" + ex.ToString());
|
||||
}
|
||||
}
|
||||
#endregion
|
||||
|
||||
#region Event
|
||||
private void btnEventMotionEnd_Click(object sender, EventArgs e)
|
||||
{
|
||||
//_ACS.PHYSICALMOTIONEND +=_ACS_PHYSICALMOTIONEND;
|
||||
_ACS.EnableEvent(Interrupts.ACSC_INTR_PHYSICAL_MOTION_END);
|
||||
lstLog.Items.Add("PHYSICAL_MOTION_END event enabled");
|
||||
}
|
||||
|
||||
void _ACS_PHYSICALMOTIONEND(AxisMasks axis)
|
||||
{
|
||||
int bit = 0x01;
|
||||
int axisNo = 0;
|
||||
// Param value is bit number
|
||||
// Bit Number = Axis Number
|
||||
for (int i = 0; i < 64; i++)
|
||||
{
|
||||
if ((int)axis == bit)
|
||||
{
|
||||
axisNo = i;
|
||||
break;
|
||||
}
|
||||
bit = bit << 1;
|
||||
}
|
||||
|
||||
// Add log to ListBox
|
||||
this.Invoke((MethodInvoker)delegate
|
||||
{
|
||||
lstLog.Items.Add(String.Format(" - Axis {0}, Stoppped", axisNo));
|
||||
lstLog.SelectedIndex = lstLog.Items.Count - 1;
|
||||
});
|
||||
|
||||
}
|
||||
|
||||
private void btnEventProgramEnd_Click(object sender, EventArgs e)
|
||||
{
|
||||
//_ACS.PROGRAMEND += _ACS_PROGRAMEND;
|
||||
_ACS.EnableEvent(Interrupts.ACSC_INTR_PROGRAM_END);
|
||||
lstLog.Items.Add("PROGRAM_END event enabled");
|
||||
}
|
||||
|
||||
void _ACS_PROGRAMEND(BufferMasks buffer)
|
||||
{
|
||||
int bit = 0x01;
|
||||
int bufferNo = 0;
|
||||
// Param value is bit number
|
||||
// Bit Number = Axis Number
|
||||
for (int i = 0; i < 32; i++)
|
||||
{
|
||||
if ((int)buffer == bit)
|
||||
{
|
||||
bufferNo = i;
|
||||
break;
|
||||
}
|
||||
bit = bit << 1;
|
||||
}
|
||||
|
||||
// Add log to ListBox
|
||||
this.Invoke((MethodInvoker)delegate
|
||||
{
|
||||
lstLog.Items.Add(String.Format(" - Buffer {0}, Stoppped", bufferNo));
|
||||
lstLog.SelectedIndex = lstLog.Items.Count - 1;
|
||||
});
|
||||
}
|
||||
#endregion
|
||||
|
||||
#region Communication Termial - Using Transaction function
|
||||
private void txtCommand_KeyPress(object sender, KeyPressEventArgs e)
|
||||
{
|
||||
if (e.KeyChar == (char)Keys.Enter)
|
||||
btnSend.PerformClick();
|
||||
}
|
||||
|
||||
private void btnSend_Click(object sender, EventArgs e)
|
||||
{
|
||||
string temp = string.Empty;
|
||||
if (m_bConnected)
|
||||
{
|
||||
try
|
||||
{
|
||||
AppendTextToTextBox("> " + txtCommand.Text.Trim());
|
||||
temp = _ACS.Transaction(txtCommand.Text.Trim());
|
||||
}
|
||||
catch (ACS.SPiiPlusNET.ACSException ex)
|
||||
{
|
||||
temp = String.Format("?{0}", ex.ErrorCode);
|
||||
}
|
||||
finally
|
||||
{
|
||||
if (temp.Length > 0)
|
||||
{
|
||||
AppendTextToTextBox(temp);
|
||||
AppendTextToTextBox(":");
|
||||
}
|
||||
}
|
||||
|
||||
txtCommand.Focus();
|
||||
txtCommand.SelectAll();
|
||||
}
|
||||
}
|
||||
|
||||
private void AppendTextToTextBox(string text)
|
||||
{
|
||||
rtxtTerminal.AppendText(text);
|
||||
rtxtTerminal.AppendText(Environment.NewLine);
|
||||
rtxtTerminal.ScrollToCaret();
|
||||
}
|
||||
#endregion
|
||||
}
|
||||
}
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,17 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Windows.Forms;
|
||||
|
||||
namespace ACS_DotNET_Library_Advanced_Demo
|
||||
{
|
||||
static class Program
|
||||
{
|
||||
[STAThread]
|
||||
static void Main()
|
||||
{
|
||||
Application.EnableVisualStyles();
|
||||
Application.SetCompatibleTextRenderingDefault(false);
|
||||
Application.Run(new MainForm());
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,23 @@
|
||||
using System.Reflection;
|
||||
using System.Runtime.CompilerServices;
|
||||
using System.Runtime.InteropServices;
|
||||
|
||||
|
||||
[assembly: AssemblyTitle("ACS_DotNET_Library_Advanced_Demo")]
|
||||
[assembly: AssemblyDescription("")]
|
||||
[assembly: AssemblyConfiguration("")]
|
||||
[assembly: AssemblyCompany("")]
|
||||
[assembly: AssemblyProduct("ACS_DotNET_Library_Advanced_Demo")]
|
||||
[assembly: AssemblyCopyright("Copyright © 2019")]
|
||||
[assembly: AssemblyTrademark("")]
|
||||
[assembly: AssemblyCulture("")]
|
||||
|
||||
|
||||
[assembly: ComVisible(false)]
|
||||
|
||||
|
||||
[assembly: Guid("6215eb36-92d3-4f96-9331-1e8cbda161f4")]
|
||||
|
||||
|
||||
[assembly: AssemblyVersion("1.0.0.0")]
|
||||
[assembly: AssemblyFileVersion("1.0.0.0")]
|
||||
+93
@@ -0,0 +1,93 @@
|
||||
//------------------------------------------------------------------------------
|
||||
// <auto-generated>
|
||||
// 이 코드는 도구를 사용하여 생성되었습니다.
|
||||
// 런타임 버전:4.0.30319.18408
|
||||
//
|
||||
// 파일 내용을 변경하면 잘못된 동작이 발생할 수 있으며, 코드를 다시 생성하면
|
||||
// 이러한 변경 내용이 손실됩니다.
|
||||
// </auto-generated>
|
||||
//------------------------------------------------------------------------------
|
||||
|
||||
namespace ACS_DotNET_Library_Advanced_Demo.Properties {
|
||||
using System;
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// 지역화된 문자열 등을 찾기 위한 강력한 형식의 리소스 클래스입니다.
|
||||
/// </summary>
|
||||
// 이 클래스는 ResGen 또는 Visual Studio와 같은 도구를 통해 StronglyTypedResourceBuilder
|
||||
// 클래스에서 자동으로 생성되었습니다.
|
||||
// 멤버를 추가하거나 제거하려면 .ResX 파일을 편집한 다음 /str 옵션을 사용하여 ResGen을
|
||||
// 다시 실행하거나 VS 프로젝트를 다시 빌드하십시오.
|
||||
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")]
|
||||
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
|
||||
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
|
||||
internal class Resources {
|
||||
|
||||
private static global::System.Resources.ResourceManager resourceMan;
|
||||
|
||||
private static global::System.Globalization.CultureInfo resourceCulture;
|
||||
|
||||
[global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
|
||||
internal Resources() {
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 이 클래스에서 사용하는 캐시된 ResourceManager 인스턴스를 반환합니다.
|
||||
/// </summary>
|
||||
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
|
||||
internal static global::System.Resources.ResourceManager ResourceManager {
|
||||
get {
|
||||
if (object.ReferenceEquals(resourceMan, null)) {
|
||||
global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("ACS_DotNET_Library_Advanced_Demo.Properties.Resources", typeof(Resources).Assembly);
|
||||
resourceMan = temp;
|
||||
}
|
||||
return resourceMan;
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 이 강력한 형식의 리소스 클래스를 사용하여 모든 리소스 조회에 대한 현재 스레드의 CurrentUICulture
|
||||
/// 속성을 재정의합니다.
|
||||
/// </summary>
|
||||
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
|
||||
internal static global::System.Globalization.CultureInfo Culture {
|
||||
get {
|
||||
return resourceCulture;
|
||||
}
|
||||
set {
|
||||
resourceCulture = value;
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized resource of type System.Drawing.Bitmap.
|
||||
/// </summary>
|
||||
internal static System.Drawing.Bitmap Error {
|
||||
get {
|
||||
object obj = ResourceManager.GetObject("Error", resourceCulture);
|
||||
return ((System.Drawing.Bitmap)(obj));
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized resource of type System.Drawing.Bitmap.
|
||||
/// </summary>
|
||||
internal static System.Drawing.Bitmap Off {
|
||||
get {
|
||||
object obj = ResourceManager.GetObject("Off", resourceCulture);
|
||||
return ((System.Drawing.Bitmap)(obj));
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized resource of type System.Drawing.Bitmap.
|
||||
/// </summary>
|
||||
internal static System.Drawing.Bitmap On {
|
||||
get {
|
||||
object obj = ResourceManager.GetObject("On", resourceCulture);
|
||||
return ((System.Drawing.Bitmap)(obj));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,130 @@
|
||||
<?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=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<resheader name="writer">
|
||||
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
|
||||
<data name="Error" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
||||
<value>..\Images\Error.bmp;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
|
||||
</data>
|
||||
<data name="Off" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
||||
<value>..\Images\Off.bmp;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
|
||||
</data>
|
||||
<data name="On" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
||||
<value>..\Images\On.bmp;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
|
||||
</data>
|
||||
</root>
|
||||
+30
@@ -0,0 +1,30 @@
|
||||
//------------------------------------------------------------------------------
|
||||
// <auto-generated>
|
||||
// This code was generated by a tool.
|
||||
// Runtime Version:4.0.30319.18408
|
||||
//
|
||||
// Changes to this file may cause incorrect behavior and will be lost if
|
||||
// the code is regenerated.
|
||||
// </auto-generated>
|
||||
//------------------------------------------------------------------------------
|
||||
|
||||
namespace ACS_DotNET_Library_Advanced_Demo.Properties
|
||||
{
|
||||
|
||||
|
||||
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
|
||||
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "10.0.0.0")]
|
||||
internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase
|
||||
{
|
||||
|
||||
private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings())));
|
||||
|
||||
public static Settings Default
|
||||
{
|
||||
get
|
||||
{
|
||||
return defaultInstance;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,7 @@
|
||||
<?xml version='1.0' encoding='utf-8'?>
|
||||
<SettingsFile xmlns="http://schemas.microsoft.com/VisualStudio/2004/01/settings" CurrentProfile="(Default)">
|
||||
<Profiles>
|
||||
<Profile Name="(Default)" />
|
||||
</Profiles>
|
||||
<Settings />
|
||||
</SettingsFile>
|
||||
@@ -0,0 +1,11 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
|
||||
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
|
||||
<assemblyIdentity version="1.0.0.0" name="MyApplication.app"/>
|
||||
<trustInfo xmlns="urn:schemas-microsoft-com:asm.v2">
|
||||
<security>
|
||||
<requestedPrivileges xmlns="urn:schemas-microsoft-com:asm.v3">
|
||||
<requestedExecutionLevel level="asInvoker" uiAccess="false"/>
|
||||
</requestedPrivileges>
|
||||
</security>
|
||||
</trustInfo>
|
||||
</assembly>
|
||||
@@ -0,0 +1,5 @@
|
||||
E:\HexagonProjects\2022-05-直线电机平台\LM-Middleware\Motion\ACS Motion\obj\x64\Debug\ACS Motion.csprojAssemblyReference.cache
|
||||
E:\HexagonProjects\2022-05-直线电机平台\LM-Middleware\Motion\ACS Motion\obj\x64\Debug\ACS_DotNET_Library_Advanced_Demo.MainForm.resources
|
||||
E:\HexagonProjects\2022-05-直线电机平台\LM-Middleware\Motion\ACS Motion\obj\x64\Debug\ACS_DotNET_Library_Advanced_Demo.Properties.Resources.resources
|
||||
E:\HexagonProjects\2022-05-直线电机平台\LM-Middleware\Motion\ACS Motion\obj\x64\Debug\ACS Motion.csproj.GenerateResource.cache
|
||||
E:\HexagonProjects\2022-05-直线电机平台\LM-Middleware\Motion\ACS Motion\obj\x64\Debug\ACS Motion.csproj.CoreCompileInputs.cache
|
||||
Binary file not shown.
BIN
Binary file not shown.
+20
@@ -0,0 +1,20 @@
|
||||
C:\Program Files (x86)\ACS Motion Control\SPiiPlus ADK Suite v3.02\SPiiPlus .NET Library\.NET Library (Advanced) Demo\.NET Library (Advanced) Demo\bin\Debug\ACS_DotNET_Library_Advanced_Demo.exe
|
||||
C:\Program Files (x86)\ACS Motion Control\SPiiPlus ADK Suite v3.02\SPiiPlus .NET Library\.NET Library (Advanced) Demo\.NET Library (Advanced) Demo\bin\Debug\ACS_DotNET_Library_Advanced_Demo.pdb
|
||||
C:\Program Files (x86)\ACS Motion Control\SPiiPlus ADK Suite v3.02\SPiiPlus .NET Library\.NET Library (Advanced) Demo\.NET Library (Advanced) Demo\bin\Debug\ACS.SPiiPlusNET.dll
|
||||
C:\Program Files (x86)\ACS Motion Control\SPiiPlus ADK Suite v3.02\SPiiPlus .NET Library\.NET Library (Advanced) Demo\.NET Library (Advanced) Demo\obj\x86\Debug\.NET Library (Advanced) Demo.csprojResolveAssemblyReference.cache
|
||||
C:\Program Files (x86)\ACS Motion Control\SPiiPlus ADK Suite v3.02\SPiiPlus .NET Library\.NET Library (Advanced) Demo\.NET Library (Advanced) Demo\obj\x86\Debug\ACS_DotNET_Library_Advanced_Demo.Form1.resources
|
||||
C:\Program Files (x86)\ACS Motion Control\SPiiPlus ADK Suite v3.02\SPiiPlus .NET Library\.NET Library (Advanced) Demo\.NET Library (Advanced) Demo\obj\x86\Debug\ACS_DotNET_Library_Advanced_Demo.Properties.Resources.resources
|
||||
C:\Program Files (x86)\ACS Motion Control\SPiiPlus ADK Suite v3.02\SPiiPlus .NET Library\.NET Library (Advanced) Demo\.NET Library (Advanced) Demo\obj\x86\Debug\.NET Library (Advanced) Demo.csproj.GenerateResource.Cache
|
||||
C:\Program Files (x86)\ACS Motion Control\SPiiPlus ADK Suite v3.02\SPiiPlus .NET Library\.NET Library (Advanced) Demo\.NET Library (Advanced) Demo\obj\x86\Debug\ACS_DotNET_Library_Advanced_Demo.exe
|
||||
C:\Program Files (x86)\ACS Motion Control\SPiiPlus ADK Suite v3.02\SPiiPlus .NET Library\.NET Library (Advanced) Demo\.NET Library (Advanced) Demo\obj\x86\Debug\ACS_DotNET_Library_Advanced_Demo.pdb
|
||||
C:\Users\zhengxuan.zhang\Desktop\直线运动平台\.NET Library (Advanced) Demo\.NET Library (Advanced) Demo\bin\Debug\ACS_DotNET_Library_Advanced_Demo.exe
|
||||
C:\Users\zhengxuan.zhang\Desktop\直线运动平台\.NET Library (Advanced) Demo\.NET Library (Advanced) Demo\bin\Debug\ACS_DotNET_Library_Advanced_Demo.pdb
|
||||
C:\Users\zhengxuan.zhang\Desktop\直线运动平台\.NET Library (Advanced) Demo\.NET Library (Advanced) Demo\bin\Debug\ACS.SPiiPlusNET.dll
|
||||
C:\Users\zhengxuan.zhang\Desktop\直线运动平台\.NET Library (Advanced) Demo\.NET Library (Advanced) Demo\obj\x86\Debug\.NET Library (Advanced) Demo.csprojAssemblyReference.cache
|
||||
C:\Users\zhengxuan.zhang\Desktop\直线运动平台\.NET Library (Advanced) Demo\.NET Library (Advanced) Demo\obj\x86\Debug\ACS_DotNET_Library_Advanced_Demo.Form1.resources
|
||||
C:\Users\zhengxuan.zhang\Desktop\直线运动平台\.NET Library (Advanced) Demo\.NET Library (Advanced) Demo\obj\x86\Debug\ACS_DotNET_Library_Advanced_Demo.Properties.Resources.resources
|
||||
C:\Users\zhengxuan.zhang\Desktop\直线运动平台\.NET Library (Advanced) Demo\.NET Library (Advanced) Demo\obj\x86\Debug\.NET Library (Advanced) Demo.csproj.GenerateResource.cache
|
||||
C:\Users\zhengxuan.zhang\Desktop\直线运动平台\.NET Library (Advanced) Demo\.NET Library (Advanced) Demo\obj\x86\Debug\.NET Library (Advanced) Demo.csproj.CoreCompileInputs.cache
|
||||
C:\Users\zhengxuan.zhang\Desktop\直线运动平台\.NET Library (Advanced) Demo\.NET Library (Advanced) Demo\obj\x86\Debug\.NET Library (Advanced) Demo.csproj.CopyComplete
|
||||
C:\Users\zhengxuan.zhang\Desktop\直线运动平台\.NET Library (Advanced) Demo\.NET Library (Advanced) Demo\obj\x86\Debug\ACS_DotNET_Library_Advanced_Demo.exe
|
||||
C:\Users\zhengxuan.zhang\Desktop\直线运动平台\.NET Library (Advanced) Demo\.NET Library (Advanced) Demo\obj\x86\Debug\ACS_DotNET_Library_Advanced_Demo.pdb
|
||||
@@ -0,0 +1,10 @@
|
||||
E:\HexagonProjects\2022-05-直线电机平台\LM-Middleware\Motion\ACS Motion\bin\Debug\ACS_DotNET_Library_Advanced_Demo.exe
|
||||
E:\HexagonProjects\2022-05-直线电机平台\LM-Middleware\Motion\ACS Motion\bin\Debug\ACS_DotNET_Library_Advanced_Demo.pdb
|
||||
E:\HexagonProjects\2022-05-直线电机平台\LM-Middleware\Motion\ACS Motion\obj\x86\Debug\ACS Motion.csprojAssemblyReference.cache
|
||||
E:\HexagonProjects\2022-05-直线电机平台\LM-Middleware\Motion\ACS Motion\obj\x86\Debug\ACS_DotNET_Library_Advanced_Demo.MainForm.resources
|
||||
E:\HexagonProjects\2022-05-直线电机平台\LM-Middleware\Motion\ACS Motion\obj\x86\Debug\ACS_DotNET_Library_Advanced_Demo.Properties.Resources.resources
|
||||
E:\HexagonProjects\2022-05-直线电机平台\LM-Middleware\Motion\ACS Motion\obj\x86\Debug\ACS Motion.csproj.GenerateResource.cache
|
||||
E:\HexagonProjects\2022-05-直线电机平台\LM-Middleware\Motion\ACS Motion\obj\x86\Debug\ACS Motion.csproj.CoreCompileInputs.cache
|
||||
E:\HexagonProjects\2022-05-直线电机平台\LM-Middleware\Motion\ACS Motion\obj\x86\Debug\ACS Motion.csproj.CopyComplete
|
||||
E:\HexagonProjects\2022-05-直线电机平台\LM-Middleware\Motion\ACS Motion\obj\x86\Debug\ACS_DotNET_Library_Advanced_Demo.exe
|
||||
E:\HexagonProjects\2022-05-直线电机平台\LM-Middleware\Motion\ACS Motion\obj\x86\Debug\ACS_DotNET_Library_Advanced_Demo.pdb
|
||||
Binary file not shown.
Binary file not shown.
BIN
Binary file not shown.
Reference in New Issue
Block a user