# 对专机2的支持,新增对ACS 全局变量的接口,支持写入方向
This commit is contained in:
@@ -32,8 +32,9 @@ static bool g_bOfflineOnly = false;
|
||||
//Z 8 - 280 5
|
||||
//
|
||||
//
|
||||
//
|
||||
//
|
||||
//V0.1.10 2024/04/07
|
||||
// ---------------------------------------
|
||||
//1、配合专机2使用,增加了方向的传递接口 江苏高光半导体掩膜板瑕疵检测项目
|
||||
//
|
||||
////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
@@ -409,6 +410,37 @@ HSI_API HSI_STATUS WINAPI HSI_MOTION_SET_FOCUSSPEED_XYZ(double Speed)
|
||||
}
|
||||
|
||||
|
||||
//===========================================================================
|
||||
HSI_API HSI_STATUS WINAPI HSI_MOTION_SET_DIRECTION_FLAG(int CurrentDirection)
|
||||
{
|
||||
auto rStatus = HSI_STATUS_NORMAL;
|
||||
if (g_pHSI_Motion)
|
||||
{
|
||||
rStatus = g_pHSI_Motion->SetMotionDirectionFlag(CurrentDirection);
|
||||
}
|
||||
else
|
||||
{
|
||||
rStatus = HSI_STATUS_FAILED;
|
||||
}
|
||||
return rStatus;
|
||||
|
||||
}
|
||||
|
||||
//===========================================================================
|
||||
HSI_API HSI_STATUS WINAPI HSI_MOTION_GET_DIRECTION_FLAG(int& CurrentDirection)
|
||||
{
|
||||
auto rStatus = HSI_STATUS_NORMAL;
|
||||
if (g_pHSI_Motion)
|
||||
{
|
||||
rStatus = g_pHSI_Motion->GetMotionDirectionFlag(CurrentDirection);
|
||||
}
|
||||
else
|
||||
{
|
||||
rStatus = HSI_STATUS_FAILED;
|
||||
}
|
||||
return rStatus;
|
||||
}
|
||||
|
||||
#pragma endregion
|
||||
|
||||
#define USE_Motion_API
|
||||
|
||||
@@ -21,7 +21,7 @@
|
||||
#endif
|
||||
|
||||
const int HSI_APIVersionMajor = 1;
|
||||
const int HSI_APIVersionMinor = 9;
|
||||
const int HSI_APIVersionMinor = 10;
|
||||
const int HSI_MaxStringLength = 255; // Maximum string length (buffer size - 1)
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
// Interface API
|
||||
@@ -456,7 +456,6 @@ HSI_API HSI_STATUS WINAPI HSI_MOTION_GET_POSITION_XYZ_CACHE(unsigned char* Cache
|
||||
|
||||
// 第二阶段需要重写的API 函数
|
||||
HSI_API HSI_STATUS WINAPI HSI_MOTION_IS_SUPPORTED(UINT& Types);
|
||||
HSI_API HSI_STATUS WINAPI HSI_MOTION_GET_SPEED_XYZ(double& Speed);
|
||||
HSI_API HSI_STATUS WINAPI HSI_MOTION_SET_SPEED_XYZ(double Speed);
|
||||
HSI_API HSI_STATUS WINAPI HSI_MOTION_GET_ACCELERATION_XYZ(double& AccelX, double& AccelY, double& AccelZ);
|
||||
HSI_API HSI_STATUS WINAPI HSI_MOTION_SET_ACCELERATION_XYZ(double AccelX, double AccelY, double AccelZ);
|
||||
@@ -491,8 +490,10 @@ HSI_API HSI_STATUS WINAPI HSI_MOTION_SET_POSITION_EX(UINT AxisTypes, double Posi
|
||||
HSI_API HSI_STATUS WINAPI HSI_MOTION_GET_SPEED_EX(UINT AxisTypes, double& Speed);
|
||||
HSI_API HSI_STATUS WINAPI HSI_MOTION_GET_ACCELERATION_EX(UINT AxisTypes, double& Accel);
|
||||
HSI_API HSI_STATUS WINAPI HSI_MOTION_SET_ACCELERATION_EX(UINT AxisTypes, double Accel);
|
||||
|
||||
HSI_API HSI_STATUS WINAPI HSI_ILLUMINATION_SHUTDOWN();
|
||||
HSI_API HSI_STATUS WINAPI HSI_MOTION_SET_DIRECTION_FLAG(int CurrentDirection); //设置运动方向标志位,用于下层触发相机
|
||||
HSI_API HSI_STATUS WINAPI HSI_MOTION_GET_DIRECTION_FLAG(int& CurrentDirection); //获取运动方向标志位
|
||||
|
||||
|
||||
//暂未实现
|
||||
//HSI_API HSI_STATUS WINAPI HSI_MOTION_SET_MAGNIFICATION(UINT AxisTypes, double mag, HSI_MOTION_MOVE_TYPE eType, double dSpeedGear);
|
||||
|
||||
@@ -138,6 +138,8 @@ HSI_Motion::HSI_Motion()
|
||||
m_IsUseTwentySixLight = 0; //是否启用26路灯光 0为不启用 1位启用 默认为0
|
||||
m_IsUseEF3 = 0; //是否启用EF3
|
||||
m_IsUseACS = 0; //是否启用ACS
|
||||
m_IsUseSimulator = false; // 增加一个是否连接虚拟机的标志
|
||||
|
||||
m_IsUseRocker = 0; //是否启用摇杆 0为不启用 1为启用旧摇杆,2为新摇杆, 默认为0
|
||||
m_IsCloseRocker = 0;
|
||||
m_DeviceType = 0; //设备类型,0为通用设备,1为三激光, 2为大视野,3为转盘设备 默认为0
|
||||
@@ -502,14 +504,19 @@ HSI_STATUS HSI_Motion::Startup(HWND _hWnd, bool _bOfflineOnly)
|
||||
g_pLogger->SendAndFlushWithTime(
|
||||
L"[ACS Motion] Wait for opening of communication with the controller... \n");
|
||||
|
||||
#ifdef OFFLINE //如果定义离线模式
|
||||
handleACS = acsc_OpenCommSimulator();
|
||||
#else
|
||||
// 10.0.0.100 - default IP address of the controller
|
||||
handleACS = acsc_OpenCommEthernet(m_ACS_IPAddresses, 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);
|
||||
|
||||
if (m_IsUseSimulator == 1)
|
||||
{
|
||||
handleACS = acsc_OpenCommSimulator();
|
||||
}
|
||||
else
|
||||
{
|
||||
|
||||
// 10.0.0.100 - default IP address of the controller
|
||||
handleACS = acsc_OpenCommEthernet(m_ACS_IPAddresses, 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);
|
||||
}
|
||||
if (handleACS == ACSC_INVALID) //打开失败
|
||||
{
|
||||
g_pLogger->SendAndFlushWithTime(L"[ACS Motion] error while opening communication.\n");
|
||||
@@ -523,7 +530,7 @@ HSI_STATUS HSI_Motion::Startup(HWND _hWnd, bool _bOfflineOnly)
|
||||
EventCallback(sEvenProp);
|
||||
return HSI_STATUS_FAILED;
|
||||
}
|
||||
#endif
|
||||
|
||||
//使能电机
|
||||
//int Axes[] = { ACSC_AXIS_1, ACSC_AXIS_0, ACSC_AXIS_8, -1 }; //根据电气层面定义,这里的0对应X轴,1对应Y轴,8对应Z轴
|
||||
if (!acsc_EnableM(handleACS, ACSAxisNumbers, nullptr))
|
||||
@@ -918,7 +925,7 @@ HSI_STATUS HSI_Motion::GetFirmwareVersion(byte* version)
|
||||
}
|
||||
}
|
||||
|
||||
g_pLogger->SendAndFlushWithTime(L"[GetFirmwareVersion] EF3 Firmware Version %S\n", version);
|
||||
g_pLogger->SendAndFlushWithTime(L"[GetFirmwareVersion] EF3 Firmware Version %S \n", version);
|
||||
m_Thread_StateData = HSI_THREAD_RUNNING;
|
||||
SetEvent(m_hTriggerEventData); //触发事件,其中hEvent表示句柄,返回值:如果操作成功,则返回非零值,否则为0。
|
||||
return HSI_STATUS_NORMAL;
|
||||
@@ -4272,6 +4279,7 @@ HSI_STATUS HSI_Motion::Load_EF3_Config_Inifile(CString GoogolIniFile)
|
||||
}
|
||||
m_IsUseEF3 = GetPrivateProfileInt(L"EF3", L"IS_USEEF3", 0, csAppPath);
|
||||
m_IsUseACS = GetPrivateProfileInt(L"EF3", L"IS_USEACS", 0, csAppPath);
|
||||
m_IsUseSimulator = GetPrivateProfileInt(L"EF3", L"IS_USE_SIMULATOR", 0, csAppPath);
|
||||
m_ForSoft = GetPrivateProfileInt(L"SOFTWARE", L"USE_SOFTWARE", 0, csAppPath);
|
||||
|
||||
// 从配置文件中读取IP地址
|
||||
@@ -9690,4 +9698,85 @@ HSI_STATUS HSI_Motion::SetAllGears()
|
||||
return rStatus;
|
||||
}
|
||||
|
||||
//===========================================================================
|
||||
//===========================================================================
|
||||
HSI_STATUS HSI_Motion::SetMotionDirectionFlag(int CurrentDirection) //用于向ACS特定变量写入 -1 或 1
|
||||
{
|
||||
g_pLogger->SendAndFlushWithTime(L"[SetMotionDirectionFlag] CurrentDirection = %d\n", CurrentDirection);
|
||||
|
||||
// 判断输入是否为1或-1
|
||||
if (CurrentDirection != 1 && CurrentDirection != -1)
|
||||
{
|
||||
g_pLogger->SendAndFlushWithTime(L"[SetMotionDirectionFlag] Invalid direction flag\n");
|
||||
return HSI_STATUS_FAILED;
|
||||
}
|
||||
|
||||
auto rStatus = HSI_STATUS_NORMAL;
|
||||
if (g_pHSI_Motion && handleACS != ACSC_INVALID)
|
||||
{
|
||||
int waitTowrite[1] = { CurrentDirection };
|
||||
if (!acsc_WriteInteger(handleACS, // communication handle
|
||||
ACSC_NONE, // standard variable
|
||||
"CurrentDirection", // variable name
|
||||
ACSC_NONE, ACSC_NONE, // first dimension indexes
|
||||
ACSC_NONE, ACSC_NONE, // no second dimension
|
||||
waitTowrite, // pointer to the buffer contained values
|
||||
// that must be written
|
||||
NULL // waiting call
|
||||
))
|
||||
{
|
||||
|
||||
g_pLogger->SendAndFlushWithTime(L"[SetMotionDirectionFlag] transaction error : % d\n", acsc_GetLastError());
|
||||
ErrorsHandler();
|
||||
CurrentHomeMachineState = E_EF3_HOME_NONE;
|
||||
rStatus = HSI_STATUS_FAILED;
|
||||
}
|
||||
|
||||
g_pLogger->SendAndFlushWithTime(L"[SetMotionDirectionFlag] ACS write OK\n");
|
||||
return rStatus;
|
||||
|
||||
}
|
||||
else
|
||||
{
|
||||
g_pLogger->SendAndFlushWithTime(L"[SetMotionDirectionFlag] ACS is not connected\n");
|
||||
rStatus = HSI_STATUS_FAILED;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
//===========================================================================
|
||||
HSI_STATUS HSI_Motion::GetMotionDirectionFlag(int& CurrentDirection)
|
||||
{
|
||||
|
||||
auto rStatus = HSI_STATUS_NORMAL;
|
||||
if (g_pHSI_Motion && handleACS != ACSC_INVALID)
|
||||
{
|
||||
int waitToRead[1] = { 0 };
|
||||
if (!acsc_ReadInteger(handleACS, // communication handle
|
||||
ACSC_NONE, // standard variable
|
||||
"CurrentDirection", // variable name
|
||||
ACSC_NONE, ACSC_NONE, // first dimension indexes
|
||||
ACSC_NONE, ACSC_NONE, // no second dimension
|
||||
waitToRead, // pointer to the buffer contained values
|
||||
// that must be written
|
||||
NULL // waiting call
|
||||
))
|
||||
{
|
||||
g_pLogger->SendAndFlushWithTime(L"[GetMotionDirectionFlag] transaction error : % d\n", acsc_GetLastError());
|
||||
ErrorsHandler();
|
||||
rStatus = HSI_STATUS_FAILED;
|
||||
}
|
||||
else
|
||||
{
|
||||
g_pLogger->SendAndFlushWithTime(L"[GetMotionDirectionFlag] ACS read OK\n");
|
||||
CurrentDirection = waitToRead[0];
|
||||
}
|
||||
return rStatus;
|
||||
}
|
||||
else
|
||||
{
|
||||
g_pLogger->SendAndFlushWithTime(L"[GetMotionDirectionFlag] ACS is not connected\n");
|
||||
rStatus = HSI_STATUS_FAILED;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -364,6 +364,13 @@ public:
|
||||
HSI_STATUS GlueDispenserStart(double xOffset, double yOffset, double qOffset);
|
||||
HSI_STATUS GetPntsDistance(double& ptpDistance, int& spTimeCount);
|
||||
|
||||
HSI_STATUS SetMotionDirectionFlag(int CurrentDirection); //特殊需求:向ACS层写入运动方向标志位,用于触发相机拍照
|
||||
// 获取当前运动方向标志位
|
||||
HSI_STATUS GetMotionDirectionFlag(int& CurrentDirection); //特殊需求:向ACS层读取运动方向标志位,用于触发相机拍照
|
||||
|
||||
//
|
||||
|
||||
|
||||
public:
|
||||
static int m_Thread_State;
|
||||
static HANDLE m_Thread_Id;
|
||||
@@ -472,6 +479,7 @@ public:
|
||||
int m_IsUseTwentySixLight; //是否启用26路灯光 0为不启用 1位启用 默认为0
|
||||
int m_IsUseEF3; //是否启用EF3
|
||||
int m_IsUseACS; //是否用ACS运动控制
|
||||
int m_IsUseSimulator; //是否启用模拟器
|
||||
char m_ACS_IPAddresses[50]; // 定义字符串,存储ACS IP地址
|
||||
|
||||
int m_DeviceType; //设备类型,0为通用设备,1为三激光, 2为大视野,3为转盘设备 默认为0
|
||||
|
||||
@@ -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 "2025.03.11 / 17:19 "
|
||||
#define HSI_FILE_CSDESCRIPTION _T("2025.03.11 / 17:19 ")
|
||||
#define HSI_FILE_DESCRIPTION "2025.04.07 / 16:25 "
|
||||
#define HSI_FILE_CSDESCRIPTION _T("2025.04.07 / 16:25 ")
|
||||
|
||||
@@ -37,6 +37,13 @@ namespace HSI_SEVENOCEAN_EF1_CsTest.HSI
|
||||
[DllImport("HSI.dll", EntryPoint = "HSI_SHUTDOWM", CharSet = CharSet.Unicode)]
|
||||
public static extern HSI_STATUS Shutdown();
|
||||
|
||||
[DllImport("HSI.dll", EntryPoint = "HSI_MOTION_SET_DIRECTION_FLAG", CharSet = CharSet.Unicode)]
|
||||
public static extern HSI_STATUS SetDirectionFlag(int directionFlag);
|
||||
|
||||
[DllImport("HSI.dll", EntryPoint = "HSI_MOTION_GET_DIRECTION_FLAG", CharSet = CharSet.Unicode)]
|
||||
public static extern HSI_STATUS GetDirectionFlag(ref int directionFlag);
|
||||
|
||||
|
||||
// <<<< Out Interfacess
|
||||
//事件回调函数
|
||||
public static void EventCallback(HSI_EVENT_TYPE eventType, HSI_EVENT_RESPONSE_TYPE responseType,
|
||||
|
||||
@@ -50,6 +50,17 @@ namespace HSI_SEVENOCEAN_EF1_CsTest
|
||||
Marshal.Copy(intPtrEF3Version, EF3Version, 0, EF3Version.Length);
|
||||
Console.WriteLine("EF3 FirewareVerion Version: {0}", Encoding.UTF8.GetString(EF3Version));
|
||||
|
||||
|
||||
#region 读写变量测试
|
||||
rStatus = Interface.SetDirectionFlag(-1);
|
||||
Console.WriteLine("Interface.SetDirectionFlag: {0}", rStatus);
|
||||
|
||||
int currentDir = 0;
|
||||
rStatus = Interface.GetDirectionFlag(ref currentDir);
|
||||
Console.WriteLine("Interface.GetDirectionFlag: {0}", currentDir);
|
||||
|
||||
#endregion
|
||||
|
||||
#region 扫描功能测试
|
||||
|
||||
////启动扫描
|
||||
|
||||
Binary file not shown.
Reference in New Issue
Block a user