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