启动函数,回家函数判断,正在调试 读取ACS , EF3, DLL版本号,遗留日志删除功能

This commit is contained in:
zhengxuan.zhang
2022-10-14 16:44:52 +08:00
parent ec5f857abb
commit 7861cdf511
11 changed files with 73 additions and 45 deletions
+1
View File
@@ -428,6 +428,7 @@ const int HSI_MAX_POSITIONS_STORED = 500;
// 第一阶段需要重写的API 函数
HSI_API HSI_STATUS WINAPI HSI_MOTION_STARTUP(bool bHome);
HSI_API HSI_STATUS WINAPI HSI_MOTION_GET_FIREWAREVERION(byte* verion);
HSI_API HSI_STATUS WINAPI HSI_MOTION_SHUTDOWN();
HSI_API HSI_STATUS WINAPI HSI_EF3MOTION_GET_SPEED_XYZ(int axis, double& Speed);
+2 -4
View File
@@ -100,9 +100,10 @@
<Link>
<SubSystem>Windows</SubSystem>
<GenerateDebugInformation>true</GenerateDebugInformation>
<AdditionalDependencies>hid.lib;setupapi.lib;DirectXLib\lib\x64\d2d1.lib;DirectXLib\lib\x64\d3d9.lib;DirectXLib\lib\x64\d3d10.lib;DirectXLib\lib\x64\d3d10_1.lib;DirectXLib\lib\x64\d3d11.lib;DirectXLib\lib\x64\d3dcompiler.lib;DirectXLib\lib\x64\D3DCSX.lib;DirectXLib\lib\x64\d3dx9.lib;DirectXLib\lib\x64\d3dx10.lib;DirectXLib\lib\x64\d3dx11.lib;DirectXLib\lib\x64\d3dxof.lib;DirectXLib\lib\x64\dinput8.lib;DirectXLib\lib\x64\dsound.lib;DirectXLib\lib\x64\dwrite.lib;DirectXLib\lib\x64\DxErr.lib;DirectXLib\lib\x64\dxgi.lib;DirectXLib\lib\x64\dxguid.lib;DirectXLib\lib\x64\X3DAudio.lib;DirectXLib\lib\x64\xapobase.lib;DirectXLib\lib\x64\XAPOFX.lib;DirectXLib\lib\x64\XInput.lib;%(AdditionalDependencies);%(AdditionalDependencies)</AdditionalDependencies>
<AdditionalDependencies>hid.lib;setupapi.lib;DirectXLib\lib\x64\d2d1.lib;DirectXLib\lib\x64\d3d9.lib;DirectXLib\lib\x64\d3d10.lib;DirectXLib\lib\x64\d3d10_1.lib;DirectXLib\lib\x64\d3d11.lib;DirectXLib\lib\x64\d3dcompiler.lib;DirectXLib\lib\x64\D3DCSX.lib;DirectXLib\lib\x64\d3dx9.lib;DirectXLib\lib\x64\d3dx10.lib;DirectXLib\lib\x64\d3dx11.lib;DirectXLib\lib\x64\d3dxof.lib;DirectXLib\lib\x64\dinput8.lib;DirectXLib\lib\x64\dsound.lib;DirectXLib\lib\x64\dwrite.lib;DirectXLib\lib\x64\DxErr.lib;DirectXLib\lib\x64\dxgi.lib;DirectXLib\lib\x64\dxguid.lib;DirectXLib\lib\x64\X3DAudio.lib;DirectXLib\lib\x64\xapobase.lib;DirectXLib\lib\x64\XAPOFX.lib;DirectXLib\lib\x64\XInput.lib;ACSCL_x64.LIB;%(AdditionalDependencies)</AdditionalDependencies>
<ModuleDefinitionFile>
</ModuleDefinitionFile>
<AdditionalLibraryDirectories>$(LocalDebuggerWorkingDirectory)\ACS;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
</Link>
<PostBuildEvent>
<Command>copy "$(TargetDir)$(ProjectName).dll" "$(SolutionDir)HSI_SEVENOCEAN_EF1_CsTest\bin\Debug\HSI.dll"</Command>
@@ -198,9 +199,6 @@ xcopy "$(OutDir)\$(ProjectName).pdb" ..\HSI_GOOGOL_GTS800_WPFTest\bin\Debug\HSI.
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Create</PrecompiledHeader>
</ClCompile>
</ItemGroup>
<ItemGroup>
<Library Include="ACS\ACSCL_x64.LIB" />
</ItemGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
<ImportGroup Label="ExtensionTargets">
</ImportGroup>
@@ -22,7 +22,4 @@
<ClInclude Include="SevenOcean\CMMIO_SERIAL.H" />
<ClInclude Include="ACS\ACSC.h" />
</ItemGroup>
<ItemGroup>
<Library Include="ACS\ACSCL_x64.LIB" />
</ItemGroup>
</Project>
+33 -27
View File
@@ -18,6 +18,7 @@ using namespace std;
#ifdef _DEBUG
#define new DEBUG_NEW
#endif
//===========================================================================
HSI_Motion* g_pHSI_Motion = nullptr;
CLogger extern* g_pLogger = nullptr;
@@ -197,12 +198,16 @@ HSI_Motion::HSI_Motion()
{
m_SixEightSubArea[i] = 0; //六环八区分区功能
}
//日志处理
//DeleteDirectory()
CTime tm = CTime::GetCurrentTime();
CString csTime = tm.Format("%Y-%m-%d_%H-%M-%S"); //构造时间字符串
CString dir = L"\\Log\\" + csTime += L"_EF3.Log";
g_pLogger = new CLogger(dir);
g_pLogger2 = new CLogger(L"\\Log\\EF3_SumTime.Log");
//档位参数
for (int i = 0; i < 5; i++)
{
for (int j = 0; j < 5; j++)
@@ -253,7 +258,8 @@ HSI_Motion::HSI_Motion()
}
GetAppPath(m_AppPath);
m_LogIsOpen[0] = GetPrivateProfileInt(L"LOG", L"LOG_IS_OPEN_0", 0, m_AppPath + _T("\\Config\\EF3_Motion.ini"));
g_pLogger->IsEnabledLog = m_LogIsOpen[0] == 1 ? true : false;
g_pLogger->IsEnabledLog = m_LogIsOpen[0] == 1 ? true : false;//是否启用日志
m_Set_XYZA_Reserve = 0; //XYZA轴方向
m_motorType = 0; //电机类型 1为伺服电机 0为步进电机
m_AxisHex[0] = 0;
@@ -401,7 +407,7 @@ HSI_STATUS HSI_Motion::Startup(HWND _hWnd, bool _bOfflineOnly)
}
m_SO7_Serial.SetTimeouts(1000, 1000);
m_bConnected = true;
g_pLogger->SendAndFlushWithTime(L"[Startup] Serial is open success\n");
g_pLogger->SendAndFlushWithTime(L"[Startup] Serial: [%d] is open success\n", m_EF3COMPort);
}
else
{
@@ -419,7 +425,6 @@ HSI_STATUS HSI_Motion::Startup(HWND _hWnd, bool _bOfflineOnly)
L"[ACS Motion] Wait for opening of communication with the controller... \n");
// 10.0.0.100 - default IP address of the controller
handleACS = acsc_OpenCommEthernet("10.0.0.100", ACSC_SOCKET_DGRAM_PORT);
// for the connection to the controller via local network or Internet
// hComm = acsc_OpenCommEthernet("10.0.0.100", ACSC_SOCKET_STREAM_PORT);
@@ -437,19 +442,17 @@ HSI_STATUS HSI_Motion::Startup(HWND _hWnd, bool _bOfflineOnly)
return HSI_STATUS_FAILED;
}
m_bACSConnected = true;
g_pLogger->SendAndFlushWithTime(
L"[ACS Motion] Communication with the controller established success\n");
g_pLogger->SendAndFlushWithTime(L"[ACS Motion] ACS Established Success\n");
//获取ACS 控制器版本号
char Firmware[256];
int Received;
if(!acsc_GetFirmwareVersion(handleACS,Firmware,255,&Received,nullptr))
if (!acsc_GetFirmwareVersion(handleACS, Firmware, 255, &Received, nullptr))
{
g_pLogger->SendAndFlushWithTime(L"[ACS Motion] GET ACS Controller Version failed\n");
}
g_pLogger->SendAndFlushWithTime(L"[ACS Motion] ACS Controller Version: %s \n",Firmware);
g_pLogger->SendAndFlushWithTime(L"[ACS Motion] ACS Controller Version: %s\n", Firmware);
}
else
{
@@ -722,7 +725,7 @@ HSI_STATUS HSI_Motion::GetFirmwareVersion(byte* version)
m_Thread_StateData = HSI_THREAD_PAUSED;
Sleep(3);
int waite_count = 0;
unsigned char senddata[64] = {0};
unsigned char senddata[8] = {0};
//senddata[0] = 0x04;
//senddata[1] = 0x03;
@@ -1007,7 +1010,7 @@ HSI_STATUS HSI_Motion::HomeMachine(bool bHomed)
//运行 ACS 控制器内buffer0 自动回家动作
//回家后,启用正负限位
if (!acsc_RunBuffer(handleACS, 0, NULL, ACSC_SYNCHRONOUS))
if (!acsc_RunBuffer(handleACS, ACSC_BUFFER_6, nullptr, ACSC_SYNCHRONOUS))
{
g_pLogger->SendAndFlushWithTime(L"[HomeMachine] ACS Run Buffer 0 error\n");
return HSI_STATUS_FAILED;
@@ -1381,8 +1384,9 @@ HSI_STATUS HSI_Motion::IsHomed(bool& bHomed)
}
// 判断是否需要回家,读取ACS控制器回家标志位,来判断本次上电是否已经回过家
if (!acsc_ReadInteger(handleACS, ACSC_NONE, "ISHOMED", ACSC_NONE, ACSC_NONE, ACSC_NONE, ACSC_NONE, isHomed,
NULL))
if (!acsc_ReadInteger(handleACS, ACSC_NONE, "YAW_HOME_DONE", ACSC_NONE, ACSC_NONE, ACSC_NONE, ACSC_NONE,
isHomed,
nullptr))
{
g_pLogger->SendAndFlushWithTime(L"[IsHomed] ACS Read ISHOMED Flag Error\n");
CurrentHomeMachineState = E_EF3_HOME_NONE;
@@ -1390,7 +1394,8 @@ HSI_STATUS HSI_Motion::IsHomed(bool& bHomed)
bHomed = false;
}
g_pLogger->SendAndFlushWithTime(L"[IsHomed] ACS Read ISHOMED X:%d Y1:%d Y2:%d Z:%d\n", isHomed[0], isHomed[1],
g_pLogger->SendAndFlushWithTime(L"[IsHomed] ACS Read YAW_HOME_DONE X:%d Y1:%d Y2:%d Z:%d\n", isHomed[0],
isHomed[1],
isHomed[2], isHomed[3]);
//如果各个轴标志位 已经回过家
@@ -1778,7 +1783,6 @@ HSI_STATUS HSI_Motion::Jog(UINT AxisTypes, double Speed)
if (CurrentHomeMachineState == E_EF3_HOME_FINISHED)
{
//软限位
}
else
{
@@ -1806,7 +1810,7 @@ HSI_STATUS HSI_Motion::Jog(UINT AxisTypes, double Speed)
int acsDirection = bJOGDir ? ACSC_POSITIVE_DIRECTION : ACSC_NEGATIVE_DIRECTION;
if (!acsc_Jog(handleACS, 0, AxisTypes, acsDirection, nullptr))
{
g_pLogger->SendAndFlushWithTime(L"[Jog] [%d] 轴 [%s] 方向移动失败",AxisTypes,bJOGDir?"":"");
g_pLogger->SendAndFlushWithTime(L"[Jog] [%d] 轴 [%s] 方向移动失败", AxisTypes, bJOGDir ? "" : "");
}
jogMoving = true;
@@ -2177,7 +2181,7 @@ HSI_STATUS HSI_Motion::StopJogOld()
g_pLogger->SendAndFlushWithTime(L"[StopJog] PushButtonTime = %d\n", t_use);
Sleep(t_use);
}
unsigned char m_SendJogData[64] = { 0 };
unsigned char m_SendJogData[64] = {0};
if (m_IsUseJerk == 0)
{
m_SendJogData[0] = CT_MOTOR;
@@ -2430,8 +2434,9 @@ HSI_STATUS HSI_Motion::GetPositionXyzOld(UINT AxisTypes, double& PositionX, doub
}
return rStatus;
}
HSI_STATUS HSI_Motion::GetPositionXyz(UINT AxisTypes, double& PositionX, double& PositionY, double& PositionZ,
double& Time)
double& Time)
{
auto rStatus = HSI_STATUS_NORMAL;
//UNREFERENCED_PARAMETER(AxisTypes)的意思就是告诉编译器,
@@ -2467,7 +2472,7 @@ HSI_STATUS HSI_Motion::GetPositionXyz(UINT AxisTypes, double& PositionX, double&
m_EncPos[1] = PositionX;
m_EncPos[2] = PositionY;
m_EncPos[3] = PositionZ;
m_EncPos[4] = m_PosForAllAxis[4];// m_PosForAllAxis 记录4轴位置
m_EncPos[4] = m_PosForAllAxis[4]; // m_PosForAllAxis 记录4轴位置
m_PosForAllAxis[1] = PositionX;
m_PosForAllAxis[2] = PositionY;
m_PosForAllAxis[3] = PositionZ;
@@ -2483,7 +2488,7 @@ HSI_STATUS HSI_Motion::GetPositionXyz(UINT AxisTypes, double& PositionX, double&
m_PosForAllAxis[4] = m_EncPos[4];
g_pLogger->SendAndFlushWithTime(L"[GetPositionEncPrfMulti] failed\n");
}
Time = set_end - set_start;
}
return rStatus;
@@ -3160,7 +3165,7 @@ HSI_STATUS HSI_Motion::SetPositionXyz(UINT AxisTypes, double PositionX, double P
m_PosThread[3] = PositionZ;
m_PosThread[4] = m_PositionA;
//打印当前位置,目标位置
//g_pLogger->SendAndFlushWithTime(
// L"[SetPositionXyzNowPos] Pos[1] = %.4f,Pos[2] = %.4f,Pos[3] = %.4f,Pos[4] = %.4f\n",
@@ -3171,19 +3176,20 @@ HSI_STATUS HSI_Motion::SetPositionXyz(UINT AxisTypes, double PositionX, double P
PositionY, PositionZ, m_PositionA);
//打印轴当前运动参数
double motionParam[5] = { 0 };
double motionParam[5] = {0};
GetMotorParam(AXIS_X, motionParam);
g_pLogger->SendAndFlushWithTime(
L"[SetPositionXyz] axis= %d,GetVelocity = %d,GetAcceleration= %d,GetDeceleration= %d, GetKillDeceleration= %d, GetJerk= %d\n",AXIS_X,motionParam[0],motionParam[1],motionParam[2],motionParam[3],motionParam[4]);
L"[SetPositionXyz] axis= %d,GetVelocity = %d,GetAcceleration= %d,GetDeceleration= %d, GetKillDeceleration= %d, GetJerk= %d\n",
AXIS_X, motionParam[0], motionParam[1], motionParam[2], motionParam[3], motionParam[4]);
//设置轴运动速度,TO-DO
//开始运动到指定位置
int Axes[] = { ACSC_AXIS_0, ACSC_AXIS_1, ACSC_AXIS_2 }; //需要运动的轴
double Points[] = { PositionX ,PositionY,PositionZ }; //目标位置点
if(!acsc_ToPointM(handleACS, 0, Axes, Points, nullptr))
int Axes[] = {ACSC_AXIS_0, ACSC_AXIS_1, ACSC_AXIS_2}; //需要运动的轴
double Points[] = {PositionX, PositionY, PositionZ}; //目标位置点
if (!acsc_ToPointM(handleACS, 0, Axes, Points, nullptr))
{
g_pLogger->SendAndFlushWithTime(L"[SetPositionXyz] ACS Multi Motion Error");
}
@@ -3194,7 +3200,7 @@ HSI_STATUS HSI_Motion::SetPositionXyz(UINT AxisTypes, double PositionX, double P
//圆弧插补
if (eType == HSI_MOTION_MOVE_NOWAIT)//非等待
if (eType == HSI_MOTION_MOVE_NOWAIT) //非等待
{
g_pLogger->SendAndFlushWithTime(L"[SetPositionXyz] Nowait SetEvent\n");
g_pLogger->SendAndFlushWithTime(L"[SetPositionXyz] Nowait move!\n");
@@ -3204,7 +3210,7 @@ HSI_STATUS HSI_Motion::SetPositionXyz(UINT AxisTypes, double PositionX, double P
m_Thread_State = HSI_THREAD_RUNNING;
SetEvent(m_hTriggerEvent);
}
if (eType == HSI_MOTION_MOVE_WAIT)//等待模式
if (eType == HSI_MOTION_MOVE_WAIT) //等待模式
{
g_pLogger->SendAndFlushWithTime(L"[SetPositionXyz] Out Success Wait Mode\n");
m_Thread_State = HSI_THREAD_RUNNING;
+6 -1
View File
@@ -158,6 +158,11 @@ public:
~HSI_Motion() override;
HSI_STATUS IsSupported(UINT& Types) override;
HSI_STATUS Startup(HWND _hWnd, bool _bOfflineOnly) override;
/**
* \brief EF3固件版本
* \param version
* \return
*/
HSI_STATUS GetFirmwareVersion(byte* version);
/**
* \brief
@@ -272,7 +277,7 @@ public:
* \return
*/
HSI_STATUS Shutdown() override;
HSI_STATUS ShutdownOld() override;
//HSI_STATUS ShutdownOld() override;
HSI_STATUS IsSupportedEx(UINT AxisTypes, UINT& Types);
HSI_STATUS StartupEx(UINT AxisTypes, bool bHome);
+20
View File
@@ -2,6 +2,10 @@
#include "logger.h"
#include <atltime.h>
#include <sys/timeb.h>
#include <stdio.h>
#include <string.h>
#include <sys/stat.h>
void CLogger::SendAtTime(const TCHAR* buffer)
{
@@ -115,3 +119,19 @@ void CLogger::SendAndFlushPerMode(LPCTSTR format, ...)
}
LeaveCriticalSection(&m_lockLogger);
}
//void Getfilepath(const char* path, const char* filename, char* filepath)
//{
// strcpy(filepath, path);
// if (filepath[strlen(path) - 1] != '/')
// strcat(filepath, "/");
// strcat(filepath, filename);
// printf("path is = %s\n", filepath);
//}
//删除当前目录下txt文件
void CLogger::DeleteOldFile()
{
}
+2
View File
@@ -51,6 +51,8 @@ public:
void SendAndFlush(LPCTSTR, ...);
void SendAndFlushPerMode(LPCTSTR, ...);
void SendAndFlushWithTime(LPCTSTR, ...);
void CLogger::DeleteOldFile();
bool IsEnabledLog/* = false*/; //是否启用日志
CString m_FileName;
long m_lLogMask;
+2 -2
View File
@@ -12,5 +12,5 @@
#define HSI_VERSION_REVNUM
#define HSI_VERSION_BUILD_DATE _T(__DATE__ )
#define HSI_VERSION_BUILD_TIME _T(__TIME__ )
#define HSI_FILE_DESCRIPTION "2022.10.13 / 17:21 "
#define HSI_FILE_CSDESCRIPTION _T("2022.10.13 / 17:21 ")
#define HSI_FILE_DESCRIPTION "2022.10.14 / 11:53 "
#define HSI_FILE_CSDESCRIPTION _T("2022.10.14 / 11:53 ")
+1
View File
@@ -125,6 +125,7 @@ namespace HSI_SEVENOCEAN_EF1_CsTest.HSI
[DllImport("HSI.dll", EntryPoint = "HSI_MOTION_IS_HOMED", CharSet = CharSet.Unicode)]
public static extern Def.HSI_STATUS IsHomed(ref bool bHomed);
[DllImport("HSI.dll", EntryPoint = "HSI_MOTION_GET_SPEED_XYZ", CharSet = CharSet.Unicode)]
public static extern Def.HSI_STATUS GetSpeedXyz(ref double speed);
+6 -8
View File
@@ -12,27 +12,25 @@ namespace HSI_SEVENOCEAN_EF1_CsTest
private static void Main(string[] args)
{
//获取HSI Dll版本
//1 获取HSI Dll版本
uint major = Def.HSI_APIVersionMajor;
uint minjor = Def.HSI_APIVersionMinor;
var rStatus = Interface.GetInterfaceVersion(ref major, ref minjor);
Console.WriteLine("Interface.GetInterfaceVersion: {0}", rStatus);
Console.WriteLine("HSI.dll Version: {0}.{1}", major, minjor);
//HSI 初始化
//2 HSI 初始化
var mainIntPtr = User32Api.GetCurrentWindowHandle();
rStatus = Interface.Startup(mainIntPtr, false);
Console.WriteLine("Interface.Startup: {0}", rStatus);
//获取机器类型
//3 获取机器类型
var machineVersion = Def.HSI_EF3Version;
rStatus = Interface.GetMachineInfo(ref machineVersion);
Console.WriteLine("Interface.GetMachineInfo: {0}", rStatus);
Console.WriteLine("HSI EF3 Version: {0}", machineVersion);
//设置回调,方便根据回调结果进行提醒
//4 设置回调,方便根据回调结果进行提醒
Interface.HsiCallback = Interface.EventCallback;
rStatus = Interface.SetEventCallback(Interface.HsiCallback);
Console.WriteLine("SetEventCallback:{0}", rStatus); //事件回调成功
@@ -42,14 +40,14 @@ namespace HSI_SEVENOCEAN_EF1_CsTest
rStatus = Motion.Startup(true); //运动初始化,回家判断
Console.WriteLine("Motion.Startup:{0}", rStatus);
//获取EF3固件版本号,待测试
//5 获取EF3固件版本号,待测试
var EF3Version = new byte[20];
//IntPtr intPtrEF3Version = IntPtr.Zero;
IntPtr intPtrEF3Version = Marshal.StringToHGlobalAnsi("");
rStatus = Interface.MotionGetFirewareVerion(intPtrEF3Version);
Console.WriteLine("Interface.MotionGetFirewareVerion: {0}", rStatus);
Marshal.Copy(intPtrEF3Version, EF3Version, 0, EF3Version.Length);
Console.WriteLine("EF3 FirewareVerion Version: {0}", Encoding.Unicode.GetString(EF3Version));
Console.WriteLine("EF3 FirewareVerion Version: {0}", Encoding.UTF8.GetString(EF3Version));
var bHomed = true;
rStatus = Motion.IsHomed(ref bHomed);