修复乱码
This commit is contained in:
@@ -29,7 +29,7 @@ typedef float FLOAT;
|
||||
|
||||
#define __DMC2410_EXPORTS
|
||||
|
||||
//定义输入和输出
|
||||
//定义输入和输出
|
||||
#ifdef __DMC2410_EXPORTS
|
||||
#define DMC2410_API __declspec(dllexport)
|
||||
#else
|
||||
@@ -40,23 +40,23 @@ typedef float FLOAT;
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
//--------------------- 板卡初始和配置函数 ----------------------
|
||||
//--------------------- 板卡初始和配置函数 ----------------------
|
||||
/********************************************************************************
|
||||
** 函数名称: d2410_board_init
|
||||
** 功能描述: 控制板初始化,设置初始化和速度等设置
|
||||
** 输 入: 无
|
||||
** 返 回 值: 0:无卡; 1-8:成功(实际卡数)
|
||||
** 修 改:
|
||||
** 修改日期: 2012.05.02
|
||||
** 函数名称: d2410_board_init
|
||||
** 功能描述: 控制板初始化,设置初始化和速度等设置
|
||||
** 输 入: 无
|
||||
** 返 回 值: 0:无卡; 1-8:成功(实际卡数)
|
||||
** 修 改:
|
||||
** 修改日期: 2012.05.02
|
||||
*********************************************************************************/
|
||||
DMC2410_API int __stdcall d2410_board_init(void);
|
||||
|
||||
/********************************************************************************
|
||||
** 函数名称: d2410_board_close
|
||||
** 功能描述: 关闭所有卡
|
||||
** 输 入: 无
|
||||
** 返 回 值: 无
|
||||
** 日 期: 2012.05.02
|
||||
** 函数名称: d2410_board_close
|
||||
** 功能描述: 关闭所有卡
|
||||
** 输 入: 无
|
||||
** 返 回 值: 无
|
||||
** 日 期: 2012.05.02
|
||||
*********************************************************************************/
|
||||
DMC2410_API DWORD __stdcall d2410_board_close(void);
|
||||
|
||||
@@ -64,22 +64,22 @@ DMC2410_API DWORD __stdcall d2410_get_card_soft_version(WORD card, WORD* firm_id
|
||||
DMC2410_API DWORD __stdcall d2410_get_card_ID(WORD card);
|
||||
DMC2410_API DWORD __stdcall d2410_get_card_version(WORD card);
|
||||
|
||||
//脉冲输入输出配置
|
||||
//脉冲输入输出配置
|
||||
/********************************************************************************
|
||||
** 函数名称: d2410_set_pulse_outmode
|
||||
** 功能描述: 脉冲输出方式的设置
|
||||
** 输 入: axis - (0 - 3), outmode: 0 - 7
|
||||
** 6:正交脉冲,A相超前; 7:正交脉冲,B相超前
|
||||
** 返 回 值: 无
|
||||
** 修改日期:2012.05.02
|
||||
** 函数名称: d2410_set_pulse_outmode
|
||||
** 功能描述: 脉冲输出方式的设置
|
||||
** 输 入: axis - (0 - 3), outmode: 0 - 7
|
||||
** 6:正交脉冲,A相超前; 7:正交脉冲,B相超前
|
||||
** 返 回 值: 无
|
||||
** 修改日期:2012.05.02
|
||||
*********************************************************************************/
|
||||
DMC2410_API DWORD __stdcall d2410_set_pulse_outmode(WORD axis,WORD outmode);
|
||||
DMC2410_API DWORD __stdcall d2410_get_pulse_outmode(WORD axis,WORD *outmode);
|
||||
|
||||
//ALM配置
|
||||
//ALM配置
|
||||
DMC2410_API DWORD __stdcall d2410_config_ALM_PIN(WORD axis,WORD alm_logic,WORD alm_action);
|
||||
DMC2410_API DWORD __stdcall d2410_get_config_ALM_PIN(WORD axis,WORD* alm_logic,WORD* alm_action);
|
||||
//ALM配置 添加alm_all参数 单轴ALM停止所有轴功能
|
||||
//ALM配置 添加alm_all参数 单轴ALM停止所有轴功能
|
||||
DMC2410_API DWORD __stdcall d2410_config_ALM_PIN_Extern(WORD axis,WORD alm_enable,WORD alm_logic,WORD alm_all,WORD alm_action);
|
||||
DMC2410_API DWORD __stdcall d2410_get_config_ALM_PIN_Extern(WORD axis,WORD* alm_enable,WORD* alm_logic,WORD* alm_all,WORD* alm_action);
|
||||
DMC2410_API DWORD __stdcall d2410_config_EL_MODE(WORD axis,WORD el_mode);
|
||||
@@ -90,7 +90,7 @@ DMC2410_API DWORD __stdcall d2410_write_SEVON_PIN(WORD axis, WORD on_off);
|
||||
DMC2410_API int __stdcall d2410_read_SEVON_PIN(WORD axis);
|
||||
DMC2410_API int __stdcall d2410_read_RDY_PIN(WORD axis);
|
||||
|
||||
//通用输入/输出控制函数
|
||||
//通用输入/输出控制函数
|
||||
DMC2410_API int __stdcall d2410_read_inbit(WORD cardno, WORD bitno);
|
||||
DMC2410_API DWORD __stdcall d2410_write_outbit(WORD cardno, WORD bitno,WORD on_off);
|
||||
DMC2410_API int __stdcall d2410_read_outbit(WORD cardno, WORD bitno) ;
|
||||
@@ -98,74 +98,74 @@ DMC2410_API long __stdcall d2410_read_inport(WORD cardno);
|
||||
DMC2410_API long __stdcall d2410_read_outport(WORD cardno) ;
|
||||
DMC2410_API DWORD __stdcall d2410_write_outport(WORD cardno, DWORD port_value);
|
||||
|
||||
//制动函数
|
||||
//制动函数
|
||||
DMC2410_API DWORD __stdcall d2410_decel_stop(WORD axis,double Tdec);
|
||||
DMC2410_API DWORD __stdcall d2410_imd_stop(WORD axis);
|
||||
DMC2410_API DWORD __stdcall d2410_emg_stop(void) ;
|
||||
|
||||
//位置/速度设置和读取函数
|
||||
//位置/速度设置和读取函数
|
||||
DMC2410_API DWORD __stdcall d2410_set_position(WORD axis,long current_position);
|
||||
DMC2410_API long __stdcall d2410_get_position(WORD axis);
|
||||
DMC2410_API double __stdcall d2410_read_current_speed(WORD axis);
|
||||
DMC2410_API double __stdcall d2410_read_vector_speed(WORD card);
|
||||
|
||||
//状态检测函数
|
||||
//状态检测函数
|
||||
DMC2410_API WORD __stdcall d2410_check_done(WORD axis) ;
|
||||
DMC2410_API WORD __stdcall d2410_axis_io_status(WORD axis);
|
||||
DMC2410_API DWORD __stdcall d2410_get_rsts(WORD axis) ;
|
||||
DMC2410_API long __stdcall d2410_get_target_position(WORD axis);
|
||||
|
||||
//速度设置
|
||||
//速度设置
|
||||
DMC2410_API DWORD __stdcall d2410_set_profile(WORD axis,double Min_Vel,double Max_Vel,double Tacc,double Tdec);
|
||||
DMC2410_API DWORD __stdcall d2410_get_profile(WORD axis,double* min_Vel,double* Max_Vel,double* Tacc,double* Tdec);
|
||||
DMC2410_API DWORD __stdcall d2410_set_vector_profile(double S_para,double Max_Vel,double Tacc,double Tdec);
|
||||
DMC2410_API DWORD __stdcall d2410_get_vector_profile(double* S_para, double* Max_Vel, double* Tacc,double* Tdec );
|
||||
|
||||
//添加停止速度设置
|
||||
//添加停止速度设置
|
||||
DMC2410_API DWORD __stdcall d2410_set_profile_Extern(WORD axis,double Min_Vel,double Max_Vel,double Tacc,double Tdec,double Stop_Vel);
|
||||
DMC2410_API DWORD __stdcall d2410_get_profile_Extern(WORD axis,double* min_Vel,double* Max_Vel,double* Tacc,double* Tdec,double* Stop_Vel);
|
||||
DMC2410_API DWORD __stdcall d2410_set_s_profile(WORD axis,double Min_Vel,double Max_Vel,double Tacc,double Tdec, long Sacc,long Sdec);
|
||||
DMC2410_API DWORD __stdcall d2410_set_st_profile(WORD axis,double Min_Vel, double Max_Vel,double Tacc,double Tdec, double Tsacc,double Tsdec);
|
||||
DMC2410_API DWORD __stdcall d2410_set_st_profile_Extern(WORD axis,double Min_Vel, double Max_Vel,double Tacc,double Tdec, double Tsacc,double Tsdec,double StopVel);
|
||||
//在线变速/变位
|
||||
//在线变速/变位
|
||||
DMC2410_API DWORD __stdcall d2410_change_speed(WORD axis,double Curr_Vel);
|
||||
DMC2410_API DWORD __stdcall d2410_reset_target_position(WORD axis,long dist);
|
||||
|
||||
//单轴定长运动
|
||||
//单轴定长运动
|
||||
DMC2410_API DWORD __stdcall d2410_t_pmove(WORD axis,long Dist,WORD posi_mode);
|
||||
DMC2410_API DWORD __stdcall d2410_ex_t_pmove(WORD axis,long Dist,WORD posi_mode);
|
||||
DMC2410_API DWORD __stdcall d2410_s_pmove(WORD axis,long Dist,WORD posi_mode);
|
||||
DMC2410_API DWORD __stdcall d2410_ex_s_pmove(WORD axis,long Dist,WORD posi_mode);
|
||||
|
||||
//单轴连续运动
|
||||
//单轴连续运动
|
||||
DMC2410_API DWORD __stdcall d2410_s_vmove(WORD axis,WORD dir);
|
||||
DMC2410_API DWORD __stdcall d2410_t_vmove(WORD axis,WORD dir);
|
||||
|
||||
//直线插补
|
||||
//直线插补
|
||||
DMC2410_API DWORD __stdcall d2410_t_line2(WORD axis1,long Dist1,WORD axis2,long Dist2,WORD posi_mode);
|
||||
DMC2410_API DWORD __stdcall d2410_t_line3(WORD *axis,long Dist1,long Dist2,long Dist3,WORD posi_mode);
|
||||
DMC2410_API DWORD __stdcall d2410_t_line4(WORD cardno,long Dist1,long Dist2,long Dist3,long Dist4,WORD posi_mode);
|
||||
|
||||
//圆弧插补
|
||||
//圆弧插补
|
||||
DMC2410_API DWORD __stdcall d2410_arc_move(WORD *axis,long *target_pos,long *cen_pos, WORD arc_dir);
|
||||
DMC2410_API DWORD __stdcall d2410_rel_arc_move(WORD *axis,long *rel_pos,long *rel_cen, WORD arc_dir);
|
||||
|
||||
//手轮运动
|
||||
//手轮运动
|
||||
DMC2410_API DWORD __stdcall d2410_set_handwheel_inmode(WORD axis,WORD inmode,double multi);
|
||||
DMC2410_API DWORD __stdcall d2410_handwheel_move(WORD axis);
|
||||
|
||||
//找原点
|
||||
//找原点
|
||||
DMC2410_API DWORD __stdcall d2410_config_home_mode(WORD axis,WORD mode,WORD EZ_count);
|
||||
DMC2410_API DWORD __stdcall d2410_get_config_home_mode(WORD axis,WORD* home_mode,WORD* EZ_count);
|
||||
DMC2410_API DWORD __stdcall d2410_home_move(WORD axis,WORD home_mode,WORD vel_mode);
|
||||
|
||||
//设置位置误差带
|
||||
//设置位置误差带
|
||||
DMC2410_API DWORD __stdcall d2410_set_factor_error(WORD axis,double factor,long error);
|
||||
DMC2410_API DWORD __stdcall d2410_get_factor_error(WORD axis,double* factor,long* error);
|
||||
DMC2410_API WORD __stdcall d2410_check_success_pulse(WORD axis);
|
||||
DMC2410_API WORD __stdcall d2410_check_success_encoder(WORD axis);
|
||||
|
||||
//编码器计数功能
|
||||
//编码器计数功能
|
||||
DMC2410_API long __stdcall d2410_get_encoder(WORD axis);
|
||||
DMC2410_API DWORD __stdcall d2410_set_encoder(WORD axis,long encoder_value);
|
||||
DMC2410_API DWORD __stdcall d2410_config_EZ_PIN(WORD axis,WORD ez_logic, WORD ez_mode);
|
||||
@@ -174,10 +174,10 @@ DMC2410_API long __stdcall d2410_get_counter_flag(WORD cardno);
|
||||
DMC2410_API DWORD __stdcall d2410_reset_counter_flag(WORD cardno);
|
||||
DMC2410_API DWORD __stdcall d2410_reset_clear_flag(WORD cardno);
|
||||
|
||||
//高速锁存LTC配置
|
||||
//高速锁存LTC配置
|
||||
DMC2410_API DWORD __stdcall d2410_config_LTC_PIN(WORD axis,WORD ltc_logic, WORD ltc_mode);
|
||||
DMC2410_API DWORD __stdcall d2410_get_config_LTC_PIN(WORD axis,WORD* ltc_logic, WORD* ltc_mode);
|
||||
//LTC配置 添加filter滤波时间
|
||||
//LTC配置 添加filter滤波时间
|
||||
DMC2410_API DWORD __stdcall d2410_config_LTC_PIN_Extern(WORD axis,WORD ltc_logic, WORD ltc_mode,double ltc_filter);
|
||||
DMC2410_API DWORD __stdcall d2410_get_config_LTC_PIN_Extern(WORD axis,WORD* ltc_logic, WORD* ltc_mode,double* ltc_filter);
|
||||
DMC2410_API DWORD __stdcall d2410_config_latch_mode(WORD cardno, WORD all_enable);
|
||||
@@ -188,21 +188,21 @@ DMC2410_API DWORD __stdcall d2410_triger_chunnel(WORD cardno, WORD num);
|
||||
|
||||
DMC2410_API DWORD __stdcall d2410_set_speaker_logic(WORD cardno, WORD logic);
|
||||
|
||||
//EMG配置
|
||||
//EMG配置
|
||||
DMC2410_API DWORD __stdcall d2410_config_EMG_PIN(WORD cardno, WORD enable,WORD emg_logic);
|
||||
|
||||
//软件限位功能
|
||||
//软件限位功能
|
||||
DMC2410_API DWORD __stdcall d2410_config_softlimit(WORD axis,WORD ON_OFF, WORD source_sel,WORD SL_action, long N_limit,long P_limit);
|
||||
DMC2410_API DWORD __stdcall d2410_get_config_softlimit(WORD axis,WORD *ON_OFF, WORD *source_sel,WORD *SL_action, long *N_limit,long *P_limit);
|
||||
|
||||
//原点锁存
|
||||
//原点锁存
|
||||
DMC2410_API DWORD __stdcall d2410_set_homelatch_mode(WORD axis,WORD enable,WORD logic);
|
||||
DMC2410_API DWORD __stdcall d2410_get_homelatch_mode(WORD axis,WORD* enable,WORD* logic);
|
||||
DMC2410_API long __stdcall d2410_get_homelatch_flag(WORD axis);
|
||||
DMC2410_API DWORD __stdcall d2410_reset_homelatch_flag(WORD axis);
|
||||
DMC2410_API long __stdcall d2410_get_homelatch_value(WORD axis);
|
||||
|
||||
//多组位置比较
|
||||
//多组位置比较
|
||||
DMC2410_API DWORD __stdcall d2410_compare_config_Extern(WORD card, WORD queue,WORD enable, WORD axis, WORD cmp_source);
|
||||
DMC2410_API DWORD __stdcall d2410_compare_get_config_Extern(WORD card, WORD queue,WORD* enable, WORD* axis, WORD* cmp_source);
|
||||
DMC2410_API DWORD __stdcall d2410_compare_clear_points_Extern(WORD card, WORD queue);
|
||||
@@ -211,7 +211,7 @@ DMC2410_API long __stdcall d2410_compare_get_current_point_Extern(WORD card, WOR
|
||||
DMC2410_API long __stdcall d2410_compare_get_points_runned_Extern(WORD card, WORD queue);
|
||||
DMC2410_API long __stdcall d2410_compare_get_points_remained_Extern(WORD card, WORD queue);
|
||||
|
||||
//高速位置比较
|
||||
//高速位置比较
|
||||
DMC2410_API DWORD __stdcall d2410_config_CMP_PIN(WORD axis, WORD cmp_enable,long cmp_pos, WORD CMP_logic);
|
||||
DMC2410_API DWORD __stdcall d2410_get_config_CMP_PIN(WORD axis, WORD* cmp_enable,long* cmp_pos, WORD* CMP_logic);
|
||||
DMC2410_API int __stdcall d2410_read_CMP_PIN(WORD axis);
|
||||
@@ -219,28 +219,28 @@ DMC2410_API DWORD __stdcall d2410_write_CMP_PIN(WORD axis, WORD on_off);
|
||||
|
||||
enum ERR_Motion_ERR
|
||||
{
|
||||
Motion_ERR_NOERR = 0, //成功
|
||||
Motion_ERR_UNKNOWN = 1, //未知错误
|
||||
Motion_ERR_PARAERR = 2, //参数错误
|
||||
Motion_ERR_NOERR = 0, //成功
|
||||
Motion_ERR_UNKNOWN = 1, //未知错误
|
||||
Motion_ERR_PARAERR = 2, //参数错误
|
||||
|
||||
Motion_ERR_TIMEOUT = 3, //超时
|
||||
Motion_ERR_CONTROLLERBUSY = 4, //正在运动中
|
||||
Motion_ERR_CONNECT_TOOMANY = 5, //板卡数过多
|
||||
Motion_ERR_TIMEOUT = 3, //超时
|
||||
Motion_ERR_CONTROLLERBUSY = 4, //正在运动中
|
||||
Motion_ERR_CONNECT_TOOMANY = 5, //板卡数过多
|
||||
|
||||
Motion_ERR_CONTILINE = 6, //连续插补错误
|
||||
Motion_ERR_NoThisFunction = 7, //暂不支持该功能
|
||||
Motion_ERR_CANNOT_CONNECTETH = 8, //不能连接
|
||||
Motion_ERR_HANDLEERR = 9, //卡资源未能找到
|
||||
Motion_ERR_SENDERR = 10, //pci通信错误
|
||||
Motion_ERR_FIRMWAREERR = 12, //固件文件错误
|
||||
Motion_ERR_FIRMWAR_MISMATCH = 14, //固件不匹配
|
||||
Motion_ERR_CONTILINE = 6, //连续插补错误
|
||||
Motion_ERR_NoThisFunction = 7, //暂不支持该功能
|
||||
Motion_ERR_CANNOT_CONNECTETH = 8, //不能连接
|
||||
Motion_ERR_HANDLEERR = 9, //卡资源未能找到
|
||||
Motion_ERR_SENDERR = 10, //pci通信错误
|
||||
Motion_ERR_FIRMWAREERR = 12, //固件文件错误
|
||||
Motion_ERR_FIRMWAR_MISMATCH = 14, //固件不匹配
|
||||
|
||||
Motion_ERR_FIRMWARE_INVALID_PARA = 20, //固件参数错误
|
||||
Motion_ERR_FIRMWARE_PARA_ERR = 20, //固件参数错误2
|
||||
Motion_ERR_FIRMWARE_STATE_ERR = 22, //固件当前状态不允许操作
|
||||
Motion_ERR_FIRMWARE_LIB_STATE_ERR = 22, //固件当前状态不允许操作2
|
||||
Motion_ERR_FIRMWARE_CARD_NOT_SUPPORT = 24, //固件不支持的功能 控制器不支持的功能
|
||||
Motion_ERR_FIRMWARE_LIB_NOTSUPPORT = 24, //固件不支持的功能2
|
||||
Motion_ERR_FIRMWARE_INVALID_PARA = 20, //固件参数错误
|
||||
Motion_ERR_FIRMWARE_PARA_ERR = 20, //固件参数错误2
|
||||
Motion_ERR_FIRMWARE_STATE_ERR = 22, //固件当前状态不允许操作
|
||||
Motion_ERR_FIRMWARE_LIB_STATE_ERR = 22, //固件当前状态不允许操作2
|
||||
Motion_ERR_FIRMWARE_CARD_NOT_SUPPORT = 24, //固件不支持的功能 控制器不支持的功能
|
||||
Motion_ERR_FIRMWARE_LIB_NOTSUPPORT = 24, //固件不支持的功能2
|
||||
};
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
|
||||
+1
-1
@@ -1,4 +1,4 @@
|
||||
// HSI_LEADSHINE_DMC2410C.cpp : ¶¨Òå DLL µÄ³õʼ»¯Àý³Ì¡£
|
||||
// HSI_LEADSHINE_DMC2410C.cpp : 定义 DLL 的初始化例程。
|
||||
//
|
||||
|
||||
#include "stdafx.h"
|
||||
|
||||
+1
-1
@@ -1,4 +1,4 @@
|
||||
// HSI_LEADSHINE_DMC2410C.h : HSI_LEADSHINE_DMC2410C DLL µÄÖ÷Í·Îļþ
|
||||
// HSI_LEADSHINE_DMC2410C.h : HSI_LEADSHINE_DMC2410C DLL 的主头文件
|
||||
//
|
||||
|
||||
#pragma once
|
||||
|
||||
+102
-102
@@ -1,4 +1,4 @@
|
||||
// HSI_Motion.cpp : 定义 DLL 的初始化例程。
|
||||
// HSI_Motion.cpp : 定义 DLL 的初始化例程。
|
||||
//
|
||||
#include "stdafx.h"
|
||||
#include "..\..\..\..\Hsi\HSI.h"
|
||||
@@ -41,27 +41,27 @@ HSI_Motion::HSI_Motion()
|
||||
SdkStatusInit();
|
||||
GetAppPath(m_AppPath);
|
||||
CTime tm = CTime::GetCurrentTime();
|
||||
CString csTime = tm.Format("%Y-%m-%d");//显示年月日
|
||||
CString csTime = tm.Format("%Y-%m-%d");//显示年月日
|
||||
CString dir = L"\\Log\\" + csTime + L".DMC2410.Log";
|
||||
g_pLogger = new CLogger(dir);
|
||||
g_pLogger2 = new CLogger(L"\\Log\\DMC2410_Precision.Log");
|
||||
#ifdef DEBUG
|
||||
//CString 转 char* 和 char* 转 CString
|
||||
//CString 转 char* 和 char* 转 CString
|
||||
//char *cTemp = "";
|
||||
//CString csTemp(cTemp);
|
||||
//删除Log目录下的所有文件
|
||||
//删除Log目录下的所有文件
|
||||
//CString csStr1 = "del " + m_AppPath;
|
||||
////f 强制删除只读文件。
|
||||
////s 从所有子目录删除指定文件。
|
||||
////q 安静模式。删除全局通配符时,不要求确认。
|
||||
////a 根据属性选择要删除的文件。
|
||||
////f 强制删除只读文件。
|
||||
////s 从所有子目录删除指定文件。
|
||||
////q 安静模式。删除全局通配符时,不要求确认。
|
||||
////a 根据属性选择要删除的文件。
|
||||
//CString csStr2 = csStr1 + L"\\Log\\*.*" + " /f /s /q /a";
|
||||
//CString csCmd(csStr2);
|
||||
//USES_CONVERSION;
|
||||
//const char* cCmd = T2A(csCmd);
|
||||
//system(cCmd);
|
||||
//每次删除日志,CString转int 和 int转CString
|
||||
CString csTimeDay = tm.Format("%d");//显示年月日
|
||||
//每次删除日志,CString转int 和 int转CString
|
||||
CString csTimeDay = tm.Format("%d");//显示年月日
|
||||
int iDay = _ttoi(csTimeDay);
|
||||
CString csTimeYearMonth = tm.Format("%Y-%m-");
|
||||
for (int i = iDay; i > 0; i--)
|
||||
@@ -80,7 +80,7 @@ HSI_Motion::HSI_Motion()
|
||||
|
||||
for (int i = 0; i < 5; i++)
|
||||
{
|
||||
m_Jog_Speed[i] = 10.0; //表示5个档位
|
||||
m_Jog_Speed[i] = 10.0; //表示5个档位
|
||||
m_Jog_Acc_Time[i] = 5.0;
|
||||
m_Jog_Dec_Time[i] = 5.0;
|
||||
m_Home_Machine_Axis[i] = 1;
|
||||
@@ -181,7 +181,7 @@ HSI_STATUS HSI_Motion::Startup(HWND _hWnd, bool _bOfflineOnly)
|
||||
sEvenProp.EventType = HSI_EVENT_ERROR;
|
||||
sEvenProp.EventID = HSI_EVENT_MOTION;
|
||||
sEvenProp.EventResponse = HSI_EVENT_RESPONSE_OK;
|
||||
strcpy_s(sEvenProp.EventData, HSI_MaxStringLength, "雷赛运动控制卡打开失败!");
|
||||
strcpy_s(sEvenProp.EventData, HSI_MaxStringLength, "雷赛运动控制卡打开失败!");
|
||||
EventCallback(sEvenProp);
|
||||
m_RStatus = d2410_board_close();
|
||||
g_pLogger->SendAndFlushWithTime(L"[Startup] d2410_board_close m_RStatus = %d\n", m_RStatus);
|
||||
@@ -190,21 +190,21 @@ HSI_STATUS HSI_Motion::Startup(HWND _hWnd, bool _bOfflineOnly)
|
||||
//DWORD m_RStatus1 = 0, m_RStatus2 = 0, m_RStatus3 = 0, m_RStatus4 = 0;
|
||||
for (WORD i = 0; i < 4; i++)
|
||||
{
|
||||
//设置s曲线
|
||||
//设置s曲线
|
||||
m_RStatus = d2410_set_st_profile(i, 1 * 1000, 100 * 1000, 0.1, 0.1, 1, 0);
|
||||
//设置编码器为4× A/B(4倍频),必须用3,否则光栅尺的读数一直在跳
|
||||
//设置编码器为4× A/B(4倍频),必须用3,否则光栅尺的读数一直在跳
|
||||
m_RStatus = d2410_counter_config(i, 3);
|
||||
//限位设置,低电平有效,立即停止
|
||||
//限位设置,低电平有效,立即停止
|
||||
m_RStatus = d2410_config_EL_MODE(i, 0);
|
||||
//1表示限位生效
|
||||
//1表示限位生效
|
||||
m_RStatus += d2410_Enable_EL_PIN(i, 1);
|
||||
m_RStatus = d2410_config_EMG_PIN(CARDNO, 1, 1);
|
||||
m_RStatus = d2410_config_LTC_PIN_Extern(i, 1, 0, 0.0025);
|
||||
//打开伺服使能
|
||||
//打开伺服使能
|
||||
m_RStatus = d2410_write_SEVON_PIN(i, 1);
|
||||
//设置位置比较
|
||||
//设置位置比较
|
||||
m_RStatus = d2410_compare_config_Extern(CARDNO, 0, 0, i, 1);
|
||||
//设置ALM 的有效电平及其工作方式,第一个参数 ALM 信号使能状态,0:禁止,1:允许
|
||||
//设置ALM 的有效电平及其工作方式,第一个参数 ALM 信号使能状态,0:禁止,1:允许
|
||||
if (m_IsAlarm[i + 1] == 1)
|
||||
{
|
||||
m_RStatus = d2410_config_ALM_PIN_Extern(i, 1, 1, 0, 0);
|
||||
@@ -215,17 +215,17 @@ HSI_STATUS HSI_Motion::Startup(HWND _hWnd, bool _bOfflineOnly)
|
||||
}
|
||||
|
||||
|
||||
//设置位置误差带,实际和编码器的比例是1:1,不用,判断误差带每一次需要100ms,用时太长
|
||||
//设置位置误差带,实际和编码器的比例是1:1,不用,判断误差带每一次需要100ms,用时太长
|
||||
//m_RStatus5 = d2410_set_factor_error(i, 1, m_PrecisionCount[i + 1]);
|
||||
}
|
||||
//设置指定轴的脉冲输出模式,脉冲和方向的电平
|
||||
m_RStatus = d2410_set_pulse_outmode(AXIS_X, (WORD)m_PulseModeDir[1]);//0和1(芯片决定):点击右移->工作台左移 - + 2和3:点击右移->工作台右移 + +
|
||||
//设置指定轴的脉冲输出模式,脉冲和方向的电平
|
||||
m_RStatus = d2410_set_pulse_outmode(AXIS_X, (WORD)m_PulseModeDir[1]);//0和1(芯片决定):点击右移->工作台左移 - + 2和3:点击右移->工作台右移 + +
|
||||
m_RStatus = d2410_set_pulse_outmode(AXIS_Y, (WORD)m_PulseModeDir[2]);
|
||||
m_RStatus = d2410_set_pulse_outmode(AXIS_Z, (WORD)m_PulseModeDir[3]);
|
||||
m_RStatus = d2410_set_pulse_outmode(AXIS_A, (WORD)m_PulseModeDir[4]);
|
||||
|
||||
|
||||
//判断是否驱动报警
|
||||
//判断是否驱动报警
|
||||
bool bAlarm(false);
|
||||
if (HSI_STATUS_FAILED == DriverAlarmStatus())
|
||||
{
|
||||
@@ -233,7 +233,7 @@ HSI_STATUS HSI_Motion::Startup(HWND _hWnd, bool _bOfflineOnly)
|
||||
g_pLogger->SendAndFlushWithTime(L"[Startup] DriverAlarmStatus HSI_STATUS_FAILED\n");
|
||||
return HSI_STATUS_FAILED;
|
||||
}
|
||||
//判断急停是否触发
|
||||
//判断急停是否触发
|
||||
bool bEmged(false);
|
||||
IsEmergented(bEmged);
|
||||
if (bEmged == true && bAlarm == true)
|
||||
@@ -243,7 +243,7 @@ HSI_STATUS HSI_Motion::Startup(HWND _hWnd, bool _bOfflineOnly)
|
||||
sEvenProp.EventType = HSI_EVENT_ERROR;
|
||||
sEvenProp.EventID = HSI_EVENT_MOTION;
|
||||
sEvenProp.EventResponse = HSI_EVENT_RESPONSE_OK;
|
||||
strcpy_s(sEvenProp.EventData, HSI_MaxStringLength, "急停已触发!!!");
|
||||
strcpy_s(sEvenProp.EventData, HSI_MaxStringLength, "急停已触发!!!");
|
||||
EventCallback(sEvenProp);
|
||||
return HSI_STATUS_FAILED;
|
||||
}
|
||||
@@ -282,7 +282,7 @@ HSI_STATUS HSI_Motion::HomeMachine(bool bHomed)
|
||||
}
|
||||
if (CurrentHomeMachineState != E_GTS_HOME_ING)
|
||||
{
|
||||
//判断是否需要回家
|
||||
//判断是否需要回家
|
||||
if (m_HomeFocus == false)
|
||||
{
|
||||
g_pLogger->SendAndFlushWithTime(L"[HomeMachine] no need focus home\n");
|
||||
@@ -307,16 +307,16 @@ HSI_STATUS HSI_Motion::HomeMachine(bool bHomed)
|
||||
return HSI_STATUS_NORMAL;
|
||||
}
|
||||
CurrentHomeMachineState = E_GTS_HOME_ING;
|
||||
//回原点前清除位置清零
|
||||
//回原点前清除位置清零
|
||||
for (short i = 1; i < 5; i++)
|
||||
{
|
||||
m_RStatus = d2410_set_position(i - 1, 0);
|
||||
m_RStatus = d2410_set_encoder(i - 1, 0);
|
||||
}
|
||||
Sleep(10);
|
||||
//记录运行前的坐标位置,用于回家后还原到该位置
|
||||
long EncPosMove[5] = { 0 };//运行前的位置
|
||||
//各轴先跑到限位的一边
|
||||
//记录运行前的坐标位置,用于回家后还原到该位置
|
||||
long EncPosMove[5] = { 0 };//运行前的位置
|
||||
//各轴先跑到限位的一边
|
||||
g_pLogger->SendAndFlushWithTime(L"[HomeMachine] Go Homing Start Run Limit\n");
|
||||
if (HSI_STATUS_FAILED == HomeJog(0, 1, true))
|
||||
{
|
||||
@@ -324,7 +324,7 @@ HSI_STATUS HSI_Motion::HomeMachine(bool bHomed)
|
||||
CurrentHomeMachineState = E_GTS_HOME_NONE;
|
||||
return HSI_STATUS_FAILED;
|
||||
}
|
||||
//开始回原点,从限位开始返回找LTC信号
|
||||
//开始回原点,从限位开始返回找LTC信号
|
||||
g_pLogger->SendAndFlushWithTime(L"[HomeMachine] HomeFindLTC Go Homing Start Find LTC Signal\n");
|
||||
if (HSI_STATUS_FAILED == HomeFindLTC())
|
||||
{
|
||||
@@ -367,7 +367,7 @@ HSI_STATUS HSI_Motion::HomeJog(short AxisNumber, short Dir, bool Wait)
|
||||
if (m_Home_Machine_Axis[i] == 1)
|
||||
{
|
||||
m_Thread_State = HSI_THREAD_PAUSED;
|
||||
//第二个参数表示禁用软限位功能
|
||||
//第二个参数表示禁用软限位功能
|
||||
m_RStatus = d2410_config_softlimit(i - 1, 0, 0, 0, 0, 0);
|
||||
m_RStatus += d2410_set_st_profile(i - 1, 5 * 1000, fabs(m_Home_Speed_High[i]) * 1000, m_Home_Acc_Time_High[i], m_Home_Acc_Time_High[i], 20, 0);
|
||||
if (i == 3)
|
||||
@@ -400,7 +400,7 @@ HSI_STATUS HSI_Motion::HomeJog(short AxisNumber, short Dir, bool Wait)
|
||||
sEvenProp.EventType = HSI_EVENT_ERROR;
|
||||
sEvenProp.EventID = HSI_EVENT_MOTION;
|
||||
sEvenProp.EventResponse = HSI_EVENT_RESPONSE_OK;
|
||||
strcpy_s(sEvenProp.EventData, HSI_MaxStringLength, "回家超时+!");
|
||||
strcpy_s(sEvenProp.EventData, HSI_MaxStringLength, "回家超时+!");
|
||||
EventCallback(sEvenProp);
|
||||
return HSI_STATUS_FAILED;
|
||||
}
|
||||
@@ -424,16 +424,16 @@ HSI_STATUS HSI_Motion::HomeFindLTC()
|
||||
{
|
||||
g_pLogger->SendAndFlushWithTime(L"[HomeFindLTC] In\n");
|
||||
|
||||
m_RStatus = d2410_reset_latch_flag(CARDNO);//清除锁存标志
|
||||
m_RStatus = d2410_config_latch_mode(CARDNO, 0);//0:单轴锁存 1:4轴锁存
|
||||
m_RStatus = d2410_reset_latch_flag(CARDNO);//清除锁存标志
|
||||
m_RStatus = d2410_config_latch_mode(CARDNO, 0);//0:单轴锁存 1:4轴锁存
|
||||
for (short i = 1; i < 5; i++)
|
||||
{
|
||||
if (m_Home_Machine_Axis[i] == 1)
|
||||
{
|
||||
//第二个参数表示禁用软限位功能
|
||||
//第二个参数表示禁用软限位功能
|
||||
m_RStatus = d2410_config_softlimit(i - 1, 0, 0, 0, 0, 0);
|
||||
m_RStatus += d2410_set_st_profile(i - 1, 5 * 1000, fabs(m_Home_Speed_Low[i]) * 1000, m_Home_Acc_Time_Low[i], m_Home_Acc_Time_Low[i], 20, 0);
|
||||
if (i == 3)//不能使用JOG模式,因为要运动过程中改变位置回到锁存的位置,所以要用点位运动
|
||||
if (i == 3)//不能使用JOG模式,因为要运动过程中改变位置回到锁存的位置,所以要用点位运动
|
||||
{
|
||||
m_RStatus = d2410_s_pmove(i - 1, (long)PMOVE_N, 1);
|
||||
g_pLogger->SendAndFlushWithTime(L"[HomeFindLTC] d2410_s_pmove m_RStatus = %d\n", m_RStatus);
|
||||
@@ -447,7 +447,7 @@ HSI_STATUS HSI_Motion::HomeFindLTC()
|
||||
}
|
||||
|
||||
long DoneStatus[5] = { 1, 1, 1, 1, 1 };
|
||||
long LatchPos[5] = { 0 };//锁存的位置
|
||||
long LatchPos[5] = { 0 };//锁存的位置
|
||||
long EncPos = 0;
|
||||
long PrfPos = 0;
|
||||
long temp[5] = { 0 };
|
||||
@@ -475,8 +475,8 @@ HSI_STATUS HSI_Motion::HomeFindLTC()
|
||||
LTCStatus = d2410_get_latch_flag(CARDNO);
|
||||
if (((LTCStatus >> (7 + i)) & 1) == 1)
|
||||
{
|
||||
//找到LTC后,偏移一段距离
|
||||
//if (i==3)//接线有误,只有绝对位置值,当规划位置和实际位置的方向不一致时,就会失败
|
||||
//找到LTC后,偏移一段距离
|
||||
//if (i==3)//接线有误,只有绝对位置值,当规划位置和实际位置的方向不一致时,就会失败
|
||||
//{
|
||||
// m_RStatus = d2410_reset_target_position(i - 1, LatchPos[i]*-1);
|
||||
//}
|
||||
@@ -487,14 +487,14 @@ HSI_STATUS HSI_Motion::HomeFindLTC()
|
||||
{
|
||||
g_pLogger->SendAndFlushWithTime(L"[HomeFindLTC] %d Axis EncPos and PrfPos direction is different\n", i);
|
||||
CurrentHomeMachineState = E_GTS_HOME_NONE;
|
||||
m_RStatus = d2410_reset_latch_flag(CARDNO);//清除锁存标志
|
||||
m_RStatus = d2410_reset_latch_flag(CARDNO);//清除锁存标志
|
||||
AbortMotion();
|
||||
sEvenProp.EventType = HSI_EVENT_ERROR;
|
||||
sEvenProp.EventID = HSI_EVENT_MOTION;
|
||||
sEvenProp.EventResponse = HSI_EVENT_RESPONSE_OK;
|
||||
char messageAlarmDis[100] = "";
|
||||
_itoa_s(i, messageAlarmDis, 30, 10);
|
||||
strcat_s(messageAlarmDis, 100, " 实际位置和规划位置方向不一致\n");
|
||||
strcat_s(messageAlarmDis, 100, " 实际位置和规划位置方向不一致\n");
|
||||
strcpy_s(sEvenProp.EventData, HSI_MaxStringLength, messageAlarmDis);
|
||||
EventCallback(sEvenProp);
|
||||
}
|
||||
@@ -514,7 +514,7 @@ HSI_STATUS HSI_Motion::HomeFindLTC()
|
||||
return HSI_STATUS_FAILED;
|
||||
}
|
||||
g_pLogger->SendAndFlushWithTime(L"[HomeFindLTC] Axis = %d, No Find LTC Signal\n", i);
|
||||
m_RStatus = d2410_reset_latch_flag(CARDNO);//清除锁存标志
|
||||
m_RStatus = d2410_reset_latch_flag(CARDNO);//清除锁存标志
|
||||
AbortMotion();
|
||||
CurrentHomeMachineState = E_GTS_HOME_NONE;
|
||||
sEvenProp.EventType = HSI_EVENT_ERROR;
|
||||
@@ -522,7 +522,7 @@ HSI_STATUS HSI_Motion::HomeFindLTC()
|
||||
sEvenProp.EventResponse = HSI_EVENT_RESPONSE_OK;
|
||||
char messageAlarm[100] = "";
|
||||
_itoa_s(i, messageAlarm, 30, 10);
|
||||
strcat_s(messageAlarm, 100, " 轴没有找到原点LTC信号!");
|
||||
strcat_s(messageAlarm, 100, " 轴没有找到原点LTC信号!");
|
||||
strcpy_s(sEvenProp.EventData, HSI_MaxStringLength, messageAlarm);
|
||||
EventCallback(sEvenProp);
|
||||
rStatus = HSI_STATUS_FAILED;
|
||||
@@ -533,11 +533,11 @@ HSI_STATUS HSI_Motion::HomeFindLTC()
|
||||
{
|
||||
g_pLogger->SendAndFlushWithTime(L"[HomeFindLTC] Go Hme Timeout- HSI_STATUS_FAILED\n");
|
||||
AbortMotion();
|
||||
m_RStatus = d2410_reset_latch_flag(CARDNO);//清除锁存标志
|
||||
m_RStatus = d2410_reset_latch_flag(CARDNO);//清除锁存标志
|
||||
sEvenProp.EventType = HSI_EVENT_ERROR;
|
||||
sEvenProp.EventID = HSI_EVENT_MOTION;
|
||||
sEvenProp.EventResponse = HSI_EVENT_RESPONSE_OK;
|
||||
strcpy_s(sEvenProp.EventData, HSI_MaxStringLength, "回家超时-");
|
||||
strcpy_s(sEvenProp.EventData, HSI_MaxStringLength, "回家超时-");
|
||||
EventCallback(sEvenProp);
|
||||
rStatus = HSI_STATUS_FAILED;
|
||||
}
|
||||
@@ -575,12 +575,12 @@ HSI_STATUS HSI_Motion::IsHomed(bool &bHomed)
|
||||
if (g_pHSI_Motion)
|
||||
{
|
||||
g_pLogger->SendAndFlushWithTime(L"[IsHomed] In\n");
|
||||
long EncPos[5] = { 0 };//运行前的位置
|
||||
long PrfPos[5] = { 0 };//读取规划位置
|
||||
long EncPos[5] = { 0 };//运行前的位置
|
||||
long PrfPos[5] = { 0 };//读取规划位置
|
||||
short HomedFlag[5] = { 0 };
|
||||
int HomedStatus = 0;
|
||||
int Count = 0;
|
||||
if (bHomed == true)//定位是增大判断精度
|
||||
if (bHomed == true)//定位是增大判断精度
|
||||
{
|
||||
Count = 1000;
|
||||
}
|
||||
@@ -593,7 +593,7 @@ HSI_STATUS HSI_Motion::IsHomed(bool &bHomed)
|
||||
return HSI_STATUS_NORMAL;
|
||||
}
|
||||
|
||||
//采用规划位置和实际位置脉冲进行比较,判断是否回家
|
||||
//采用规划位置和实际位置脉冲进行比较,判断是否回家
|
||||
for (short i = 1; i < 5; i++)
|
||||
{
|
||||
EncPos[i] = d2410_get_encoder(i - 1);
|
||||
@@ -617,7 +617,7 @@ HSI_STATUS HSI_Motion::IsHomed(bool &bHomed)
|
||||
}
|
||||
}
|
||||
|
||||
//采用实际位置和关闭软件记录的位置比较,判断是否回家
|
||||
//采用实际位置和关闭软件记录的位置比较,判断是否回家
|
||||
if (m_IsHomeEncPos == 1)
|
||||
{
|
||||
g_pLogger->SendAndFlushWithTime(L"[IsHomed] Close Software And Remember Compare Enable\n");
|
||||
@@ -632,7 +632,7 @@ HSI_STATUS HSI_Motion::IsHomed(bool &bHomed)
|
||||
return HSI_STATUS_NORMAL;
|
||||
}
|
||||
}
|
||||
//判断回家捕获的状态
|
||||
//判断回家捕获的状态
|
||||
for (int i = 1; i < 5; i++)
|
||||
{
|
||||
HomedStatus = d2410_get_latch_flag(CARDNO);
|
||||
@@ -707,7 +707,7 @@ HSI_STATUS HSI_Motion::ZeroPos(bool bZeroPos)
|
||||
m_RStatus = d2410_set_encoder(AXIS_Y, 0);
|
||||
m_RStatus = d2410_set_encoder(AXIS_Z, 0);
|
||||
m_RStatus = d2410_set_encoder(AXIS_A, 0);
|
||||
m_RStatus = d2410_reset_latch_flag(CARDNO);//清除锁存标志
|
||||
m_RStatus = d2410_reset_latch_flag(CARDNO);//清除锁存标志
|
||||
CurrentHomeMachineState = E_GTS_HOME_NONE;
|
||||
}
|
||||
else
|
||||
@@ -738,7 +738,7 @@ HSI_STATUS HSI_Motion::Jog(UINT AxisTypes, double Speed)
|
||||
sEvenProp.EventResponse = HSI_EVENT_RESPONSE_OK;
|
||||
char messageAlarm[100];
|
||||
_itoa_s(AxisNumber + 1, messageAlarm, 30, 10);
|
||||
strcat_s(messageAlarm, 100, "轴驱动器报警_Jog!");
|
||||
strcat_s(messageAlarm, 100, "轴驱动器报警_Jog!");
|
||||
strcpy_s(sEvenProp.EventData, HSI_MaxStringLength, messageAlarm);
|
||||
EventCallback(sEvenProp);
|
||||
return HSI_STATUS_FAILED;
|
||||
@@ -749,7 +749,7 @@ HSI_STATUS HSI_Motion::Jog(UINT AxisTypes, double Speed)
|
||||
double JogSpeed(1.0);
|
||||
double StartV(1.0);
|
||||
JogSpeed = SpeedPercent(Speed, StartV, AccTime, DecTime);
|
||||
WORD JOGDir = 1;//正负表方向,1正方向,-1负方向
|
||||
WORD JOGDir = 1;//正负表方向,1正方向,-1负方向
|
||||
JOGDir = Speed > 0 ? 1 : 0;
|
||||
if (JogSpeed > 600)
|
||||
{
|
||||
@@ -757,13 +757,13 @@ HSI_STATUS HSI_Motion::Jog(UINT AxisTypes, double Speed)
|
||||
}
|
||||
if (CurrentHomeMachineState == E_GTS_HOME_FINISHED)
|
||||
{
|
||||
//第二个参数表示启用软限位功能
|
||||
//第二个参数表示启用软限位功能
|
||||
m_RStatus = d2410_config_softlimit(AxisNumber, 1, 0, 0, (long)(m_N_Work_Limit[IndexPara] / m_Resolution[IndexPara]), (long)(m_P_Work_Limit[IndexPara] / m_Resolution[IndexPara]));
|
||||
g_pLogger->SendAndFlushWithTime(L"[Jog] d2410_config_softlimit Enable Softlimit m_RStatus = %d\n", m_RStatus);
|
||||
}
|
||||
else
|
||||
{
|
||||
//第二个参数表示禁用软限位功能
|
||||
//第二个参数表示禁用软限位功能
|
||||
m_RStatus = d2410_config_softlimit(AxisNumber, 0, 0, 0, 0, 0);
|
||||
g_pLogger->SendAndFlushWithTime(L"[Jog] d2410_config_softlimit No Enable Softlimit m_RStatus = %d\n", m_RStatus);
|
||||
}
|
||||
@@ -860,13 +860,13 @@ HSI_STATUS HSI_Motion::SetPositionXyz(UINT AxisTypes, double PositionX, double
|
||||
g_pLogger->SendAndFlushWithTime(L"[SetPositionXyz] In\n");
|
||||
if (CurrentMotionState != E_SO7_MOTION_MOVETO)
|
||||
{
|
||||
//定位前判断是否驱动报警
|
||||
//定位前判断是否驱动报警
|
||||
if (HSI_STATUS_FAILED == DriverAlarmStatus())
|
||||
{
|
||||
g_pLogger->SendAndFlushWithTime(L"[SetPositionXyz] DriverAlarmStatus HSI_STATUS_FAILED\n");
|
||||
return HSI_STATUS_FAILED;
|
||||
}
|
||||
//判断急停是否触发
|
||||
//判断急停是否触发
|
||||
bool bEmged(false);
|
||||
IsEmergented(bEmged);
|
||||
if (bEmged == true)
|
||||
@@ -876,12 +876,12 @@ HSI_STATUS HSI_Motion::SetPositionXyz(UINT AxisTypes, double PositionX, double
|
||||
sEvenProp.EventType = HSI_EVENT_ERROR;
|
||||
sEvenProp.EventID = HSI_EVENT_MOTION;
|
||||
sEvenProp.EventResponse = HSI_EVENT_RESPONSE_OK;
|
||||
strcpy_s(sEvenProp.EventData, HSI_MaxStringLength, "急停已触发!!!");
|
||||
strcpy_s(sEvenProp.EventData, HSI_MaxStringLength, "急停已触发!!!");
|
||||
EventCallback(sEvenProp);
|
||||
return HSI_STATUS_FAILED;
|
||||
}
|
||||
|
||||
//定位前判断是否已经回家
|
||||
//定位前判断是否已经回家
|
||||
bool home(true);
|
||||
IsHomed(home);
|
||||
if (false == home)
|
||||
@@ -891,7 +891,7 @@ HSI_STATUS HSI_Motion::SetPositionXyz(UINT AxisTypes, double PositionX, double
|
||||
sEvenProp.EventType = HSI_EVENT_ERROR;
|
||||
sEvenProp.EventID = HSI_EVENT_MOTION;
|
||||
sEvenProp.EventResponse = HSI_EVENT_RESPONSE_OK;
|
||||
strcpy_s(sEvenProp.EventData, HSI_MaxStringLength, "没有回家,请回家之后再试!");
|
||||
strcpy_s(sEvenProp.EventData, HSI_MaxStringLength, "没有回家,请回家之后再试!");
|
||||
EventCallback(sEvenProp);
|
||||
return HSI_STATUS_FAILED;
|
||||
}
|
||||
@@ -917,7 +917,7 @@ HSI_STATUS HSI_Motion::SetPositionXyz(UINT AxisTypes, double PositionX, double
|
||||
m_PosThread[3] = PositionZ;
|
||||
m_PosThread[4] = m_PositionA;
|
||||
}
|
||||
else if (m_CrdAxis == 2)//表示使用2轴插补
|
||||
else if (m_CrdAxis == 2)//表示使用2轴插补
|
||||
{
|
||||
g_pLogger->SendAndFlushWithTime(L"[SetPositionXyz] xy Axis Crd Run\n");
|
||||
LimitOver(HSI_MOTION_AXIS_X, PositionX);
|
||||
@@ -953,17 +953,17 @@ HSI_STATUS HSI_Motion::SetPositionXyz(UINT AxisTypes, double PositionX, double
|
||||
WORD AxisCrd[3] = { 0, 1, 2 };
|
||||
g_IsClose = false;
|
||||
m_RStatus = d2410_set_vector_profile(0, m_SetPotion_Speed[1] * 1000, m_SetPotion_Acc_Time[1], m_SetPotion_Acc_Time[1]);
|
||||
if (m_AxisTypes == 0xf || m_CrdAxis == 4)//表示使用xyza轴插补
|
||||
if (m_AxisTypes == 0xf || m_CrdAxis == 4)//表示使用xyza轴插补
|
||||
{
|
||||
m_RStatus = d2410_t_line4(CARDNO, (long)PositionX, (long)PositionY, (long)PositionZ, (long)m_PositionA, 1);
|
||||
g_pLogger->SendAndFlushWithTime(L"[SetPositionXyz] xyza Crd run single point, m_RStatus = %d\n", m_RStatus);
|
||||
}
|
||||
else if (m_CrdAxis == 2)//表示使用xy轴插补
|
||||
else if (m_CrdAxis == 2)//表示使用xy轴插补
|
||||
{
|
||||
m_RStatus = d2410_t_line2(AXIS_X, (long)PositionX, AXIS_Y, (long)PositionY, 1);
|
||||
g_pLogger->SendAndFlushWithTime(L"[SetPositionXyz] xy Crd run single point, m_RStatus = %d\n", m_RStatus);
|
||||
}
|
||||
else if (m_CrdAxis == 3)//表示使用xyz轴插补
|
||||
else if (m_CrdAxis == 3)//表示使用xyz轴插补
|
||||
{
|
||||
m_RStatus = d2410_t_line3(AxisCrd, (long)PositionX, (long)PositionY, (long)PositionZ, 1);
|
||||
g_pLogger->SendAndFlushWithTime(L"[SetPositionXyz] xyz Crd run single point, m_RStatus = %d\n", m_RStatus);
|
||||
@@ -984,7 +984,7 @@ HSI_STATUS HSI_Motion::SetPositionXyz(UINT AxisTypes, double PositionX, double
|
||||
//ProPulse[4] = m_PosThread[4] / m_Resolution[4];
|
||||
//m_pGT_GetEncPos(1, &EncPos[1], 4, NULL);
|
||||
//int i = 0;
|
||||
//while (i < m_SetPotion_Count[1])//到位次数判断
|
||||
//while (i < m_SetPotion_Count[1])//到位次数判断
|
||||
//{
|
||||
// m_pGT_GetEncPos(1, &EncPos[1], 4, NULL);
|
||||
// if (m_FlyRadius == 1000)
|
||||
@@ -1002,7 +1002,7 @@ HSI_STATUS HSI_Motion::SetPositionXyz(UINT AxisTypes, double PositionX, double
|
||||
// {
|
||||
// i++;
|
||||
// }
|
||||
// else if (count > m_PrecisionTime[1] || g_IsClose == true) //超时退出
|
||||
// else if (count > m_PrecisionTime[1] || g_IsClose == true) //超时退出
|
||||
// {
|
||||
// if (g_IsClose == false)
|
||||
// {
|
||||
@@ -1011,7 +1011,7 @@ HSI_STATUS HSI_Motion::SetPositionXyz(UINT AxisTypes, double PositionX, double
|
||||
// sEvenProp.EventType = HSI_EVENT_ERROR;
|
||||
// sEvenProp.EventID = HSI_EVENT_MOTION;
|
||||
// sEvenProp.EventResponse = HSI_EVENT_RESPONSE_OK;
|
||||
// strcpy_s(sEvenProp.EventData, HSI_MaxStringLength, "Wait_XYZA定位超时!");
|
||||
// strcpy_s(sEvenProp.EventData, HSI_MaxStringLength, "Wait_XYZA定位超时!");
|
||||
// EventCallback(sEvenProp);
|
||||
// }
|
||||
// if (g_IsClose == true)
|
||||
@@ -1066,7 +1066,7 @@ HSI_STATUS HSI_Motion::SetPositionXyza(UINT AxisTypes, double PositionX, double
|
||||
{
|
||||
m_PositionA = PositionA;
|
||||
g_pLogger->SendAndFlushWithTime(L"[SetPositionXyza] In\n");
|
||||
//AxisTypes = 0xf,表示4轴做插补运动
|
||||
//AxisTypes = 0xf,表示4轴做插补运动
|
||||
rStatus = SetPositionXyz(AxisTypes, PositionX, PositionY, PositionZ, eType, dFlyRadius);
|
||||
g_pLogger->SendAndFlushWithTime(L"[SetPositionXyza] Out\n");
|
||||
}
|
||||
@@ -1099,13 +1099,13 @@ HSI_STATUS HSI_Motion::Load_Motion_Inifile(CString DMCIniFile)
|
||||
USES_CONVERSION;
|
||||
CString temp = "";
|
||||
CString axisNum[5] = { L"0", L"1", L"2", L"3", L"4" };
|
||||
//判断Log目录是否存在,不存在就创建
|
||||
//判断Log目录是否存在,不存在就创建
|
||||
if (CreateDirectory(m_AppPath + "\\Log", NULL))
|
||||
{
|
||||
g_pLogger->SendAndFlushWithTime(L"[Load_Motion_Inifile] Create Log Directory\n");
|
||||
CreateDirectory(m_AppPath + "\\Log", NULL);
|
||||
}
|
||||
//判断是否存在该文件
|
||||
//判断是否存在该文件
|
||||
if (GetFileAttributes(DMCIniFile) == -1)
|
||||
{
|
||||
g_pLogger->SendAndFlushWithTime(L"[Load_Motion_Inifile] no find the file\n");
|
||||
@@ -1113,7 +1113,7 @@ HSI_STATUS HSI_Motion::Load_Motion_Inifile(CString DMCIniFile)
|
||||
sEvenProp.EventType = HSI_EVENT_ERROR;
|
||||
sEvenProp.EventID = HSI_EVENT_MOTION;
|
||||
sEvenProp.EventResponse = HSI_EVENT_RESPONSE_OK;
|
||||
strcpy_s(sEvenProp.EventData, HSI_MaxStringLength, "DMC2410_Motion.ini文件不存在!");
|
||||
strcpy_s(sEvenProp.EventData, HSI_MaxStringLength, "DMC2410_Motion.ini文件不存在!");
|
||||
EventCallback(sEvenProp);
|
||||
return HSI_STATUS_FAILED;
|
||||
}
|
||||
@@ -1184,7 +1184,7 @@ HSI_STATUS HSI_Motion::Load_Config_Inifile(CString ConfigFile)
|
||||
sEvenProp.EventType = HSI_EVENT_ERROR;
|
||||
sEvenProp.EventID = HSI_EVENT_MOTION;
|
||||
sEvenProp.EventResponse = HSI_EVENT_RESPONSE_OK;
|
||||
strcpy_s(sEvenProp.EventData, HSI_MaxStringLength, "DMC2410_Config.ini文件不存在!");
|
||||
strcpy_s(sEvenProp.EventData, HSI_MaxStringLength, "DMC2410_Config.ini文件不存在!");
|
||||
EventCallback(sEvenProp);
|
||||
return HSI_STATUS_FAILED;
|
||||
}
|
||||
@@ -1292,7 +1292,7 @@ void HSI_Motion::UpdateMotionState()
|
||||
|
||||
int i = 0;
|
||||
long TimeCount = m_PrecisionTime[1] * 100;
|
||||
while (i <= m_SetPotion_Count[1])//到位次数判断
|
||||
while (i <= m_SetPotion_Count[1])//到位次数判断
|
||||
{
|
||||
EncPos[1] = d2410_get_encoder(AXIS_X);
|
||||
EncPos[2] = d2410_get_encoder(AXIS_Y);
|
||||
@@ -1314,7 +1314,7 @@ void HSI_Motion::UpdateMotionState()
|
||||
{
|
||||
i++;
|
||||
}
|
||||
else if (Count > TimeCount || g_IsClose == true) //超时退出
|
||||
else if (Count > TimeCount || g_IsClose == true) //超时退出
|
||||
{
|
||||
if (g_IsClose == false)
|
||||
{
|
||||
@@ -1332,7 +1332,7 @@ void HSI_Motion::UpdateMotionState()
|
||||
sEvenProp.EventType = HSI_EVENT_ERROR;
|
||||
sEvenProp.EventID = HSI_EVENT_MOTION;
|
||||
sEvenProp.EventResponse = HSI_EVENT_RESPONSE_OK;
|
||||
strcpy_s(sEvenProp.EventData, HSI_MaxStringLength, "Nowait_XYZA定位超时!");
|
||||
strcpy_s(sEvenProp.EventData, HSI_MaxStringLength, "Nowait_XYZA定位超时!");
|
||||
EventCallback(sEvenProp);
|
||||
}
|
||||
else
|
||||
@@ -1409,7 +1409,7 @@ void HSI_Motion::UpdateMotionStateIO()
|
||||
while (m_Thread_StateIO == HSI_THREAD_RUNNING)
|
||||
{
|
||||
Status = d2410_read_inport(CARDNO);
|
||||
//1个脚踏开关
|
||||
//1个脚踏开关
|
||||
if (m_IsFootSwitch == 1)
|
||||
{
|
||||
if ((Status & m_FootSwitchInport) == 0 && FootSwitchStatus == false)
|
||||
@@ -1427,7 +1427,7 @@ void HSI_Motion::UpdateMotionStateIO()
|
||||
EventCallback(sEvenProp);
|
||||
}
|
||||
}
|
||||
//急停功能
|
||||
//急停功能
|
||||
if (m_IsQuickStop == 1)
|
||||
{
|
||||
EmgStatus[1] = d2410_get_rsts(AXIS_X);
|
||||
@@ -1437,19 +1437,19 @@ void HSI_Motion::UpdateMotionStateIO()
|
||||
if (((EmgStatus[1] >> 7 & 1) == 1 || (EmgStatus[2] >> 7 & 1) == 1 || (EmgStatus[3] >> 7 & 1) == 1 || (EmgStatus[4] >> 7 & 1) == 1) && QuickStopFlag == false)
|
||||
{
|
||||
QuickStopFlag = true;
|
||||
m_RStatus = d2410_write_outbit(CARDNO, (WORD)m_QuickStopOutPort, 1);//1为打开输出端口
|
||||
m_RStatus = d2410_write_outbit(CARDNO, (WORD)m_QuickStopOutPort, 1);//1为打开输出端口
|
||||
g_pLogger->SendAndFlushWithTime(L"[UpdateMotionStateIO] QuickStop Trigger\n");
|
||||
sEvenProp.Init();
|
||||
sEvenProp.EventType = HSI_EVENT_ERROR;
|
||||
sEvenProp.EventID = HSI_EVENT_MOTION;
|
||||
sEvenProp.EventResponse = HSI_EVENT_RESPONSE_OK;
|
||||
strcpy_s(sEvenProp.EventData, HSI_MaxStringLength, "急停已触发!!!");
|
||||
strcpy_s(sEvenProp.EventData, HSI_MaxStringLength, "急停已触发!!!");
|
||||
EventCallback(sEvenProp);
|
||||
}
|
||||
if (QuickStopFlag == true)
|
||||
{
|
||||
QuickStopFlag = false;
|
||||
m_RStatus = d2410_write_outbit(CARDNO, (WORD)m_QuickStopOutPort, 0);//1为打开输出端口
|
||||
m_RStatus = d2410_write_outbit(CARDNO, (WORD)m_QuickStopOutPort, 0);//1为打开输出端口
|
||||
}
|
||||
|
||||
}
|
||||
@@ -1476,7 +1476,7 @@ void HSI_Motion::DoEvents()
|
||||
sEvenProp.EventType = HSI_EVENT_ERROR;
|
||||
sEvenProp.EventID = HSI_EVENT_MOTION;
|
||||
sEvenProp.EventResponse = HSI_EVENT_RESPONSE_OK;
|
||||
strcpy_s(sEvenProp.EventData, HSI_MaxStringLength, "DoEvents_异常");
|
||||
strcpy_s(sEvenProp.EventData, HSI_MaxStringLength, "DoEvents_异常");
|
||||
EventCallback(sEvenProp);
|
||||
}
|
||||
if (g_IsClose)
|
||||
@@ -1507,23 +1507,23 @@ HSI_STATUS HSI_Motion::DriverAlarmStatus()
|
||||
char messageAlarm[100] = "";
|
||||
if ((AlarmStatus[1] >> 11 & 1) == 1)
|
||||
{
|
||||
strcat_s(messageAlarm, 30, "1、");
|
||||
strcat_s(messageAlarm, 30, "1、");
|
||||
}
|
||||
if ((AlarmStatus[2] >> 11 & 1) == 1)
|
||||
{
|
||||
strcat_s(messageAlarm, 30, "2、");
|
||||
strcat_s(messageAlarm, 30, "2、");
|
||||
}
|
||||
if ((AlarmStatus[3] >> 11 & 1) == 1)
|
||||
{
|
||||
strcat_s(messageAlarm, 30, "3、");
|
||||
strcat_s(messageAlarm, 30, "3、");
|
||||
}
|
||||
if ((AlarmStatus[4] >> 11 & 1) == 1)
|
||||
{
|
||||
strcat_s(messageAlarm, 30, "4、");
|
||||
strcat_s(messageAlarm, 30, "4、");
|
||||
}
|
||||
CString temp(messageAlarm);
|
||||
g_pLogger->SendAndFlushWithTime(temp + L" axis drive alarm!\n");
|
||||
strcat_s(messageAlarm, 100, "轴驱动器报警!");
|
||||
strcat_s(messageAlarm, 100, "轴驱动器报警!");
|
||||
strcpy_s(sEvenProp.EventData, HSI_MaxStringLength, messageAlarm);
|
||||
EventCallback(sEvenProp);
|
||||
if (sEvenProp.EventCallbackID == HSI_EVENT_RESPONSE_CANCEL)
|
||||
@@ -1531,7 +1531,7 @@ HSI_STATUS HSI_Motion::DriverAlarmStatus()
|
||||
g_pLogger->SendAndFlushWithTime(L"[DriverAlarmStatus] CANCEL");
|
||||
return HSI_STATUS_NORMAL;
|
||||
}
|
||||
m_RStatus = d2410_reset_latch_flag(CARDNO);//清除锁存标志
|
||||
m_RStatus = d2410_reset_latch_flag(CARDNO);//清除锁存标志
|
||||
return HSI_STATUS_FAILED;
|
||||
}
|
||||
g_pLogger->SendAndFlushWithTime(L"[DriverAlarmStatus] Out\n");
|
||||
@@ -1581,7 +1581,7 @@ HSI_STATUS HSI_Motion::GetDIO(UINT IOChannel, UINT& _Status)
|
||||
_Status |= temp;
|
||||
|
||||
}
|
||||
if (IOChannel == HSI_MOTION_OUTPUT_CH1) //获取通用输出
|
||||
if (IOChannel == HSI_MOTION_OUTPUT_CH1) //获取通用输出
|
||||
{
|
||||
_Status = d2410_read_outport(CARDNO);
|
||||
_Status &= 0x0000ffff;
|
||||
@@ -1600,7 +1600,7 @@ HSI_STATUS HSI_Motion::SetDIO(UINT IOChannel, UINT _Status)
|
||||
auto rStatus = HSI_STATUS_NORMAL;
|
||||
if (g_pHSI_Motion)
|
||||
{
|
||||
if (IOChannel == HSI_MOTION_OUTPUT_CH1) //设置通用输出
|
||||
if (IOChannel == HSI_MOTION_OUTPUT_CH1) //设置通用输出
|
||||
{
|
||||
_Status &= 0x0000ffff;
|
||||
m_RStatus = d2410_write_outport(CARDNO, _Status);
|
||||
@@ -1664,7 +1664,7 @@ HSI_STATUS HSI_Motion::DCCScanSetData(UINT AxisTypes, HSI_SCAN_MOTION_TYPE eType
|
||||
auto rStatus = HSI_STATUS_NORMAL;
|
||||
if (g_pHSI_Motion)
|
||||
{
|
||||
//触发的位置为相对位置,用法一般是移动到起点位置,再开始设置触发位置(相对位置),最终设置终点位置
|
||||
//触发的位置为相对位置,用法一般是移动到起点位置,再开始设置触发位置(相对位置),最终设置终点位置
|
||||
g_pLogger->SendAndFlushWithTime(L"[DCCScanSetData] In\n");
|
||||
if (lTrigNumber > 8)
|
||||
{
|
||||
@@ -1673,12 +1673,12 @@ HSI_STATUS HSI_Motion::DCCScanSetData(UINT AxisTypes, HSI_SCAN_MOTION_TYPE eType
|
||||
sEvenProp.EventType = HSI_EVENT_ERROR;
|
||||
sEvenProp.EventID = HSI_EVENT_MOTION;
|
||||
sEvenProp.EventResponse = HSI_EVENT_RESPONSE_OK;
|
||||
strcpy_s(sEvenProp.EventData, HSI_MaxStringLength, "每个元素触发的个数不能超过8个");
|
||||
strcpy_s(sEvenProp.EventData, HSI_MaxStringLength, "每个元素触发的个数不能超过8个");
|
||||
EventCallback(sEvenProp);
|
||||
return HSI_STATUS_FAILED;
|
||||
}
|
||||
//测试使用
|
||||
if (eType == HSI_SCAN_MOTION_MANUAL_TEST)//手动触发
|
||||
//测试使用
|
||||
if (eType == HSI_SCAN_MOTION_MANUAL_TEST)//手动触发
|
||||
{
|
||||
long runned = d2410_compare_get_points_runned_Extern(CARDNO, 0);
|
||||
m_RStatus = d2410_compare_config_Extern(CARDNO, 0, 1, 0, 0);
|
||||
@@ -1697,23 +1697,23 @@ HSI_STATUS HSI_Motion::DCCScanSetData(UINT AxisTypes, HSI_SCAN_MOTION_TYPE eType
|
||||
|
||||
|
||||
|
||||
//手动触发时,只针对CMP1起作用,OUT21,把OUT21当做普通IO,即禁用位置比较功能,才可以手动触发
|
||||
//手动触发时,只针对CMP1起作用,OUT21,把OUT21当做普通IO,即禁用位置比较功能,才可以手动触发
|
||||
m_RStatus = d2410_compare_config_Extern(CARDNO, 0, 0, 0, 1);
|
||||
m_RStatus = d2410_write_outbit(CARDNO, 21, 1);
|
||||
Sleep(m_ManualTriggerHold);
|
||||
m_RStatus = d2410_write_outbit(CARDNO, 21, 0);
|
||||
g_pLogger->SendAndFlushWithTime(L"[DCCScanSetData] ManualTrigger m_RStatus = %d, ManualTriggerHold = %dms\n", m_RStatus, m_ManualTriggerHold);
|
||||
}
|
||||
if (eType == HSI_SCAN_MOTION_SPEC_LOCA)//线性不等间隔
|
||||
if (eType == HSI_SCAN_MOTION_SPEC_LOCA)//线性不等间隔
|
||||
{
|
||||
WORD AxisNumber = AxisConvert(AxisTypes);
|
||||
long StartPos = d2410_get_encoder(AxisNumber);
|
||||
//功能:查询可以加入的比较点数量
|
||||
//功能:查询可以加入的比较点数量
|
||||
long Remainder = d2410_compare_get_points_remained_Extern(CARDNO, 0);
|
||||
//long num2 = d2410_compare_get_points_remained_Extern(CARDNO, 1);
|
||||
g_pLogger->SendAndFlushWithTime(L"[DCCScanSetData] queue 0 Remainder number = %d\n", Remainder);
|
||||
m_RStatus = d2410_compare_clear_points_Extern(CARDNO, 0);
|
||||
//设置为低速比较;卡号,队列,启用,轴号,编码器绝对位置
|
||||
//设置为低速比较;卡号,队列,启用,轴号,编码器绝对位置
|
||||
m_RStatus = d2410_compare_config_Extern(CARDNO, 0, 1, AxisNumber, 1);
|
||||
g_pLogger->SendAndFlushWithTime(L"[DCCScanSetData] d2410_compare_config_Extern m_RStatus = %d\n", m_RStatus);
|
||||
long tempbuf[100];
|
||||
@@ -1734,7 +1734,7 @@ HSI_STATUS HSI_Motion::DCCScanSetData(UINT AxisTypes, HSI_SCAN_MOTION_TYPE eType
|
||||
dir = StartPos > dTrigDis[0] ? 1 : 0;
|
||||
g_pLogger->SendAndFlushWithTime(L"[DCCScanSetData] dir = %d,StartPos = %d,StartPos(mm) = %.4f\n", dir, StartPos, StartPos * m_Resolution[AxisNumber + 1]);
|
||||
tempbuf[0] = StartPos + (long)dTrigDis[0];
|
||||
//添加高速位置比较器;卡号,队列0,编码器绝对位置,方向,脉冲宽度模式100us,输出端口号
|
||||
//添加高速位置比较器;卡号,队列0,编码器绝对位置,方向,脉冲宽度模式100us,输出端口号
|
||||
m_RStatus = d2410_compare_add_point_Extern(CARDNO, 0, tempbuf[0], dir, (WORD)m_TriggerPulseMode, m_TriggerOutport);
|
||||
g_pLogger->SendAndFlushWithTime(_T("[DCCScanSetData] d2410_config_CMP_PIN m_RStatus = %d,m_SdkStatus = %s,m_TriggerPulseMode = %d,m_TriggerOutport = %d,tempbuf[0] = %d,tempbuf(mm) = %.4f\n"), m_RStatus, m_SdkStatus[m_RStatus], m_TriggerPulseMode, m_TriggerOutport, tempbuf[0], tempbuf[0] * m_Resolution[AxisNumber + 1]);
|
||||
for (UINT i = 1; i < lTrigNumber; i++)
|
||||
@@ -1745,7 +1745,7 @@ HSI_STATUS HSI_Motion::DCCScanSetData(UINT AxisTypes, HSI_SCAN_MOTION_TYPE eType
|
||||
g_pLogger->SendAndFlushWithTime(_T("[DCCScanSetData] d2410_config_CMP_PIN m_RStatus = %d,m_SdkStatus = %s,tempbuf[%d] = %d,tempbuf(mm) = %.4f\n"), m_RStatus, m_SdkStatus[m_RStatus], i, tempbuf[i], tempbuf[i] * m_Resolution[AxisNumber + 1]);
|
||||
}
|
||||
}
|
||||
if (eType == HSI_SCAN_MOTION_EQ_DIS)//等间隔
|
||||
if (eType == HSI_SCAN_MOTION_EQ_DIS)//等间隔
|
||||
{
|
||||
g_pLogger->SendAndFlushWithTime(L"[DCCScanSetData] no interval mode\n");
|
||||
rStatus = HSI_STATUS_FAILED;
|
||||
@@ -2059,7 +2059,7 @@ double HSI_Motion::LimitOver(UINT AxisTypes, double &LimitPos)
|
||||
{
|
||||
switch (AxisNumber)
|
||||
{
|
||||
case 0: //轴1
|
||||
case 0: //轴1
|
||||
{
|
||||
if (LimitPos > 0)
|
||||
{
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
// HSI_Illumination.cpp : ¶¨Òå DLL µÄ³õʼ»¯Àý³Ì¡£
|
||||
// HSI_Illumination.cpp : 定义 DLL 的初始化例程。
|
||||
//
|
||||
#include "stdafx.h"
|
||||
#include "..\..\..\SevenOcean\SO7_Proto.h"
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
// HSI_Motion.cpp : 定义 DLL 的初始化例程。
|
||||
// HSI_Motion.cpp : 定义 DLL 的初始化例程。
|
||||
//
|
||||
#include "stdafx.h"
|
||||
#include "..\..\..\..\Hsi\HSI.h"
|
||||
@@ -15,8 +15,8 @@
|
||||
#define BUFF_SIZE 16
|
||||
HSI_Motion *g_pHSI_Motion = nullptr;
|
||||
extern CSO7_Proto* g_pSO7_Proto;
|
||||
HANDLE hCom;//串口句柄
|
||||
unsigned char SendBuff[BUFF_SIZE];//发送接收缓冲区
|
||||
HANDLE hCom;//串口句柄
|
||||
unsigned char SendBuff[BUFF_SIZE];//发送接收缓冲区
|
||||
//===========================================================================
|
||||
HANDLE HSI_Motion::m_Thread_Id = NULL;
|
||||
HANDLE HSI_Motion::m_Thread_Mutex = NULL;
|
||||
@@ -62,18 +62,18 @@ int HSI_Motion::Port1616IOInit()
|
||||
{
|
||||
while (true)
|
||||
{
|
||||
for (i = 1; i < 257; i++)//从1到256遍历所有com
|
||||
for (i = 1; i < 257; i++)//从1到256遍历所有com
|
||||
{
|
||||
char buf[10];
|
||||
sprintf_s(buf, "COM%d", i);
|
||||
CString comName(buf);
|
||||
hCom = CreateFile(comName,
|
||||
GENERIC_READ | GENERIC_WRITE, //允许读和写
|
||||
0, //独占方式,串口必须为0
|
||||
GENERIC_READ | GENERIC_WRITE, //允许读和写
|
||||
0, //独占方式,串口必须为0
|
||||
NULL,
|
||||
OPEN_EXISTING, //打开而不是创建,串口必须为打开
|
||||
0, //同步方式,同步执行时,函数直到操作完成后才返回
|
||||
NULL);//串口必须为NULL
|
||||
OPEN_EXISTING, //打开而不是创建,串口必须为打开
|
||||
0, //同步方式,同步执行时,函数直到操作完成后才返回
|
||||
NULL);//串口必须为NULL
|
||||
if (hCom != (HANDLE)-1)
|
||||
{
|
||||
PurgeComm(hCom, PURGE_TXCLEAR | PURGE_RXCLEAR);
|
||||
@@ -96,7 +96,7 @@ int HSI_Motion::Port1616IOInit()
|
||||
return 1;//Setting Error!!!!
|
||||
}
|
||||
|
||||
//设置读写超时时间
|
||||
//设置读写超时时间
|
||||
COMMTIMEOUTS to;
|
||||
|
||||
|
||||
@@ -107,8 +107,8 @@ int HSI_Motion::Port1616IOInit()
|
||||
SetCommTimeouts(hCom, &to);
|
||||
PurgeComm(hCom, PURGE_TXCLEAR | PURGE_RXCLEAR);
|
||||
|
||||
//判断COM口是否打开正确
|
||||
unsigned char rtn = SendData(0x8000);//15号端口作为测试用
|
||||
//判断COM口是否打开正确
|
||||
unsigned char rtn = SendData(0x8000);//15号端口作为测试用
|
||||
if (rtn == 1)
|
||||
{
|
||||
i++;
|
||||
@@ -179,7 +179,7 @@ HSI_STATUS HSI_Motion::Startup(HWND _hWnd, bool _bOfflineOnly)
|
||||
sEvenProp.EventType = HSI_EVENT_ERROR;
|
||||
sEvenProp.EventID = HSI_EVENT_MOTION;
|
||||
sEvenProp.EventResponse = HSI_EVENT_RESPONSE_OK;
|
||||
strcpy_s(sEvenProp.EventData, HSI_MaxStringLength, "IO串口打开失败!!");
|
||||
strcpy_s(sEvenProp.EventData, HSI_MaxStringLength, "IO串口打开失败!!");
|
||||
EventCallback(sEvenProp);
|
||||
CloseHandle(hCom);
|
||||
g_pSO7_Proto->g_so7_config.m_isOpenIO = 0;
|
||||
@@ -616,7 +616,7 @@ HSI_STATUS HSI_Motion::SetDIO(UINT IOChannel, UINT _Status)
|
||||
auto rStatus = HSI_STATUS_NORMAL;
|
||||
if (g_pSO7_Proto)
|
||||
{
|
||||
if (IOChannel == HSI_MOTION_OUTPUT_CH3) //设置通用输出
|
||||
if (IOChannel == HSI_MOTION_OUTPUT_CH3) //设置通用输出
|
||||
{
|
||||
unsigned char rtn = SendData(_Status);
|
||||
if (rtn == 1)
|
||||
@@ -636,7 +636,7 @@ HSI_STATUS HSI_Motion::SetDIO(UINT IOChannel, UINT _Status)
|
||||
sEvenProp.EventType = HSI_EVENT_ERROR;
|
||||
sEvenProp.EventID = HSI_EVENT_MOTION;
|
||||
sEvenProp.EventResponse = HSI_EVENT_RESPONSE_OK;
|
||||
strcpy_s(sEvenProp.EventData, HSI_MaxStringLength, "发送数据失败!");
|
||||
strcpy_s(sEvenProp.EventData, HSI_MaxStringLength, "发送数据失败!");
|
||||
EventCallback(sEvenProp);
|
||||
rStatus = HSI_STATUS_FAILED;
|
||||
}
|
||||
@@ -1155,7 +1155,7 @@ HSI_STATUS HSI_Motion::IOStep(bool RunSts)
|
||||
return rStatus;
|
||||
}
|
||||
|
||||
//串口控制器
|
||||
//串口控制器
|
||||
//===========================================================================
|
||||
void HSI_Motion::SetSum(unsigned char *CheckBit)
|
||||
{
|
||||
@@ -1189,25 +1189,25 @@ unsigned char HSI_Motion::CheckSum(unsigned char *CheckBit)
|
||||
//===========================================================================
|
||||
void HSI_Motion::SetSendBuff(unsigned char Address, unsigned char Command, UINT ComData1, UINT ComData2)
|
||||
{
|
||||
SendBuff[0] = 0x00;//固定为00H
|
||||
SendBuff[1] = 0x5A;//固定为5AH=01011010B
|
||||
SendBuff[2] = 0x61;//十六路为61H
|
||||
SendBuff[3] = Address;//地址,由板子的短路针决定0
|
||||
SendBuff[4] = Command;//命令
|
||||
SendBuff[0] = 0x00;//固定为00H
|
||||
SendBuff[1] = 0x5A;//固定为5AH=01011010B
|
||||
SendBuff[2] = 0x61;//十六路为61H
|
||||
SendBuff[3] = Address;//地址,由板子的短路针决定0
|
||||
SendBuff[4] = Command;//命令
|
||||
|
||||
SendBuff[5] = (unsigned char)ComData1;//数据Y7..Y0
|
||||
SendBuff[6] = (unsigned char)ComData2;//数据Y15..Y8
|
||||
SendBuff[7] = 0x00;//数据
|
||||
SendBuff[8] = 0x00;//数据
|
||||
SendBuff[9] = 0x00;//数据
|
||||
SendBuff[10] = 0x00;//数据
|
||||
SendBuff[11] = 0x00;//数据
|
||||
SendBuff[12] = 0x00;//数据
|
||||
SendBuff[13] = 0x00;//数据
|
||||
SendBuff[14] = 0x00;//数据
|
||||
SendBuff[15] = 0x00;//校验和
|
||||
SendBuff[5] = (unsigned char)ComData1;//数据Y7..Y0
|
||||
SendBuff[6] = (unsigned char)ComData2;//数据Y15..Y8
|
||||
SendBuff[7] = 0x00;//数据
|
||||
SendBuff[8] = 0x00;//数据
|
||||
SendBuff[9] = 0x00;//数据
|
||||
SendBuff[10] = 0x00;//数据
|
||||
SendBuff[11] = 0x00;//数据
|
||||
SendBuff[12] = 0x00;//数据
|
||||
SendBuff[13] = 0x00;//数据
|
||||
SendBuff[14] = 0x00;//数据
|
||||
SendBuff[15] = 0x00;//校验和
|
||||
|
||||
SetSum(SendBuff);//设置校验和
|
||||
SetSum(SendBuff);//设置校验和
|
||||
}
|
||||
//===========================================================================
|
||||
unsigned char HSI_Motion::SendData(UINT Output)
|
||||
@@ -1221,7 +1221,7 @@ unsigned char HSI_Motion::SendData(UINT Output)
|
||||
Bit8_15 = Output & 0xff00;
|
||||
Bit8_15 >>= 8;
|
||||
SetSendBuff(0, 0x03, Bit0_7, Bit8_15);
|
||||
WriteFile(hCom, SendBuff, BUFF_SIZE, &Bytes, NULL);//把16字节发送出去
|
||||
WriteFile(hCom, SendBuff, BUFF_SIZE, &Bytes, NULL);//把16字节发送出去
|
||||
UINT IsSuccess = 0, temp;
|
||||
ReadData(temp, IsSuccess);
|
||||
if (IsSuccess != Output)
|
||||
@@ -1238,10 +1238,10 @@ unsigned char HSI_Motion::ReadData(UINT &Input, UINT &Output)
|
||||
{
|
||||
unsigned long Bytes = 0;
|
||||
PurgeComm(hCom, PURGE_TXCLEAR | PURGE_RXCLEAR);
|
||||
SetSendBuff(0, 0x05, 0, 0); //随便发点东西0x06,才能读取数据
|
||||
WriteFile(hCom, SendBuff, BUFF_SIZE, &Bytes, NULL);//把16字节发送出去
|
||||
SetSendBuff(0, 0x05, 0, 0); //随便发点东西0x06,才能读取数据
|
||||
WriteFile(hCom, SendBuff, BUFF_SIZE, &Bytes, NULL);//把16字节发送出去
|
||||
SetSendBuff(0, 0x07, 0, 0);
|
||||
ReadFile(hCom, SendBuff, BUFF_SIZE, &Bytes, NULL);//读返回的数据.读超时根据COMMTIMEOUTS to;变量设定
|
||||
ReadFile(hCom, SendBuff, BUFF_SIZE, &Bytes, NULL);//读返回的数据.读超时根据COMMTIMEOUTS to;变量设定
|
||||
Input = SendBuff[8];
|
||||
Input <<= 8;
|
||||
Input |= SendBuff[7];
|
||||
@@ -1254,7 +1254,7 @@ unsigned char HSI_Motion::ReadData(UINT &Input, UINT &Output)
|
||||
// sEvenProp.EventType = HSI_EVENT_ERROR;
|
||||
// sEvenProp.EventID = HSI_EVENT_MOTION;
|
||||
// sEvenProp.EventResponse = HSI_EVENT_RESPONSE_OK;
|
||||
// strcpy_s(sEvenProp.EventData, HSI_MaxStringLength, "校验失败!");
|
||||
// strcpy_s(sEvenProp.EventData, HSI_MaxStringLength, "校验失败!");
|
||||
// EventCallback(sEvenProp);
|
||||
// return 1;
|
||||
//}
|
||||
@@ -1266,7 +1266,7 @@ unsigned char HSI_Motion::ReadData(UINT &Input, UINT &Output)
|
||||
// sEvenProp.EventType = HSI_EVENT_ERROR;
|
||||
// sEvenProp.EventID = HSI_EVENT_MOTION;
|
||||
// sEvenProp.EventResponse = HSI_EVENT_RESPONSE_OK;
|
||||
// strcpy_s(sEvenProp.EventData, HSI_MaxStringLength, "读取数据失败!");
|
||||
// strcpy_s(sEvenProp.EventData, HSI_MaxStringLength, "读取数据失败!");
|
||||
// EventCallback(sEvenProp);
|
||||
// return 1;
|
||||
// }
|
||||
|
||||
+1
-1
@@ -1,4 +1,4 @@
|
||||
// HSI_Illumination.cpp : 定义 DLL 的初始化例程。
|
||||
// HSI_Illumination.cpp : 定义 DLL 的初始化例程。
|
||||
//
|
||||
#include "stdafx.h"
|
||||
#include "..\..\..\SevenOcean\CMMIO_SERIAL.h"
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
// HSI_Motion.cpp : 定义 DLL 的初始化例程。
|
||||
// HSI_Motion.cpp : 定义 DLL 的初始化例程。
|
||||
//
|
||||
#include "stdafx.h"
|
||||
#include "..\logger.h"
|
||||
@@ -396,7 +396,7 @@ void HSI_Motion::UpdateMotionStateIO()
|
||||
sEvenProp.EventType = HSI_EVENT_NOTIFY;
|
||||
sEvenProp.EventID = HSI_NOTIFY_CLEAR_ITERATIONS;
|
||||
sEvenProp.EventResponse = HSI_EVENT_RESPONSE_OK;
|
||||
strcpy_s(sEvenProp.EventData, HSI_MaxStringLength, "PLC停止运行,软件将重置运行信息!");
|
||||
strcpy_s(sEvenProp.EventData, HSI_MaxStringLength, "PLC停止运行,软件将重置运行信息!");
|
||||
EventCallback(sEvenProp);
|
||||
}
|
||||
m_iRunningStatus = iSignal1;
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
// HSI_Motion.cpp : 定义 DLL 的初始化例程。
|
||||
// HSI_Motion.cpp : 定义 DLL 的初始化例程。
|
||||
//
|
||||
#include "stdafx.h"
|
||||
#include "..\..\..\..\Hsi\HSI.h"
|
||||
@@ -13,8 +13,8 @@
|
||||
#define BUFF_SIZE 16
|
||||
|
||||
|
||||
HANDLE hCom;//串口句柄
|
||||
unsigned char SendBuff[BUFF_SIZE];//发送接收缓冲区
|
||||
HANDLE hCom;//串口句柄
|
||||
unsigned char SendBuff[BUFF_SIZE];//发送接收缓冲区
|
||||
HSI_Motion *g_pHSI_Motion = nullptr;
|
||||
//===========================================================================
|
||||
HANDLE HSI_Motion::m_Thread_Id = NULL;
|
||||
@@ -47,18 +47,18 @@ int HSI_Motion::Port1616IOInit()
|
||||
{
|
||||
while (true)
|
||||
{
|
||||
for (i = 1; i < 257; i++)//从1到256遍历所有com
|
||||
for (i = 1; i < 257; i++)//从1到256遍历所有com
|
||||
{
|
||||
char buf[10];
|
||||
sprintf_s(buf, "COM%d", i);
|
||||
CString comName(buf);
|
||||
hCom = CreateFile(comName,
|
||||
GENERIC_READ | GENERIC_WRITE, //允许读和写
|
||||
0, //独占方式,串口必须为0
|
||||
GENERIC_READ | GENERIC_WRITE, //允许读和写
|
||||
0, //独占方式,串口必须为0
|
||||
NULL,
|
||||
OPEN_EXISTING, //打开而不是创建,串口必须为打开
|
||||
0, //同步方式,同步执行时,函数直到操作完成后才返回
|
||||
NULL);//串口必须为NULL
|
||||
OPEN_EXISTING, //打开而不是创建,串口必须为打开
|
||||
0, //同步方式,同步执行时,函数直到操作完成后才返回
|
||||
NULL);//串口必须为NULL
|
||||
if (hCom != (HANDLE)-1)
|
||||
{
|
||||
PurgeComm(hCom, PURGE_TXCLEAR | PURGE_RXCLEAR);
|
||||
@@ -81,7 +81,7 @@ int HSI_Motion::Port1616IOInit()
|
||||
return 1;//Setting Error!!!!
|
||||
}
|
||||
|
||||
//设置读写超时时间
|
||||
//设置读写超时时间
|
||||
COMMTIMEOUTS to;
|
||||
memset(&to, 0, sizeof(to));
|
||||
to.ReadIntervalTimeout = 100;
|
||||
@@ -91,8 +91,8 @@ int HSI_Motion::Port1616IOInit()
|
||||
PurgeComm(hCom, PURGE_TXCLEAR | PURGE_RXCLEAR);
|
||||
|
||||
|
||||
//判断COM口是否打开正确
|
||||
unsigned char rtn = SendData(0x8000);//15号端口作为测试用
|
||||
//判断COM口是否打开正确
|
||||
unsigned char rtn = SendData(0x8000);//15号端口作为测试用
|
||||
if (rtn == 1)
|
||||
{
|
||||
i++;
|
||||
@@ -135,7 +135,7 @@ HSI_STATUS HSI_Motion::Startup(HWND _hWnd, bool _bOfflineOnly)
|
||||
sEvenProp.EventType = HSI_EVENT_ERROR;
|
||||
sEvenProp.EventID = HSI_EVENT_MOTION;
|
||||
sEvenProp.EventResponse = HSI_EVENT_RESPONSE_OK;
|
||||
strcpy_s(sEvenProp.EventData, HSI_MaxStringLength, "串口打开是失败!!");
|
||||
strcpy_s(sEvenProp.EventData, HSI_MaxStringLength, "串口打开是失败!!");
|
||||
EventCallback(sEvenProp);
|
||||
CloseHandle(hCom);
|
||||
isOpen = false;
|
||||
@@ -181,25 +181,25 @@ unsigned char HSI_Motion::CheckSum(unsigned char *CheckBit)
|
||||
//===========================================================================
|
||||
void HSI_Motion::SetSendBuff(unsigned char Address, unsigned char Command, UINT ComData1, UINT ComData2)
|
||||
{
|
||||
SendBuff[0] = 0x00;//固定为00H
|
||||
SendBuff[1] = 0x5A;//固定为5AH=01011010B
|
||||
SendBuff[2] = 0x61;//十六路为61H
|
||||
SendBuff[3] = Address;//地址,由板子的短路针决定0
|
||||
SendBuff[4] = Command;//命令
|
||||
SendBuff[0] = 0x00;//固定为00H
|
||||
SendBuff[1] = 0x5A;//固定为5AH=01011010B
|
||||
SendBuff[2] = 0x61;//十六路为61H
|
||||
SendBuff[3] = Address;//地址,由板子的短路针决定0
|
||||
SendBuff[4] = Command;//命令
|
||||
|
||||
SendBuff[5] = (unsigned char)ComData1;//数据Y7..Y0
|
||||
SendBuff[6] = (unsigned char)ComData2;//数据Y15..Y8
|
||||
SendBuff[7] = 0x00;//数据
|
||||
SendBuff[8] = 0x00;//数据
|
||||
SendBuff[9] = 0x00;//数据
|
||||
SendBuff[10] = 0x00;//数据
|
||||
SendBuff[11] = 0x00;//数据
|
||||
SendBuff[12] = 0x00;//数据
|
||||
SendBuff[13] = 0x00;//数据
|
||||
SendBuff[14] = 0x00;//数据
|
||||
SendBuff[15] = 0x00;//校验和
|
||||
SendBuff[5] = (unsigned char)ComData1;//数据Y7..Y0
|
||||
SendBuff[6] = (unsigned char)ComData2;//数据Y15..Y8
|
||||
SendBuff[7] = 0x00;//数据
|
||||
SendBuff[8] = 0x00;//数据
|
||||
SendBuff[9] = 0x00;//数据
|
||||
SendBuff[10] = 0x00;//数据
|
||||
SendBuff[11] = 0x00;//数据
|
||||
SendBuff[12] = 0x00;//数据
|
||||
SendBuff[13] = 0x00;//数据
|
||||
SendBuff[14] = 0x00;//数据
|
||||
SendBuff[15] = 0x00;//校验和
|
||||
|
||||
SetSum(SendBuff);//设置校验和
|
||||
SetSum(SendBuff);//设置校验和
|
||||
}
|
||||
//===========================================================================
|
||||
unsigned char HSI_Motion::SendData(UINT Output)
|
||||
@@ -211,7 +211,7 @@ unsigned char HSI_Motion::SendData(UINT Output)
|
||||
Bit8_15 = Output & 0xff00;
|
||||
Bit8_15 >>= 8;
|
||||
SetSendBuff(0, 0x03, Bit0_7, Bit8_15);
|
||||
WriteFile(hCom, SendBuff, BUFF_SIZE, &Bytes, NULL);//把16字节发送出去
|
||||
WriteFile(hCom, SendBuff, BUFF_SIZE, &Bytes, NULL);//把16字节发送出去
|
||||
UINT IsSuccess = 0, temp = 0;
|
||||
ReadData(temp,IsSuccess);
|
||||
IsSuccess = SendBuff[6];
|
||||
@@ -229,7 +229,7 @@ unsigned char HSI_Motion::ReadData(UINT &Input, UINT &Output)
|
||||
unsigned long Bytes = 0;
|
||||
PurgeComm(hCom, PURGE_TXCLEAR | PURGE_RXCLEAR);
|
||||
SetSendBuff(0, 0x07, 0, 0);
|
||||
ReadFile(hCom, SendBuff, BUFF_SIZE, &Bytes, NULL);//读返回的数据.读超时根据COMMTIMEOUTS to;变量设定
|
||||
ReadFile(hCom, SendBuff, BUFF_SIZE, &Bytes, NULL);//读返回的数据.读超时根据COMMTIMEOUTS to;变量设定
|
||||
Input = SendBuff[8];
|
||||
Input <<= 8;
|
||||
Input |= SendBuff[7];
|
||||
@@ -242,7 +242,7 @@ unsigned char HSI_Motion::ReadData(UINT &Input, UINT &Output)
|
||||
// sEvenProp.EventType = HSI_EVENT_ERROR;
|
||||
// sEvenProp.EventID = HSI_EVENT_MOTION;
|
||||
// sEvenProp.EventResponse = HSI_EVENT_RESPONSE_OK;
|
||||
// strcpy_s(sEvenProp.EventData, HSI_MaxStringLength, "校验失败!");
|
||||
// strcpy_s(sEvenProp.EventData, HSI_MaxStringLength, "校验失败!");
|
||||
// EventCallback(sEvenProp);
|
||||
// return 1;
|
||||
//}
|
||||
@@ -254,7 +254,7 @@ unsigned char HSI_Motion::ReadData(UINT &Input, UINT &Output)
|
||||
// sEvenProp.EventType = HSI_EVENT_ERROR;
|
||||
// sEvenProp.EventID = HSI_EVENT_MOTION;
|
||||
// sEvenProp.EventResponse = HSI_EVENT_RESPONSE_OK;
|
||||
// strcpy_s(sEvenProp.EventData, HSI_MaxStringLength, "读取数据失败!");
|
||||
// strcpy_s(sEvenProp.EventData, HSI_MaxStringLength, "读取数据失败!");
|
||||
// EventCallback(sEvenProp);
|
||||
// return 1;
|
||||
// }
|
||||
@@ -390,7 +390,7 @@ HSI_STATUS HSI_Motion::GetDIO(UINT IOChannel, UINT& _Status)
|
||||
{
|
||||
|
||||
}
|
||||
else if (IOChannel == HSI_MOTION_OUTPUT_CH1) //获取通用输出
|
||||
else if (IOChannel == HSI_MOTION_OUTPUT_CH1) //获取通用输出
|
||||
{
|
||||
|
||||
}
|
||||
@@ -414,7 +414,7 @@ HSI_STATUS HSI_Motion::SetDIO(UINT IOChannel, UINT _Status)
|
||||
auto rStatus = HSI_STATUS_NORMAL;
|
||||
if (g_pHSI_Motion)
|
||||
{
|
||||
if (IOChannel == HSI_MOTION_OUTPUT_CH3) //设置通用输出
|
||||
if (IOChannel == HSI_MOTION_OUTPUT_CH3) //设置通用输出
|
||||
{
|
||||
unsigned char rtn = SendData(_Status);
|
||||
if (rtn == 1)
|
||||
@@ -434,7 +434,7 @@ HSI_STATUS HSI_Motion::SetDIO(UINT IOChannel, UINT _Status)
|
||||
sEvenProp.EventType = HSI_EVENT_ERROR;
|
||||
sEvenProp.EventID = HSI_EVENT_MOTION;
|
||||
sEvenProp.EventResponse = HSI_EVENT_RESPONSE_OK;
|
||||
strcpy_s(sEvenProp.EventData, HSI_MaxStringLength, "发送数据失败!");
|
||||
strcpy_s(sEvenProp.EventData, HSI_MaxStringLength, "发送数据失败!");
|
||||
EventCallback(sEvenProp);
|
||||
rStatus = HSI_STATUS_FAILED;
|
||||
}
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
// HSI_PORT_1616IO.cpp : 定义 DLL 应用程序的导出函数。
|
||||
// HSI_PORT_1616IO.cpp : 定义 DLL 应用程序的导出函数。
|
||||
//
|
||||
|
||||
#include "stdafx.h"
|
||||
|
||||
@@ -1,13 +1,13 @@
|
||||
// HSI_PORT_1616IO.h : 定义 DLL 应用程序的导出函数。
|
||||
// HSI_PORT_1616IO.h : 定义 DLL 应用程序的导出函数。
|
||||
//
|
||||
|
||||
#pragma once
|
||||
|
||||
#ifndef __AFXWIN_H__
|
||||
#error "在包含此文件之前包含“stdafx.h”以生成 PCH 文件"
|
||||
#error "在包含此文件之前包含“stdafx.h”以生成 PCH 文件"
|
||||
#endif
|
||||
|
||||
#include "resource.h" // 主符号
|
||||
#include "resource.h" // 主符号
|
||||
#include <cstring>
|
||||
|
||||
|
||||
|
||||
+5
-5
@@ -1,4 +1,4 @@
|
||||
// HSI_Illumination.cpp : 定义 DLL 的初始化例程。
|
||||
// HSI_Illumination.cpp : 定义 DLL 的初始化例程。
|
||||
//
|
||||
#include "stdafx.h"
|
||||
#include "..\..\..\SevenOcean\CMMIO_SERIAL.h"
|
||||
@@ -145,7 +145,7 @@ HSI_STATUS HSI_Illumination::Startup(HWND _hWnd, bool _bOfflineOnly)
|
||||
sEvenProp.EventID = HSI_EVENT_MOTION;
|
||||
sEvenProp.EventResponse = HSI_EVENT_RESPONSE_OK;
|
||||
_itoa_s(m_iSerialComPortA, messageAlarm, 30, 10);
|
||||
strcat_s(messageAlarm, 100, "号端口MCU串口控制器打开失败");
|
||||
strcat_s(messageAlarm, 100, "号端口MCU串口控制器打开失败");
|
||||
strcpy_s(sEvenProp.EventData, HSI_MaxStringLength, messageAlarm);
|
||||
EventCallback(sEvenProp);
|
||||
rStatus = HSI_STATUS_FAILED;
|
||||
@@ -167,7 +167,7 @@ HSI_STATUS HSI_Illumination::Startup(HWND _hWnd, bool _bOfflineOnly)
|
||||
sEvenProp.EventID = HSI_EVENT_MOTION;
|
||||
sEvenProp.EventResponse = HSI_EVENT_RESPONSE_OK;
|
||||
_itoa_s(m_iSerialComPortB, messageAlarm, 30, 10);
|
||||
strcat_s(messageAlarm, 100, "号端口MCU串口控制器打开失败");
|
||||
strcat_s(messageAlarm, 100, "号端口MCU串口控制器打开失败");
|
||||
strcpy_s(sEvenProp.EventData, HSI_MaxStringLength, messageAlarm);
|
||||
EventCallback(sEvenProp);
|
||||
rStatus = HSI_STATUS_FAILED;
|
||||
@@ -440,7 +440,7 @@ BOOL HSI_Illumination::SetLampState_So7II(int _NumLamps, int(*_LampsType)[HSI_IL
|
||||
{
|
||||
for (int j = 0; j < 8; j++)
|
||||
{
|
||||
//共26盏灯,到[2, 66]
|
||||
//共26盏灯,到[2, 66]
|
||||
if (i == 4 && j >= 2)
|
||||
{
|
||||
break;
|
||||
@@ -810,7 +810,7 @@ VOID HSI_Illumination::EventCallback(sHSIEventProperties& sEventProp)
|
||||
}
|
||||
|
||||
|
||||
//========================光源控制器USB控制==================================
|
||||
//========================光源控制器USB控制==================================
|
||||
//===========================================================================
|
||||
//bool HSI_Illumination::FindTheHID()
|
||||
//{
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
// HSI_Motion.cpp : 定义 DLL 的初始化例程。
|
||||
// HSI_Motion.cpp : 定义 DLL 的初始化例程。
|
||||
//
|
||||
#include "stdafx.h"
|
||||
#include "..\..\..\..\Hsi\HSI.h"
|
||||
@@ -44,7 +44,7 @@ HSI_Motion::HSI_Motion()
|
||||
g_IsClose = false;
|
||||
m_Result = 0;
|
||||
CTime tm = CTime::GetCurrentTime();
|
||||
CString csTime = tm.Format("%Y-%m-%d");//显示年月日
|
||||
CString csTime = tm.Format("%Y-%m-%d");//显示年月日
|
||||
CString dir = L"\\Log\\" + csTime += L".LLC.Log";
|
||||
g_pLogger = new CLogger(dir);
|
||||
GetAppPath(m_AppPath);
|
||||
@@ -76,7 +76,7 @@ HSI_Motion::HSI_Motion()
|
||||
m_cSendData[8] = 0;//17-24
|
||||
m_cSendData[9] = 0xff;//9-16
|
||||
m_cSendData[10] = 0xff;//1-8
|
||||
m_cSendData[11] = 0x00;//25-32 电平,暂时不用
|
||||
m_cSendData[11] = 0x00;//25-32 电平,暂时不用
|
||||
m_cSendData[12] = 0x00;//17-24
|
||||
//m_cSendData[13] = 0xff;//9-16
|
||||
//m_cSendData[14] = 0xff;//1-8
|
||||
@@ -116,7 +116,7 @@ HSI_STATUS HSI_Motion::Startup(HWND _hWnd, bool _bOfflineOnly)
|
||||
g_pLogger->SendAndFlushWithTime(L"[Startup] Connected\n");
|
||||
return HSI_STATUS_NORMAL;
|
||||
}
|
||||
//读取配置文件LLC_Motion和LLC_Config
|
||||
//读取配置文件LLC_Motion和LLC_Config
|
||||
CString FileMotionName(_T(""));
|
||||
FileMotionName = m_AppPath + _T("\\Config\\LLC_Motion.ini");
|
||||
Load_Motion_Inifile(FileMotionName);
|
||||
@@ -132,7 +132,7 @@ HSI_STATUS HSI_Motion::Startup(HWND _hWnd, bool _bOfflineOnly)
|
||||
sEvenProp.EventType = HSI_EVENT_ERROR;
|
||||
sEvenProp.EventID = HSI_EVENT_MOTION;
|
||||
sEvenProp.EventResponse = HSI_EVENT_RESPONSE_OK;
|
||||
strcpy_s(sEvenProp.EventData, HSI_MaxStringLength, "LLC控制器 USB模式打开失败");
|
||||
strcpy_s(sEvenProp.EventData, HSI_MaxStringLength, "LLC控制器 USB模式打开失败");
|
||||
EventCallback(sEvenProp);
|
||||
rStatus = HSI_STATUS_FAILED;
|
||||
}
|
||||
@@ -140,7 +140,7 @@ HSI_STATUS HSI_Motion::Startup(HWND _hWnd, bool _bOfflineOnly)
|
||||
{
|
||||
if (m_ResetTime != 0)
|
||||
{
|
||||
//发送复位LLC控制器的指令
|
||||
//发送复位LLC控制器的指令
|
||||
byte cSendData[63] = { 0 };
|
||||
cSendData[0] = 0x01;
|
||||
cSendData[1] = 0x02;
|
||||
@@ -159,7 +159,7 @@ HSI_STATUS HSI_Motion::Startup(HWND _hWnd, bool _bOfflineOnly)
|
||||
sEvenProp.EventType = HSI_EVENT_ERROR;
|
||||
sEvenProp.EventID = HSI_EVENT_MOTION;
|
||||
sEvenProp.EventResponse = HSI_EVENT_RESPONSE_OK;
|
||||
strcpy_s(sEvenProp.EventData, HSI_MaxStringLength, "LLC控制器 USB模式重新打开失败");
|
||||
strcpy_s(sEvenProp.EventData, HSI_MaxStringLength, "LLC控制器 USB模式重新打开失败");
|
||||
EventCallback(sEvenProp);
|
||||
rStatus = HSI_STATUS_FAILED;
|
||||
}
|
||||
@@ -283,7 +283,7 @@ HSI_STATUS HSI_Motion::Jog(UINT AxisTypes, double Speed)
|
||||
// sEvenProp.EventType = HSI_EVENT_ERROR;
|
||||
// sEvenProp.EventID = HSI_EVENT_MOTION;
|
||||
// sEvenProp.EventResponse = HSI_EVENT_RESPONSE_OK;
|
||||
// strcpy_s(sEvenProp.EventData, HSI_MaxStringLength, "LLC控制器 USB模式打开失败");
|
||||
// strcpy_s(sEvenProp.EventData, HSI_MaxStringLength, "LLC控制器 USB模式打开失败");
|
||||
// EventCallback(sEvenProp);
|
||||
// }
|
||||
// else
|
||||
@@ -325,7 +325,7 @@ HSI_STATUS HSI_Motion::GetPositionXyz(UINT AxisTypes, double &PositionX, double
|
||||
auto rStatus = HSI_STATUS_NORMAL;
|
||||
UNREFERENCED_PARAMETER(AxisTypes);
|
||||
UNREFERENCED_PARAMETER(Time);
|
||||
//读取3个轴的位置
|
||||
//读取3个轴的位置
|
||||
CString tempStr;
|
||||
if (g_pHSI_Motion)
|
||||
{
|
||||
@@ -389,7 +389,7 @@ HSI_STATUS HSI_Motion::Load_Motion_Inifile(CString MotionIniFile)
|
||||
CString csAppPath = MotionIniFile;
|
||||
USES_CONVERSION;
|
||||
CString temp("");
|
||||
//判断Log目录是否存在,不存在就创建
|
||||
//判断Log目录是否存在,不存在就创建
|
||||
if (CreateDirectory(m_AppPath + "\\Log", NULL))
|
||||
{
|
||||
g_pLogger->SendAndFlushWithTime(L"[Load_Motion_Inifile] Create Log Directory\n");
|
||||
@@ -402,7 +402,7 @@ HSI_STATUS HSI_Motion::Load_Motion_Inifile(CString MotionIniFile)
|
||||
sEvenProp.EventType = HSI_EVENT_ERROR;
|
||||
sEvenProp.EventID = HSI_EVENT_MOTION;
|
||||
sEvenProp.EventResponse = HSI_EVENT_RESPONSE_OK;
|
||||
strcpy_s(sEvenProp.EventData, HSI_MaxStringLength, "LLC_Motion.ini文件不存在!");
|
||||
strcpy_s(sEvenProp.EventData, HSI_MaxStringLength, "LLC_Motion.ini文件不存在!");
|
||||
EventCallback(sEvenProp);
|
||||
return HSI_STATUS_FAILED;
|
||||
}
|
||||
@@ -440,7 +440,7 @@ HSI_STATUS HSI_Motion::Load_Config_Inifile(CString ConfigIniFile)
|
||||
sEvenProp.EventType = HSI_EVENT_ERROR;
|
||||
sEvenProp.EventID = HSI_EVENT_MOTION;
|
||||
sEvenProp.EventResponse = HSI_EVENT_RESPONSE_OK;
|
||||
strcpy_s(sEvenProp.EventData, HSI_MaxStringLength, "LLC_Config.ini文件不存在!");
|
||||
strcpy_s(sEvenProp.EventData, HSI_MaxStringLength, "LLC_Config.ini文件不存在!");
|
||||
EventCallback(sEvenProp);
|
||||
return HSI_STATUS_FAILED;
|
||||
}
|
||||
@@ -491,13 +491,13 @@ void HSI_Motion::SendMsgMotionFinished()
|
||||
void HSI_Motion::UpdateMotionState()
|
||||
{
|
||||
BOOL bReturn = false;
|
||||
//m_cReceiveData[7]表示输入输出的状态
|
||||
//m_cReceiveData[1]输入9-16
|
||||
//m_cReceiveData[2]输入1-8
|
||||
//m_cReceiveData[3]输入25-32
|
||||
//m_cReceiveData[4]输入17-24
|
||||
//m_cReceiveData[5]输入9-16
|
||||
//m_cReceiveData[6]输入1-8
|
||||
//m_cReceiveData[7]表示输入输出的状态
|
||||
//m_cReceiveData[1]输入9-16
|
||||
//m_cReceiveData[2]输入1-8
|
||||
//m_cReceiveData[3]输入25-32
|
||||
//m_cReceiveData[4]输入17-24
|
||||
//m_cReceiveData[5]输入9-16
|
||||
//m_cReceiveData[6]输入1-8
|
||||
if (g_pHSI_Motion)
|
||||
{
|
||||
while (m_bSTM32UsbFlag)
|
||||
@@ -545,7 +545,7 @@ void HSI_Motion::UpdateMotionStateIO()
|
||||
int StartFlag = 0;
|
||||
while (m_bSTM32UsbFlag)
|
||||
{
|
||||
//1个脚踏开关
|
||||
//1个脚踏开关
|
||||
if (m_IOStatusEnabled)
|
||||
{
|
||||
if (m_IsStartInput == 1)
|
||||
@@ -592,7 +592,7 @@ void HSI_Motion::DoEvents()
|
||||
sEvenProp.EventType = HSI_EVENT_ERROR;
|
||||
sEvenProp.EventID = HSI_EVENT_MOTION;
|
||||
sEvenProp.EventResponse = HSI_EVENT_RESPONSE_OK;
|
||||
strcpy_s(sEvenProp.EventData, HSI_MaxStringLength, "DoEvents_异常");
|
||||
strcpy_s(sEvenProp.EventData, HSI_MaxStringLength, "DoEvents_异常");
|
||||
EventCallback(sEvenProp);
|
||||
}
|
||||
if (g_IsClose)
|
||||
@@ -630,7 +630,7 @@ HSI_STATUS HSI_Motion::GetDIO(UINT IOChannel, UINT& _Status)
|
||||
auto rStatus = HSI_STATUS_NORMAL;
|
||||
if (g_pHSI_Motion)
|
||||
{
|
||||
if (IOChannel == HSI_MOTION_OUTPUT_CH1) //获取通用输出
|
||||
if (IOChannel == HSI_MOTION_OUTPUT_CH1) //获取通用输出
|
||||
{
|
||||
if (m_cReceiveData[7] == 7)
|
||||
{
|
||||
@@ -665,7 +665,7 @@ HSI_STATUS HSI_Motion::SetDIO(UINT IOChannel, UINT _Status)
|
||||
short rtn(0);
|
||||
if (g_pHSI_Motion)
|
||||
{
|
||||
if (IOChannel == HSI_MOTION_OUTPUT_CH1) //设置通用输出
|
||||
if (IOChannel == HSI_MOTION_OUTPUT_CH1) //设置通用输出
|
||||
{
|
||||
//g_pLogger->SendAndFlushWithTime(L"[SetDIO] OUTPUT_CH1 _Status = %d\n", _Status);
|
||||
m_cSendData[13] = (_Status >> 8);
|
||||
@@ -697,7 +697,7 @@ HSI_STATUS HSI_Motion::Shutdown()
|
||||
if (m_bSTM32UsbFlag == true)
|
||||
{
|
||||
AbortMotion();
|
||||
Sleep(10);//延时10ms关闭灯光
|
||||
Sleep(10);//延时10ms关闭灯光
|
||||
byte cSendData[63] = { 0 };
|
||||
for (int i = 7; i < 63; i++)
|
||||
{
|
||||
@@ -726,7 +726,7 @@ HSI_STATUS HSI_Motion::DCCScanSetData(UINT AxisTypes, HSI_SCAN_MOTION_TYPE eType
|
||||
auto rStatus = HSI_STATUS_NORMAL;
|
||||
if (g_pHSI_Motion)
|
||||
{
|
||||
//触发的位置为相对位置,用法一般是移动到起点位置,再开始设置触发位置(相对位置),最终设置终点位置
|
||||
//触发的位置为相对位置,用法一般是移动到起点位置,再开始设置触发位置(相对位置),最终设置终点位置
|
||||
g_pLogger->SendAndFlushWithTime(L"[DCCScanSetData] In\n");
|
||||
|
||||
}
|
||||
@@ -1072,7 +1072,7 @@ double HSI_Motion::LimitOver(UINT AxisTypes, double &LimitPos)
|
||||
{
|
||||
switch (AxisNumber)
|
||||
{
|
||||
case 1: //轴1
|
||||
case 1: //轴1
|
||||
{
|
||||
if (LimitPos > 0)
|
||||
{
|
||||
@@ -1334,7 +1334,7 @@ HSI_STATUS HSI_Motion::SetAccelerationEx(UINT AxisTypes, double Accel)
|
||||
|
||||
|
||||
|
||||
//========================光源控制器USB控制==================================
|
||||
//========================光源控制器USB控制==================================
|
||||
//===========================================================================
|
||||
bool HSI_Motion::FindTheHID()
|
||||
{
|
||||
@@ -1494,7 +1494,7 @@ BOOL HSI_Motion::WriteUsbReport(byte SendData[])
|
||||
// sEvenProp.EventType = HSI_EVENT_ERROR;
|
||||
// sEvenProp.EventID = HSI_EVENT_MOTION;
|
||||
// sEvenProp.EventResponse = HSI_EVENT_RESPONSE_OK;
|
||||
// strcpy_s(sEvenProp.EventData, HSI_MaxStringLength, "LLC控制器没有连接");
|
||||
// strcpy_s(sEvenProp.EventData, HSI_MaxStringLength, "LLC控制器没有连接");
|
||||
// EventCallback(sEvenProp);
|
||||
//}
|
||||
}
|
||||
|
||||
@@ -16,7 +16,7 @@
|
||||
#define MAX_BUFF_SIZE 0x200
|
||||
const double SCALE_UNITS = 1000.0;
|
||||
static CLogger* g_pLogger;
|
||||
static bool g_IsClose;//用于DoEvents()的退出,而不异常
|
||||
static bool g_IsClose;//用于DoEvents()的退出,而不异常
|
||||
|
||||
enum E_SO7_MOTION_TYPE
|
||||
{
|
||||
@@ -27,9 +27,9 @@ enum E_SO7_MOTION_TYPE
|
||||
};
|
||||
enum E_GTS_HOME_STATUS
|
||||
{
|
||||
E_GTS_HOME_NONE,//0表示从未回过回原点
|
||||
E_GTS_HOME_ING,//1表示正在回原点
|
||||
E_GTS_HOME_FINISHED,//2表示已经回过原点
|
||||
E_GTS_HOME_NONE,//0表示从未回过回原点
|
||||
E_GTS_HOME_ING,//1表示正在回原点
|
||||
E_GTS_HOME_FINISHED,//2表示已经回过原点
|
||||
};
|
||||
class HSI_Motion : public HSI
|
||||
{
|
||||
@@ -102,16 +102,16 @@ public:
|
||||
static HANDLE m_Thread_Id;
|
||||
static HANDLE m_Thread_Mutex;
|
||||
static HANDLE m_hTriggerEvent;
|
||||
//用于IO发消息的线程
|
||||
//用于IO发消息的线程
|
||||
static int m_Thread_StateIO;
|
||||
static HANDLE m_Thread_IdIO;
|
||||
static HANDLE m_Thread_MutexIO;
|
||||
static HANDLE m_hTriggerEventIO;
|
||||
static HANDLE m_RW_IO_Mutex;
|
||||
|
||||
int m_LogIsOpen[5];//是否打开记录,0为打开,非0为关
|
||||
int m_LogIsOpen[5];//是否打开记录,0为打开,非0为关
|
||||
|
||||
double m_Resolution[5];//从1开始,0不用,共8个轴
|
||||
double m_Resolution[5];//从1开始,0不用,共8个轴
|
||||
double m_P_Work_Limit[5];
|
||||
double m_N_Work_Limit[5];
|
||||
|
||||
@@ -125,40 +125,40 @@ public:
|
||||
double m_SetPotion_Speed[9];
|
||||
double m_SetPotion_Acc[9];
|
||||
double m_SetPotion_Dec[9];
|
||||
double m_PositionA = 0.0;//第四轴的地位位置
|
||||
double m_PositionA = 0.0;//第四轴的地位位置
|
||||
|
||||
double m_Jog_Speed[5]; //表示5个档位
|
||||
double m_Jog_Speed[5]; //表示5个档位
|
||||
double m_Jog_Acc[5];
|
||||
double m_Jog_Dec[5];
|
||||
|
||||
int m_IsComPortA = 0;//是否打开第一个串口,1为打开,0为关闭,默认0
|
||||
int m_IsComPortB = 0;//是否打开第二个串口,1为打开,0为关闭,默认0
|
||||
int m_ComPortA = 3;//用于打开灯光的串口A
|
||||
int m_ComPortB = 4;//用于打开灯光的串口B
|
||||
int m_ComPortALed[5];//对应输出的4个接口A
|
||||
int m_ComPortBLed[5];//对应输出的4个接口B
|
||||
int m_ComPortCppWpf;//启用c++调用灯光为0,还是wpf直接调用为1,默认0
|
||||
int m_IsSTM32Usb = 0;//启用STM32控制器时是否使用USB,默认0
|
||||
int m_IsComPortA = 0;//是否打开第一个串口,1为打开,0为关闭,默认0
|
||||
int m_IsComPortB = 0;//是否打开第二个串口,1为打开,0为关闭,默认0
|
||||
int m_ComPortA = 3;//用于打开灯光的串口A
|
||||
int m_ComPortB = 4;//用于打开灯光的串口B
|
||||
int m_ComPortALed[5];//对应输出的4个接口A
|
||||
int m_ComPortBLed[5];//对应输出的4个接口B
|
||||
int m_ComPortCppWpf;//启用c++调用灯光为0,还是wpf直接调用为1,默认0
|
||||
int m_IsSTM32Usb = 0;//启用STM32控制器时是否使用USB,默认0
|
||||
|
||||
int m_IsIOFuntion=0;//是否启动IO功能,1为打开,0为关闭
|
||||
int m_IsStartInput = 0;//是否启用脚踏开关功能,1为启用,0为关闭,默认0
|
||||
UINT m_StartInputPort = 1;//外部输入按钮启动程序
|
||||
int m_IsIOFuntion=0;//是否启动IO功能,1为打开,0为关闭
|
||||
int m_IsStartInput = 0;//是否启用脚踏开关功能,1为启用,0为关闭,默认0
|
||||
UINT m_StartInputPort = 1;//外部输入按钮启动程序
|
||||
|
||||
int m_ResetTime = 2000;//每次启动LLC控制器时的reset复位时间(ms),时间太短会打开失败
|
||||
int m_ResetTime = 2000;//每次启动LLC控制器时的reset复位时间(ms),时间太短会打开失败
|
||||
|
||||
//MST软件运行标志,trueMST软件已经启动,falseMST软件停止
|
||||
//MST软件运行标志,trueMST软件已经启动,falseMST软件停止
|
||||
bool m_MSTRunFlag = false;
|
||||
CString m_AppPath;
|
||||
int m_Result;
|
||||
|
||||
static unsigned __stdcall m_Thread(LPVOID pThis);
|
||||
//用于IO发消息的线程
|
||||
//用于IO发消息的线程
|
||||
static unsigned __stdcall m_ThreadIO(LPVOID pThis);
|
||||
static unsigned __stdcall m_ThreadStep(LPVOID pThis);
|
||||
double ScaleToMM(long lCount, double dResolution);
|
||||
long MMtoScale(double lDistanceMM, double dResolution);
|
||||
|
||||
//STM32 usb控制
|
||||
//STM32 usb控制
|
||||
bool m_bSTM32UsbFlag;
|
||||
HANDLE m_DeviceHandle;
|
||||
HANDLE m_hEventObject;
|
||||
@@ -193,12 +193,12 @@ public:
|
||||
private:
|
||||
void CreateThread();
|
||||
void CloseThread();
|
||||
//用于IO发消息的线程
|
||||
//用于IO发消息的线程
|
||||
void CreateThreadIO();
|
||||
void CloseThreadIO();
|
||||
void UpdateMotionState();
|
||||
void UpdateMotionStateEx();
|
||||
void UpdateMotionStateIO();//IO发消息使用
|
||||
void UpdateMotionStateIO();//IO发消息使用
|
||||
|
||||
void SendMsgMotionFinished();
|
||||
VOID EventCallback(sHSIEventProperties& sEventProp);
|
||||
|
||||
+1
-1
@@ -1,4 +1,4 @@
|
||||
// HSI_SEVENOCEAN_LLC.cpp : 定义 DLL 应用程序的导出函数。
|
||||
// HSI_SEVENOCEAN_LLC.cpp : 定义 DLL 应用程序的导出函数。
|
||||
//
|
||||
|
||||
#include "stdafx.h"
|
||||
|
||||
+2
-2
@@ -1,9 +1,9 @@
|
||||
;HSI_SEVENOCEAN_LLC.def : 声明 DLL 的模块参数。
|
||||
;HSI_SEVENOCEAN_LLC.def : 声明 DLL 的模块参数。
|
||||
|
||||
LIBRARY "HSI"
|
||||
|
||||
EXPORTS
|
||||
;此处可以是显式导出
|
||||
;此处可以是显式导出
|
||||
|
||||
HSI_STARTUP
|
||||
HSI_GET_INTERFACE_VERSION
|
||||
|
||||
+2
-2
@@ -1,10 +1,10 @@
|
||||
// HSI_SEVENOCEAN_LLC.h : HSI_SEVENOCEAN_LLC DLL 的主头文件
|
||||
// HSI_SEVENOCEAN_LLC.h : HSI_SEVENOCEAN_LLC DLL 的主头文件
|
||||
//
|
||||
|
||||
#pragma once
|
||||
|
||||
|
||||
#include "resource.h" // 主符号
|
||||
#include "resource.h" // 主符号
|
||||
#include <cstring>
|
||||
|
||||
|
||||
|
||||
+1
-1
@@ -1,4 +1,4 @@
|
||||
// MachineInterfaceDll.cpp : 定义 DLL 应用程序的导出函数。
|
||||
// MachineInterfaceDll.cpp : 定义 DLL 应用程序的导出函数。
|
||||
//
|
||||
|
||||
#include "stdafx.h"
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
// stdafx.cpp : 只包括标准包含文件的源文件
|
||||
// MachineInterfaceDll.pch 将作为预编译头
|
||||
// stdafx.obj 将包含预编译类型信息
|
||||
// stdafx.cpp : 只包括标准包含文件的源文件
|
||||
// MachineInterfaceDll.pch 将作为预编译头
|
||||
// stdafx.obj 将包含预编译类型信息
|
||||
|
||||
#include "stdafx.h"
|
||||
|
||||
// TODO: 在 STDAFX.H 中
|
||||
// 引用任何所需的附加头文件,而不是在此文件中引用
|
||||
// TODO: 在 STDAFX.H 中
|
||||
// 引用任何所需的附加头文件,而不是在此文件中引用
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
#pragma once
|
||||
|
||||
// 包括 SDKDDKVer.h 将定义可用的最高版本的 Windows 平台。
|
||||
// 包括 SDKDDKVer.h 将定义可用的最高版本的 Windows 平台。
|
||||
|
||||
// 如果要为以前的 Windows 平台生成应用程序,请包括 WinSDKVer.h,并将
|
||||
// WIN32_WINNT 宏设置为要支持的平台,然后再包括 SDKDDKVer.h。
|
||||
// 如果要为以前的 Windows 平台生成应用程序,请包括 WinSDKVer.h,并将
|
||||
// WIN32_WINNT 宏设置为要支持的平台,然后再包括 SDKDDKVer.h。
|
||||
|
||||
#include <SDKDDKVer.h>
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
// RobotControlDll.cpp : 定义 DLL 的初始化例程。
|
||||
// RobotControlDll.cpp : 定义 DLL 的初始化例程。
|
||||
//
|
||||
|
||||
#include "stdafx.h"
|
||||
@@ -10,28 +10,28 @@
|
||||
#endif
|
||||
|
||||
//
|
||||
//TODO: 如果此 DLL 相对于 MFC DLL 是动态链接的,
|
||||
// 则从此 DLL 导出的任何调入
|
||||
// MFC 的函数必须将 AFX_MANAGE_STATE 宏添加到
|
||||
// 该函数的最前面。
|
||||
//TODO: 如果此 DLL 相对于 MFC DLL 是动态链接的,
|
||||
// 则从此 DLL 导出的任何调入
|
||||
// MFC 的函数必须将 AFX_MANAGE_STATE 宏添加到
|
||||
// 该函数的最前面。
|
||||
//
|
||||
// 例如:
|
||||
// 例如:
|
||||
//
|
||||
// extern "C" BOOL PASCAL EXPORT ExportedFunction()
|
||||
// {
|
||||
// AFX_MANAGE_STATE(AfxGetStaticModuleState());
|
||||
// // 此处为普通函数体
|
||||
// // 此处为普通函数体
|
||||
// }
|
||||
//
|
||||
// 此宏先于任何 MFC 调用
|
||||
// 出现在每个函数中十分重要。这意味着
|
||||
// 它必须作为函数中的第一个语句
|
||||
// 出现,甚至先于所有对象变量声明,
|
||||
// 这是因为它们的构造函数可能生成 MFC
|
||||
// DLL 调用。
|
||||
// 此宏先于任何 MFC 调用
|
||||
// 出现在每个函数中十分重要。这意味着
|
||||
// 它必须作为函数中的第一个语句
|
||||
// 出现,甚至先于所有对象变量声明,
|
||||
// 这是因为它们的构造函数可能生成 MFC
|
||||
// DLL 调用。
|
||||
//
|
||||
// 有关其他详细信息,
|
||||
// 请参阅 MFC 技术说明 33 和 58。
|
||||
// 有关其他详细信息,
|
||||
// 请参阅 MFC 技术说明 33 和 58。
|
||||
//
|
||||
|
||||
// CRobotControlDllApp
|
||||
@@ -42,21 +42,21 @@ BEGIN_MESSAGE_MAP(CRobotControlDllApp, CWinApp)
|
||||
END_MESSAGE_MAP()
|
||||
|
||||
|
||||
// CRobotControlDllApp 构造
|
||||
// CRobotControlDllApp 构造
|
||||
|
||||
CRobotControlDllApp::CRobotControlDllApp()
|
||||
{
|
||||
// TODO: 在此处添加构造代码,
|
||||
// 将所有重要的初始化放置在 InitInstance 中
|
||||
// TODO: 在此处添加构造代码,
|
||||
// 将所有重要的初始化放置在 InitInstance 中
|
||||
}
|
||||
|
||||
|
||||
// 唯一的一个 CRobotControlDllApp 对象
|
||||
// 唯一的一个 CRobotControlDllApp 对象
|
||||
|
||||
CRobotControlDllApp theApp;
|
||||
|
||||
|
||||
// CRobotControlDllApp 初始化
|
||||
// CRobotControlDllApp 初始化
|
||||
|
||||
BOOL CRobotControlDllApp::InitInstance()
|
||||
{
|
||||
@@ -86,6 +86,6 @@ BOOL CRobotControlDllApp::InitInstance()
|
||||
|
||||
BOOL CRobotControlDllApp::OnCreateAggregates()
|
||||
{
|
||||
// TODO: 在此添加专用代码和/或调用基类
|
||||
// TODO: 在此添加专用代码和/或调用基类
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
@@ -1,17 +1,17 @@
|
||||
// RobotControlDll.h : RobotControlDll DLL 的主头文件
|
||||
// RobotControlDll.h : RobotControlDll DLL 的主头文件
|
||||
//
|
||||
|
||||
#pragma once
|
||||
|
||||
#ifndef __AFXWIN_H__
|
||||
#error "在包含此文件之前包含“stdafx.h”以生成 PCH 文件"
|
||||
#error "在包含此文件之前包含“stdafx.h”以生成 PCH 文件"
|
||||
#endif
|
||||
|
||||
#include "resource.h" // 主符号
|
||||
#include "resource.h" // 主符号
|
||||
|
||||
|
||||
// CRobotControlDllApp
|
||||
// 有关此类实现的信息,请参阅 RobotControlDll.cpp
|
||||
// 有关此类实现的信息,请参阅 RobotControlDll.cpp
|
||||
//
|
||||
|
||||
class CRobotControlDllApp : public CWinApp
|
||||
@@ -19,7 +19,7 @@ class CRobotControlDllApp : public CWinApp
|
||||
public:
|
||||
CRobotControlDllApp();
|
||||
|
||||
// 重写
|
||||
// 重写
|
||||
public:
|
||||
virtual BOOL InitInstance();
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
// Robot_conect.cpp : 实现文件
|
||||
// Robot_conect.cpp : 实现文件
|
||||
//
|
||||
|
||||
#include "stdafx.h"
|
||||
@@ -7,7 +7,7 @@
|
||||
#include "afxdialogex.h"
|
||||
|
||||
|
||||
// Robot_conect 对话框
|
||||
// Robot_conect 对话框
|
||||
|
||||
IMPLEMENT_DYNAMIC(Robot_conect, CDialogEx)
|
||||
|
||||
@@ -35,12 +35,12 @@ BEGIN_MESSAGE_MAP(Robot_conect, CDialogEx)
|
||||
END_MESSAGE_MAP()
|
||||
|
||||
|
||||
// Robot_conect 消息处理程序
|
||||
// Robot_conect 消息处理程序
|
||||
|
||||
|
||||
void Robot_conect::OnCbnSelchangeComboRobotId()
|
||||
{
|
||||
// TODO: 在此添加控件通知处理程序代码
|
||||
// TODO: 在此添加控件通知处理程序代码
|
||||
}
|
||||
|
||||
|
||||
@@ -49,13 +49,13 @@ BOOL Robot_conect::OnInitDialog()
|
||||
|
||||
CDialogEx::OnInitDialog();
|
||||
|
||||
// TODO: 在此添加额外的初始化
|
||||
// TODO: 在此添加额外的初始化
|
||||
// Get the Robot program list
|
||||
|
||||
// m_nRobotID
|
||||
|
||||
return TRUE; // return TRUE unless you set the focus to a control
|
||||
// 异常: OCX 属性页应返回 FALSE
|
||||
// 异常: OCX 属性页应返回 FALSE
|
||||
}
|
||||
|
||||
|
||||
@@ -68,7 +68,7 @@ void Robot_conect::OnStart()
|
||||
long status;
|
||||
CString tmp;
|
||||
int i;
|
||||
m_CMelfarxmctrl1.ServerStart();//启动Robocom.exe
|
||||
m_CMelfarxmctrl1.ServerStart();//启动Robocom.exe
|
||||
SleepEx(2000,TRUE);
|
||||
data = NULL;
|
||||
m_CMelfarxmctrl1.GetRoboComSetting(&rcnt,&data);
|
||||
@@ -87,7 +87,7 @@ void Robot_conect::OnStart()
|
||||
tmp2 += _T(" : ");
|
||||
tmp2 += data;
|
||||
m_cCombo.AddString(tmp2);
|
||||
//获取程序列表
|
||||
//获取程序列表
|
||||
}
|
||||
m_cCombo.SetCurSel(0);
|
||||
|
||||
@@ -196,7 +196,7 @@ BEGIN_EVENTSINK_MAP(Robot_conect, CDialogEx)
|
||||
|
||||
void Robot_conect::MsgRecvEventMelfarxmctrl1()
|
||||
{
|
||||
// TODO: 在此处添加消息处理程序代码
|
||||
// TODO: 在此处添加消息处理程序代码
|
||||
long msgcnt,cnt;
|
||||
long i,nRecvRobot,nRecvID,nRecvStatus,nRecvErr;
|
||||
BSTR data;
|
||||
@@ -215,7 +215,7 @@ void Robot_conect::MsgRecvEventMelfarxmctrl1()
|
||||
{
|
||||
case 106:
|
||||
break;
|
||||
//=========读取错误码==============
|
||||
//=========读取错误码==============
|
||||
case 203:
|
||||
data = NULL;
|
||||
m_CMelfarxmctrl1.GetOneDataCPP(0,tmp,&data);
|
||||
@@ -237,7 +237,7 @@ void Robot_conect::MsgRecvEventMelfarxmctrl1()
|
||||
::SysFreeString(data);
|
||||
}
|
||||
break;
|
||||
//============读取位置信息=============
|
||||
//============读取位置信息=============
|
||||
case 235:
|
||||
m_position.Empty();
|
||||
for(i=0; i<8; i++)
|
||||
|
||||
@@ -2,21 +2,21 @@
|
||||
#include "melfarxmctrl1.h"
|
||||
|
||||
|
||||
// Robot_conect 对话框
|
||||
// Robot_conect 对话框
|
||||
|
||||
class Robot_conect : public CDialogEx
|
||||
{
|
||||
DECLARE_DYNAMIC(Robot_conect)
|
||||
|
||||
public:
|
||||
Robot_conect(CWnd* pParent = NULL); // 标准构造函数
|
||||
Robot_conect(CWnd* pParent = NULL); // 标准构造函数
|
||||
virtual ~Robot_conect();
|
||||
|
||||
// 对话框数据
|
||||
// 对话框数据
|
||||
enum { IDD = IDD_DIALOG1 };
|
||||
|
||||
protected:
|
||||
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV 支持
|
||||
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV 支持
|
||||
|
||||
DECLARE_MESSAGE_MAP()
|
||||
public:
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
// 计算机生成了由 Microsoft Visual C++ 创建的 IDispatch 包装类
|
||||
// 计算机生成了由 Microsoft Visual C++ 创建的 IDispatch 包装类
|
||||
|
||||
// 注意: 不要修改此文件的内容。如果此类由
|
||||
// Microsoft Visual C++ 重新生成,您的修改将被覆盖。
|
||||
// 注意: 不要修改此文件的内容。如果此类由
|
||||
// Microsoft Visual C++ 重新生成,您的修改将被覆盖。
|
||||
|
||||
|
||||
#include "stdafx.h"
|
||||
@@ -13,7 +13,7 @@
|
||||
IMPLEMENT_DYNCREATE(CMelfarxmctrl1, CWnd)
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
// CMelfarxmctrl1 属性
|
||||
// CMelfarxmctrl1 属性
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
// CMelfarxmctrl1 操作
|
||||
// CMelfarxmctrl1 操作
|
||||
|
||||
@@ -1,12 +1,12 @@
|
||||
#pragma once
|
||||
|
||||
// 计算机生成了由 Microsoft Visual C++ 创建的 IDispatch 包装类
|
||||
// 计算机生成了由 Microsoft Visual C++ 创建的 IDispatch 包装类
|
||||
|
||||
// 注意: 不要修改此文件的内容。如果此类由
|
||||
// Microsoft Visual C++ 重新生成,您的修改将被覆盖。
|
||||
// 注意: 不要修改此文件的内容。如果此类由
|
||||
// Microsoft Visual C++ 重新生成,您的修改将被覆盖。
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
// CMelfarxmctrl1 包装类
|
||||
// CMelfarxmctrl1 包装类
|
||||
#include "melfarxmctrl1.h"
|
||||
class CMelfarxmctrl1 : public CWnd
|
||||
{
|
||||
@@ -34,11 +34,11 @@ public:
|
||||
pPersist, bStorage, bstrLicKey);
|
||||
}
|
||||
|
||||
// 特性
|
||||
// 特性
|
||||
public:
|
||||
|
||||
|
||||
// 操作
|
||||
// 操作
|
||||
public:
|
||||
|
||||
// _DMelfaRxM
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
// 计算机生成了由 Microsoft Visual C++ 创建的 IDispatch 包装类
|
||||
// 计算机生成了由 Microsoft Visual C++ 创建的 IDispatch 包装类
|
||||
|
||||
// 注意: 不要修改此文件的内容。如果此类由
|
||||
// Microsoft Visual C++ 重新生成,您的修改将被覆盖。
|
||||
// 注意: 不要修改此文件的内容。如果此类由
|
||||
// Microsoft Visual C++ 重新生成,您的修改将被覆盖。
|
||||
|
||||
|
||||
#include "stdafx.h"
|
||||
@@ -13,7 +13,7 @@
|
||||
IMPLEMENT_DYNCREATE(CMelfarxmctrl1, CWnd)
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
// CMelfarxmctrl1 属性
|
||||
// CMelfarxmctrl1 属性
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
// CMelfarxmctrl1 操作
|
||||
// CMelfarxmctrl1 操作
|
||||
|
||||
@@ -1,12 +1,12 @@
|
||||
#pragma once
|
||||
|
||||
// 计算机生成了由 Microsoft Visual C++ 创建的 IDispatch 包装类
|
||||
// 计算机生成了由 Microsoft Visual C++ 创建的 IDispatch 包装类
|
||||
|
||||
// 注意: 不要修改此文件的内容。如果此类由
|
||||
// Microsoft Visual C++ 重新生成,您的修改将被覆盖。
|
||||
// 注意: 不要修改此文件的内容。如果此类由
|
||||
// Microsoft Visual C++ 重新生成,您的修改将被覆盖。
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
// CMelfarxmctrl1 包装类
|
||||
// CMelfarxmctrl1 包装类
|
||||
|
||||
class CMelfarxmctrl1 : public CWnd
|
||||
{
|
||||
@@ -34,11 +34,11 @@ public:
|
||||
pPersist, bStorage, bstrLicKey);
|
||||
}
|
||||
|
||||
// 特性
|
||||
// 特性
|
||||
public:
|
||||
|
||||
|
||||
// 操作
|
||||
// 操作
|
||||
public:
|
||||
|
||||
// _DMelfaRxM
|
||||
|
||||
@@ -7,21 +7,21 @@
|
||||
extern SmartMotor_Proto* pSmartMotor_Proto;
|
||||
|
||||
|
||||
// CAnimatics_UtilDlg 对话框
|
||||
// CAnimatics_UtilDlg 对话框
|
||||
|
||||
class CAnimatics_UtilDlg : public CDialog
|
||||
{
|
||||
DECLARE_DYNAMIC(CAnimatics_UtilDlg)
|
||||
|
||||
public:
|
||||
CAnimatics_UtilDlg(CWnd* pParent = NULL); // 标准构造函数
|
||||
CAnimatics_UtilDlg(CWnd* pParent = NULL); // 标准构造函数
|
||||
virtual ~CAnimatics_UtilDlg();
|
||||
|
||||
// 对话框数据
|
||||
// 对话框数据
|
||||
enum { IDD = IDD_ANIMATICS_UTIL_DIALOG };
|
||||
|
||||
protected:
|
||||
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV 支持
|
||||
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV 支持
|
||||
virtual BOOL OnInitDialog();
|
||||
DECLARE_MESSAGE_MAP()
|
||||
public:
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
// GraphView.cpp : 实现文件
|
||||
// GraphView.cpp : 实现文件
|
||||
//
|
||||
|
||||
#include "stdafx.h"
|
||||
@@ -12,7 +12,7 @@ IMPLEMENT_DYNAMIC(CDrawGraph, CWnd)
|
||||
//========================================================
|
||||
CDrawGraph::CDrawGraph()
|
||||
{
|
||||
//注册控件类
|
||||
//注册控件类
|
||||
RegisterCtrlClass();
|
||||
|
||||
m_nMarginLeft = 40;
|
||||
@@ -28,7 +28,7 @@ CDrawGraph::CDrawGraph()
|
||||
m_dbStartX = m_dbStartY = 0;
|
||||
m_dbEndX = m_dbEndY = 100;
|
||||
|
||||
//颜色表
|
||||
//颜色表
|
||||
m_clrCoordBkg = RGB(255, 255, 255);
|
||||
m_clrFrame = RGB(0, 0, 0);
|
||||
m_clrWave = RGB(0, 0, 255);
|
||||
@@ -48,7 +48,7 @@ void CDrawGraph::RegisterCtrlClass()
|
||||
if(::GetClassInfo(hInstance, STR_CLASS_NAME, &wndclsCtrl))
|
||||
return;
|
||||
|
||||
//设置控件类信息
|
||||
//设置控件类信息
|
||||
wndclsCtrl.style = CS_HREDRAW | CS_VREDRAW | CS_OWNDC;
|
||||
wndclsCtrl.lpfnWndProc = ::DefWindowProc;
|
||||
wndclsCtrl.cbClsExtra = 0;
|
||||
@@ -60,7 +60,7 @@ void CDrawGraph::RegisterCtrlClass()
|
||||
wndclsCtrl.lpszMenuName = NULL;
|
||||
wndclsCtrl.lpszClassName = STR_CLASS_NAME;
|
||||
|
||||
//注册控件类
|
||||
//注册控件类
|
||||
AfxRegisterClass(&wndclsCtrl);
|
||||
}
|
||||
//========================================================
|
||||
@@ -70,18 +70,18 @@ void CDrawGraph::SetViewFont(const CString& strFont, int nPointSize, int nWeight
|
||||
LOGFONT lf;
|
||||
memset(&lf, 0, sizeof(LOGFONT));
|
||||
|
||||
//设置字体样式
|
||||
//设置字体样式
|
||||
nCount = sizeof(lf.lfFaceName)/sizeof(TCHAR);
|
||||
COPYSTRING(lf.lfFaceName, nCount, strFont);
|
||||
lf.lfHeight = nPointSize;
|
||||
lf.lfWeight = nWeight;
|
||||
lf.lfCharSet = GB2312_CHARSET;
|
||||
|
||||
//清楚已有样式
|
||||
//清楚已有样式
|
||||
if(m_fontView.GetSafeHandle())
|
||||
m_fontView.DeleteObject();
|
||||
|
||||
//设置字体
|
||||
//设置字体
|
||||
m_fontView.CreateFontIndirect(&lf);
|
||||
|
||||
if(bIsRedraw)
|
||||
@@ -245,7 +245,7 @@ void CDrawGraph::DrawCoordinate(CDC* pDC, CRect rectCoord)
|
||||
font.CreatePointFontIndirect (&lf);
|
||||
|
||||
CFont* pOldFont = pDC->SelectObject (&font);
|
||||
pDC->TextOut(rectCoord.left-40,rectCoord.top+(rectCoord.Height()/2)+30,m_YAxisLabel);//旋转90°输出
|
||||
pDC->TextOut(rectCoord.left-40,rectCoord.top+(rectCoord.Height()/2)+30,m_YAxisLabel);//旋转90°输出
|
||||
pDC->SelectObject (pOldFont);
|
||||
pDC->TextOut(rectCoord.left-20+(rectCoord.Width()/2),rectCoord.bottom+15,m_XAxisLabel);
|
||||
|
||||
@@ -344,13 +344,13 @@ BEGIN_MESSAGE_MAP(CDrawGraph, CWnd)
|
||||
ON_WM_ERASEBKGND()
|
||||
END_MESSAGE_MAP()
|
||||
|
||||
// CDrawGraph 消息处理程序
|
||||
// CDrawGraph 消息处理程序
|
||||
//========================================================
|
||||
void CDrawGraph::PreSubclassWindow()
|
||||
{
|
||||
CWnd::PreSubclassWindow();
|
||||
|
||||
SetViewFont(_T("宋体"), 12, FW_NORMAL);
|
||||
SetViewFont(_T("宋体"), 12, FW_NORMAL);
|
||||
}
|
||||
//========================================================
|
||||
void CDrawGraph::OnPaint()
|
||||
@@ -363,25 +363,25 @@ void CDrawGraph::OnPaint()
|
||||
CFont* pOldFont;
|
||||
CDC* pMemDC = new CDC;
|
||||
|
||||
//获取控件信息
|
||||
//获取控件信息
|
||||
GetClientRect(rectClient);
|
||||
GetWindowText(strCaption);
|
||||
|
||||
//创建位图内存
|
||||
//创建位图内存
|
||||
bitmapTemp.CreateCompatibleBitmap(&dc, rectClient.Width(), rectClient.Height());
|
||||
pMemDC->CreateCompatibleDC(&dc);
|
||||
pOldBitmap = pMemDC->SelectObject(&bitmapTemp);
|
||||
pOldFont = pMemDC->SelectObject(&m_fontView);
|
||||
nMode = pMemDC->SetBkMode(TRANSPARENT);
|
||||
|
||||
//填充客户区
|
||||
//填充客户区
|
||||
pMemDC->FillSolidRect(&rectClient, GetSysColor(COLOR_BTNFACE));
|
||||
//绘制视图标题
|
||||
//绘制视图标题
|
||||
pMemDC->DrawText(strCaption, strCaption.GetLength(), rectClient, DT_CENTER);
|
||||
//绘制坐标框
|
||||
//绘制坐标框
|
||||
rectCoord.SetRect(rectClient.left+m_nMarginLeft, rectClient.top+m_nMarginTop, rectClient.right-m_nMarginRight, rectClient.bottom-m_nMarginBottom);
|
||||
DrawCoordinate(pMemDC, rectCoord);
|
||||
//绘制波形
|
||||
//绘制波形
|
||||
DrawActualCurve(pMemDC, rectCoord);
|
||||
|
||||
dc.BitBlt(0, 0, rectClient.Width(), rectClient.Height(), pMemDC, 0, 0, SRCCOPY);
|
||||
|
||||
@@ -26,75 +26,75 @@ CEF1AUsbDevice::~CEF1AUsbDevice()
|
||||
|
||||
BOOL CEF1AUsbDevice::EF1AOpenDevice()
|
||||
{
|
||||
//用来保存设备是否已经找到
|
||||
//用来保存设备是否已经找到
|
||||
BOOL DevFound=FALSE;
|
||||
//用来保存找到的设备路径
|
||||
//用来保存找到的设备路径
|
||||
CString DevPathName=_T("");
|
||||
//定义一个GUID的结构体HidGuid来保存HID设备的接口类GUID。
|
||||
//定义一个GUID的结构体HidGuid来保存HID设备的接口类GUID。
|
||||
GUID HidGuid;
|
||||
//定义一个DEVINFO的句柄hDevInfoSet来保存获取到的设备信息集合句柄。
|
||||
//定义一个DEVINFO的句柄hDevInfoSet来保存获取到的设备信息集合句柄。
|
||||
HDEVINFO hDevInfoSet;
|
||||
//定义MemberIndex,表示当前搜索到第几个设备,0表示第一个设备。
|
||||
//定义MemberIndex,表示当前搜索到第几个设备,0表示第一个设备。
|
||||
DWORD MemberIndex;
|
||||
//DevInterfaceData,用来保存设备的驱动接口信息
|
||||
//DevInterfaceData,用来保存设备的驱动接口信息
|
||||
SP_DEVICE_INTERFACE_DATA DevInterfaceData;
|
||||
//定义一个BOOL变量,保存函数调用是否返回成功
|
||||
//定义一个BOOL变量,保存函数调用是否返回成功
|
||||
BOOL Result;
|
||||
//定义一个RequiredSize的变量,用来接收需要保存详细信息的缓冲长度。
|
||||
//定义一个RequiredSize的变量,用来接收需要保存详细信息的缓冲长度。
|
||||
DWORD RequiredSize;
|
||||
//定义一个指向设备详细信息的结构体指针。
|
||||
//定义一个指向设备详细信息的结构体指针。
|
||||
PSP_DEVICE_INTERFACE_DETAIL_DATA pDevDetailData;
|
||||
//定义一个用来保存打开设备的句柄。
|
||||
//定义一个用来保存打开设备的句柄。
|
||||
HANDLE hDevHandle;
|
||||
//定义一个HIDD_ATTRIBUTES的结构体变量,保存设备的属性。
|
||||
//定义一个HIDD_ATTRIBUTES的结构体变量,保存设备的属性。
|
||||
HIDD_ATTRIBUTES DevAttributes;
|
||||
|
||||
//对DevInterfaceData结构体的cbSize初始化为结构体大小
|
||||
//对DevInterfaceData结构体的cbSize初始化为结构体大小
|
||||
DevInterfaceData.cbSize=sizeof(DevInterfaceData);
|
||||
//对DevAttributes结构体的Size初始化为结构体大小
|
||||
//对DevAttributes结构体的Size初始化为结构体大小
|
||||
DevAttributes.Size=sizeof(DevAttributes);
|
||||
|
||||
//调用HidD_GetHidGuid函数获取HID设备的GUID,并保存在HidGuid中。
|
||||
//调用HidD_GetHidGuid函数获取HID设备的GUID,并保存在HidGuid中。
|
||||
HidD_GetHidGuid(&HidGuid);
|
||||
|
||||
//根据HidGuid来获取设备信息集合。其中Flags参数设置为
|
||||
//DIGCF_DEVICEINTERFACE|DIGCF_PRESENT,前者表示使用的GUID为
|
||||
//接口类GUID,后者表示只列举正在使用的设备,因为我们这里只
|
||||
//查找已经连接上的设备。返回的句柄保存在hDevinfo中。注意设备
|
||||
//信息集合在使用完毕后,要使用函数SetupDiDestroyDeviceInfoList
|
||||
//销毁,不然会造成内存泄漏。
|
||||
//根据HidGuid来获取设备信息集合。其中Flags参数设置为
|
||||
//DIGCF_DEVICEINTERFACE|DIGCF_PRESENT,前者表示使用的GUID为
|
||||
//接口类GUID,后者表示只列举正在使用的设备,因为我们这里只
|
||||
//查找已经连接上的设备。返回的句柄保存在hDevinfo中。注意设备
|
||||
//信息集合在使用完毕后,要使用函数SetupDiDestroyDeviceInfoList
|
||||
//销毁,不然会造成内存泄漏。
|
||||
hDevInfoSet=SetupDiGetClassDevs(&HidGuid,
|
||||
NULL,
|
||||
NULL,
|
||||
DIGCF_DEVICEINTERFACE|DIGCF_PRESENT);
|
||||
|
||||
//MessageBox(NULL,"开始查找设备!",NULL,MB_OK);
|
||||
//MessageBox(NULL,"开始查找设备!",NULL,MB_OK);
|
||||
|
||||
//然后对设备集合中每个设备进行列举,检查是否是我们要找的设备
|
||||
//当找到我们指定的设备,或者设备已经查找完毕时,就退出查找。
|
||||
//首先指向第一个设备,即将MemberIndex置为0。
|
||||
//然后对设备集合中每个设备进行列举,检查是否是我们要找的设备
|
||||
//当找到我们指定的设备,或者设备已经查找完毕时,就退出查找。
|
||||
//首先指向第一个设备,即将MemberIndex置为0。
|
||||
MemberIndex=0;
|
||||
while(1)
|
||||
{
|
||||
//调用SetupDiEnumDeviceInterfaces在设备信息集合中获取编号为
|
||||
//MemberIndex的设备信息。
|
||||
//调用SetupDiEnumDeviceInterfaces在设备信息集合中获取编号为
|
||||
//MemberIndex的设备信息。
|
||||
Result=SetupDiEnumDeviceInterfaces(hDevInfoSet,
|
||||
NULL,
|
||||
&HidGuid,
|
||||
MemberIndex,
|
||||
&DevInterfaceData);
|
||||
|
||||
//如果获取信息失败,则说明设备已经查找完毕,退出循环。
|
||||
//如果获取信息失败,则说明设备已经查找完毕,退出循环。
|
||||
if(Result==FALSE) break;
|
||||
|
||||
//将MemberIndex指向下一个设备
|
||||
//将MemberIndex指向下一个设备
|
||||
MemberIndex++;
|
||||
|
||||
//如果获取信息成功,则继续获取该设备的详细信息。在获取设备
|
||||
//详细信息时,需要先知道保存详细信息需要多大的缓冲区,这通过
|
||||
//第一次调用函数SetupDiGetDeviceInterfaceDetail来获取。这时
|
||||
//提供缓冲区和长度都为NULL的参数,并提供一个用来保存需要多大
|
||||
//缓冲区的变量RequiredSize。
|
||||
//如果获取信息成功,则继续获取该设备的详细信息。在获取设备
|
||||
//详细信息时,需要先知道保存详细信息需要多大的缓冲区,这通过
|
||||
//第一次调用函数SetupDiGetDeviceInterfaceDetail来获取。这时
|
||||
//提供缓冲区和长度都为NULL的参数,并提供一个用来保存需要多大
|
||||
//缓冲区的变量RequiredSize。
|
||||
Result=SetupDiGetDeviceInterfaceDetail(hDevInfoSet,
|
||||
&DevInterfaceData,
|
||||
NULL,
|
||||
@@ -102,21 +102,21 @@ BOOL CEF1AUsbDevice::EF1AOpenDevice()
|
||||
&RequiredSize,
|
||||
NULL);
|
||||
|
||||
//然后,分配一个大小为RequiredSize缓冲区,用来保存设备详细信息。
|
||||
//然后,分配一个大小为RequiredSize缓冲区,用来保存设备详细信息。
|
||||
pDevDetailData=(PSP_DEVICE_INTERFACE_DETAIL_DATA)malloc(RequiredSize);
|
||||
if(pDevDetailData==NULL) //如果内存不足,则直接返回。
|
||||
if(pDevDetailData==NULL) //如果内存不足,则直接返回。
|
||||
{
|
||||
MessageBox(NULL,_T("内存不足!"),NULL,MB_OK);
|
||||
MessageBox(NULL,_T("内存不足!"),NULL,MB_OK);
|
||||
SetupDiDestroyDeviceInfoList(hDevInfoSet);
|
||||
return false;
|
||||
}
|
||||
|
||||
//并设置pDevDetailData的cbSize为结构体的大小(注意只是结构体大小,
|
||||
//不包括后面缓冲区)。
|
||||
//并设置pDevDetailData的cbSize为结构体的大小(注意只是结构体大小,
|
||||
//不包括后面缓冲区)。
|
||||
pDevDetailData->cbSize=sizeof(SP_DEVICE_INTERFACE_DETAIL_DATA);
|
||||
|
||||
//然后再次调用SetupDiGetDeviceInterfaceDetail函数来获取设备的
|
||||
//详细信息。这次调用设置使用的缓冲区以及缓冲区大小。
|
||||
//然后再次调用SetupDiGetDeviceInterfaceDetail函数来获取设备的
|
||||
//详细信息。这次调用设置使用的缓冲区以及缓冲区大小。
|
||||
Result=SetupDiGetDeviceInterfaceDetail(hDevInfoSet,
|
||||
&DevInterfaceData,
|
||||
pDevDetailData,
|
||||
@@ -124,17 +124,17 @@ BOOL CEF1AUsbDevice::EF1AOpenDevice()
|
||||
NULL,
|
||||
NULL);
|
||||
|
||||
//将设备路径复制出来,然后销毁刚刚申请的内存。
|
||||
//将设备路径复制出来,然后销毁刚刚申请的内存。
|
||||
DevPathName=pDevDetailData->DevicePath;
|
||||
free(pDevDetailData);
|
||||
|
||||
//如果调用失败,则查找下一个设备。
|
||||
//如果调用失败,则查找下一个设备。
|
||||
if(Result==FALSE) continue;
|
||||
|
||||
//如果调用成功,则使用不带读写访问的CreateFile函数
|
||||
//来获取设备的属性,包括VID、PID、版本号等。
|
||||
//对于一些独占设备(例如USB键盘),使用读访问方式是无法打开的,
|
||||
//而使用不带读写访问的格式才可以打开这些设备,从而获取设备的属性。
|
||||
//如果调用成功,则使用不带读写访问的CreateFile函数
|
||||
//来获取设备的属性,包括VID、PID、版本号等。
|
||||
//对于一些独占设备(例如USB键盘),使用读访问方式是无法打开的,
|
||||
//而使用不带读写访问的格式才可以打开这些设备,从而获取设备的属性。
|
||||
hDevHandle=CreateFile(DevPathName,
|
||||
NULL,
|
||||
FILE_SHARE_READ|FILE_SHARE_WRITE,
|
||||
@@ -143,31 +143,31 @@ BOOL CEF1AUsbDevice::EF1AOpenDevice()
|
||||
FILE_ATTRIBUTE_NORMAL,
|
||||
NULL);
|
||||
|
||||
//如果打开成功,则获取设备属性。
|
||||
//如果打开成功,则获取设备属性。
|
||||
if(hDevHandle!=INVALID_HANDLE_VALUE)
|
||||
{
|
||||
//获取设备的属性并保存在DevAttributes结构体中
|
||||
//获取设备的属性并保存在DevAttributes结构体中
|
||||
Result=HidD_GetAttributes(hDevHandle,
|
||||
&DevAttributes);
|
||||
|
||||
//关闭刚刚打开的设备
|
||||
//关闭刚刚打开的设备
|
||||
CloseHandle(hDevHandle);
|
||||
|
||||
//获取失败,查找下一个
|
||||
//获取失败,查找下一个
|
||||
if(Result==FALSE) continue;
|
||||
|
||||
//如果获取成功,则将属性中的VID、PID以及设备版本号与我们需要的
|
||||
//进行比较,如果都一致的话,则说明它就是我们要找的设备。
|
||||
if(DevAttributes.VendorID==m_nVID) //如果VID相等
|
||||
if(DevAttributes.ProductID==m_nPID) //并且PID相等
|
||||
//if(DevAttributes.VersionNumber==MyPvn) //并且设备版本号相等
|
||||
//如果获取成功,则将属性中的VID、PID以及设备版本号与我们需要的
|
||||
//进行比较,如果都一致的话,则说明它就是我们要找的设备。
|
||||
if(DevAttributes.VendorID==m_nVID) //如果VID相等
|
||||
if(DevAttributes.ProductID==m_nPID) //并且PID相等
|
||||
//if(DevAttributes.VersionNumber==MyPvn) //并且设备版本号相等
|
||||
{
|
||||
DevFound=TRUE; //设置设备已经找到
|
||||
//MessageBox(NULL,"设备已经找到!",NULL,MB_OK);
|
||||
DevFound=TRUE; //设置设备已经找到
|
||||
//MessageBox(NULL,"设备已经找到!",NULL,MB_OK);
|
||||
|
||||
//那么就是我们要找的设备,分别使用读写方式打开之,并保存其句柄
|
||||
//并且选择为异步访问方式。
|
||||
//读方式打开设备
|
||||
//那么就是我们要找的设备,分别使用读写方式打开之,并保存其句柄
|
||||
//并且选择为异步访问方式。
|
||||
//读方式打开设备
|
||||
m_hReadHandle=CreateFile(DevPathName,
|
||||
GENERIC_READ,
|
||||
FILE_SHARE_READ|FILE_SHARE_WRITE,
|
||||
@@ -178,12 +178,12 @@ BOOL CEF1AUsbDevice::EF1AOpenDevice()
|
||||
|
||||
if(m_hReadHandle!=INVALID_HANDLE_VALUE)
|
||||
{
|
||||
//MessageBox(NULL,"读访问打开设备成功!",NULL,MB_OK);
|
||||
//MessageBox(NULL,"读访问打开设备成功!",NULL,MB_OK);
|
||||
}
|
||||
else
|
||||
MessageBox(NULL,_T("读访问打开设备失败!"),NULL,MB_OK);
|
||||
MessageBox(NULL,_T("读访问打开设备失败!"),NULL,MB_OK);
|
||||
|
||||
//写方式打开设备
|
||||
//写方式打开设备
|
||||
m_hWriteHandle=CreateFile(DevPathName,
|
||||
GENERIC_WRITE,
|
||||
FILE_SHARE_READ|FILE_SHARE_WRITE,
|
||||
@@ -193,22 +193,22 @@ BOOL CEF1AUsbDevice::EF1AOpenDevice()
|
||||
NULL);
|
||||
if(m_hWriteHandle!=INVALID_HANDLE_VALUE)
|
||||
{
|
||||
//MessageBox(NULL,"写访问打开设备成功!",NULL,MB_OK);
|
||||
//MessageBox(NULL,"写访问打开设备成功!",NULL,MB_OK);
|
||||
}
|
||||
else
|
||||
MessageBox(NULL,_T("写访问打开设备失败!"),NULL,MB_OK);
|
||||
MessageBox(NULL,_T("写访问打开设备失败!"),NULL,MB_OK);
|
||||
|
||||
break;
|
||||
}
|
||||
}
|
||||
//如果打开失败,则查找下一个设备
|
||||
//如果打开失败,则查找下一个设备
|
||||
else continue;
|
||||
}
|
||||
|
||||
//调用SetupDiDestroyDeviceInfoList函数销毁设备信息集合
|
||||
//调用SetupDiDestroyDeviceInfoList函数销毁设备信息集合
|
||||
SetupDiDestroyDeviceInfoList(hDevInfoSet);
|
||||
|
||||
//如果设备已经找到,那么应该使能各操作按钮,并同时禁止打开设备按钮
|
||||
//如果设备已经找到,那么应该使能各操作按钮,并同时禁止打开设备按钮
|
||||
if(DevFound)
|
||||
{
|
||||
m_isOpen = TRUE;
|
||||
@@ -242,9 +242,9 @@ int CEF1AUsbDevice::EF1AReadData(ULONG /*iIndex*/, char* oBuffer,int /*ioLength*
|
||||
{
|
||||
DWORD iLen = 0;
|
||||
UCHAR ReadReportBuffer[65]={0};
|
||||
if(m_hReadHandle==INVALID_HANDLE_VALUE) //如果读句柄无效
|
||||
if(m_hReadHandle==INVALID_HANDLE_VALUE) //如果读句柄无效
|
||||
{
|
||||
MessageBox(NULL,_T("无效的读报告句柄!"),NULL,MB_OK);
|
||||
MessageBox(NULL,_T("无效的读报告句柄!"),NULL,MB_OK);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
@@ -275,7 +275,7 @@ int CEF1AUsbDevice::EF1AWriteData(ULONG /*iIndex*/, char* Buffer, int ioLength)
|
||||
|
||||
if(m_hWriteHandle==INVALID_HANDLE_VALUE)
|
||||
{
|
||||
MessageBox(NULL,_T("无效的写报告句柄!"),NULL,MB_OK);
|
||||
MessageBox(NULL,_T("无效的写报告句柄!"),NULL,MB_OK);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
// Keyence_LKG5000_Ethernet.cpp : 实现文件
|
||||
// Keyence_LKG5000_Ethernet.cpp : 实现文件
|
||||
//
|
||||
|
||||
#include "stdafx.h"
|
||||
@@ -13,7 +13,7 @@ const int LK_H_MAX_STORAGE_DATA_SIZE=65535;
|
||||
|
||||
extern CKeyence_Laser_LK_H* m_pKeyence_Laser_LK_H;
|
||||
|
||||
// CKeyence_LKG5000_Ethernet 对话框
|
||||
// CKeyence_LKG5000_Ethernet 对话框
|
||||
|
||||
IMPLEMENT_DYNAMIC(CKeyence_LKG5000_Ethernet, CDialogEx)
|
||||
|
||||
@@ -54,7 +54,7 @@ BEGIN_MESSAGE_MAP(CKeyence_LKG5000_Ethernet, CDialogEx)
|
||||
END_MESSAGE_MAP()
|
||||
|
||||
|
||||
// CKeyence_LKG5000_Ethernet 消息处理程序
|
||||
// CKeyence_LKG5000_Ethernet 消息处理程序
|
||||
//======================================================
|
||||
BOOL CKeyence_LKG5000_Ethernet::OnInitDialog()
|
||||
{
|
||||
|
||||
@@ -1,21 +1,21 @@
|
||||
#pragma once
|
||||
|
||||
|
||||
// CKeyence_LKG5000_Ethernet 对话框
|
||||
// CKeyence_LKG5000_Ethernet 对话框
|
||||
|
||||
class CKeyence_LKG5000_Ethernet : public CDialogEx
|
||||
{
|
||||
DECLARE_DYNAMIC(CKeyence_LKG5000_Ethernet)
|
||||
|
||||
public:
|
||||
CKeyence_LKG5000_Ethernet(CWnd* pParent = NULL); // 标准构造函数
|
||||
CKeyence_LKG5000_Ethernet(CWnd* pParent = NULL); // 标准构造函数
|
||||
virtual ~CKeyence_LKG5000_Ethernet();
|
||||
|
||||
// 对话框数据
|
||||
// 对话框数据
|
||||
enum { IDD = IDD_DIALOG_KEYENCE_LKG5000_ETHERNET };
|
||||
|
||||
protected:
|
||||
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV 支持
|
||||
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV 支持
|
||||
virtual BOOL OnInitDialog();
|
||||
|
||||
DECLARE_MESSAGE_MAP()
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
// Keyence_UtilDlg.cpp : 实现文件
|
||||
// Keyence_UtilDlg.cpp : 实现文件
|
||||
//
|
||||
|
||||
#include "stdafx.h"
|
||||
@@ -36,7 +36,7 @@ float fLaserVaule1(0);
|
||||
float fLaserVaule2(0);
|
||||
|
||||
std::vector<KeyenceReport> LK_GReport;
|
||||
// CKeyence_UtilDlg 对话框
|
||||
// CKeyence_UtilDlg 对话框
|
||||
|
||||
IMPLEMENT_DYNAMIC(CKeyence_UtilDlg, CDialog)
|
||||
|
||||
@@ -330,7 +330,7 @@ BOOL CKeyence_UtilDlg::ExportReportCSV(const CString &FilePathName)
|
||||
};
|
||||
#pragma endregion
|
||||
|
||||
// CKeyence_UtilDlg 消息处理程序
|
||||
// CKeyence_UtilDlg 消息处理程序
|
||||
#pragma region LK_G_LASER
|
||||
//===========================================================
|
||||
void CKeyence_UtilDlg::OnBnClickedButtonKeyenceLaserCalibrateValue0()
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
#pragma once
|
||||
|
||||
// CKeyence_UtilDlg 对话框
|
||||
// CKeyence_UtilDlg 对话框
|
||||
typedef struct{
|
||||
char ProgramNo;
|
||||
float OUT1Value;
|
||||
@@ -13,14 +13,14 @@ class CKeyence_UtilDlg : public CDialog
|
||||
DECLARE_DYNAMIC(CKeyence_UtilDlg)
|
||||
|
||||
public:
|
||||
CKeyence_UtilDlg(CWnd* pParent = NULL); // 标准构造函数
|
||||
CKeyence_UtilDlg(CWnd* pParent = NULL); // 标准构造函数
|
||||
virtual ~CKeyence_UtilDlg();
|
||||
|
||||
// 对话框数据
|
||||
// 对话框数据
|
||||
enum { IDD = IDD_DIALOG_KEYENCE_LKG3000 };
|
||||
|
||||
protected:
|
||||
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV 支持
|
||||
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV 支持
|
||||
virtual BOOL OnInitDialog();
|
||||
DECLARE_MESSAGE_MAP()
|
||||
protected:
|
||||
|
||||
Reference in New Issue
Block a user