基于 VC++ 编写的 Googol 固高 GT400 运动控制卡实验平台代码,核心是实现控制卡的初始化、单轴运动(点位 / 速度模式)、状态读取、急停等基础功能,方便在实验平台上验证控制卡的基本操作。
一、开发前置条件
环境配置:
编译器:Visual Studio 2010/2019(兼容 MFC/Win32 控制台,推荐控制台入门)
驱动与库:安装固高 GT400 驱动,引入
gt400.dll、gt400.lib及头文件gt400.h(固高官方 SDK 自带)硬件:GT400 控制卡已正确安装,电机 / 驱动器接线完成
核心库函数说明:
GT_Open():打开控制卡设备GT_AxisOn():轴使能GT_PrfTrap():设置点位运动模式(梯形加减速)GT_SetPos():设置目标位置GT_SetVel():设置运动速度GT_Update():下发运动指令GT_GetAxisStatus():读取轴状态GT_Stop():急停GT_Close():关闭控制卡
二、完整 VC++ 控制台代码(单轴基础实验)
以下代码实现 GT400 单轴(轴 0)的点位运动、速度运动、状态监测、急停等核心功能,可直接编译运行(需配置库路径):
cpp
运行
#include <iostream>#include <windows.h>#include "gt400.h" // 固高GT400头文件(需放入项目目录)// 预定义常量#define AXIS_ID 0 // 控制轴号(实验平台常用轴0)#define MOVE_POS 10000 // 点位运动目标位置(脉冲数)#define MOVE_VEL 5000 // 运动速度(脉冲/秒)#define ACC 20000 // 加速度(脉冲/秒²)#define DEC 20000 // 减速度(脉冲/秒²)// 函数声明bool InitGT400(); // 初始化控制卡void SingleAxisPositionMove(); // 单轴点位运动void SingleAxisVelocityMove(); // 单轴速度运动void CheckAxisStatus(); // 读取轴状态void EmergencyStop(); // 急停void CloseGT400(); // 关闭控制卡int main(){
std::cout << "===== 固高GT400运动控制卡实验平台 =====" << std::endl;
// 1. 初始化控制卡
if (!InitGT400())
{
std::cout << "控制卡初始化失败!按任意键退出..." << std::endl;
getchar();
return -1;
}
std::cout << "控制卡初始化成功!" << std::endl;
// 2. 轴使能
if (GT_AxisOn(AXIS_ID) != GT_NOERROR)
{
std::cout << "轴" << AXIS_ID << "使能失败!" << std::endl;
CloseGT400();
getchar();
return -1;
}
std::cout << "轴" << AXIS_ID << "已使能" << std::endl;
// 3. 选择运动模式(实验可切换注释)
std::cout << "\n开始点位运动(目标位置:" << MOVE_POS << "脉冲)..." << std::endl;
SingleAxisPositionMove();
// 4. 监测轴状态
std::cout << "监测轴状态..." << std::endl;
CheckAxisStatus();
// 5. 速度模式运动(可选)
// std::cout << "\n开始速度模式运动(速度:" << MOVE_VEL << "脉冲/秒)..." << std::endl;
// SingleAxisVelocityMove();
// Sleep(3000); // 运行3秒
// EmergencyStop(); // 急停
// 6. 关闭控制卡
CloseGT400();
std::cout << "\n控制卡已关闭,实验结束!按任意键退出..." << std::endl;
getchar();
return 0;}// 初始化GT400控制卡bool InitGT400(){
// 打开控制卡(默认设备号0,多卡需指定)
if (GT_Open(0) != GT_NOERROR)
{
std::cout << "GT_Open() 失败,错误码:" << GT_GetLastError() << std::endl;
return false;
}
// 复位控制卡
if (GT_Reset() != GT_NOERROR)
{
std::cout << "GT_Reset() 失败,错误码:" << GT_GetLastError() << std::endl;
GT_Close();
return false;
}
// 设置轴参数(脉冲当量/限位等,实验默认即可)
GT_SetAxisPara(AXIS_ID, AXIS_PULSE_EQUIV, 1.0); // 脉冲当量1:1
return true;}// 单轴点位运动(梯形加减速)void SingleAxisPositionMove(){
// 设置运动模式为点位运动(梯形加减速)
GT_PrfTrap(AXIS_ID);
// 设置运动参数
GT_SetPos(AXIS_ID, MOVE_POS); // 目标位置
GT_SetVel(AXIS_ID, MOVE_VEL); // 最大速度
GT_SetAcc(AXIS_ID, ACC); // 加速度
GT_SetDec(AXIS_ID, DEC); // 减速度
// 下发运动指令(立即执行)
GT_Update(AXIS_ID);
// 等待运动完成
DWORD axisStatus = 0;
do
{
GT_GetAxisStatus(AXIS_ID, &axisStatus);
Sleep(100); // 每100ms检测一次
} while ((axisStatus & AXIS_STOP) == 0); // 等待轴停止}// 单轴速度运动(持续运行,需手动停止)void SingleAxisVelocityMove(){
// 设置运动模式为速度模式
GT_PrfVel(AXIS_ID);
// 设置速度参数
GT_SetVel(AXIS_ID, MOVE_VEL); // 运行速度
GT_SetAcc(AXIS_ID, ACC); // 加速度
GT_SetDec(AXIS_ID, DEC); // 减速度
// 下发指令并启动
GT_Update(AXIS_ID);}// 读取轴状态(位置、速度、报警等)void CheckAxisStatus(){
double curPos = 0.0; // 当前位置
double curVel = 0.0; // 当前速度
DWORD axisStatus = 0; // 轴状态
// 获取当前位置
GT_GetPrfPos(AXIS_ID, &curPos);
std::cout << "当前位置:" << curPos << " 脉冲" << std::endl;
// 获取当前速度
GT_GetPrfVel(AXIS_ID, &curVel);
std::cout << "当前速度:" << curVel << " 脉冲/秒" << std::endl;
// 获取轴状态
GT_GetAxisStatus(AXIS_ID, &axisStatus);
std::cout << "轴状态码:" << axisStatus << "(0=运行,非0=停止)" << std::endl;
std::cout << "急停失败,错误码:" << GT_GetLastError() << std::endl;
}}// 关闭控制卡void CloseGT400(){
// 轴失能
GT_AxisOff(AXIS_ID);
// 关闭控制卡
GT_Close();}三、代码配置与编译步骤
项目设置:
新建 VC++ 控制台项目(Win32 Console Application)。
将
gt400.h放入项目头文件目录,gt400.lib放入项目源文件目录。项目属性→链接器→输入→附加依赖项,添加
gt400.lib。项目属性→C/C++→常规→附加包含目录,添加头文件路径。
将
gt400.dll复制到编译后的可执行文件(.exe)同目录。编译运行:
确保 GT400 控制卡硬件连接正常,驱动已安装。
编译代码(无报错则生成.exe),运行后观察电机是否按设定参数运动。
四、关键代码解释
控制卡初始化:
GT_Open()打开设备,GT_Reset()复位控制卡,是所有操作的前提;轴使能:
GT_AxisOn()必须先执行,否则电机无动力输出;点位运动:
GT_PrfTrap()设定梯形加减速模式,GT_SetPos/Vel/Acc/Dec()配置运动参数,GT_Update()下发指令,通过GT_GetAxisStatus()等待运动完成;速度运动:
GT_PrfVel()切换为速度模式,运动后需调用GT_Stop()停止;错误处理:
GT_GetLastError()可获取错误码,对照固高 SDK 手册排查问题(如驱动未装、轴号错误、接线异常等)。
五、实验扩展建议
多轴联动:复制轴 0 代码,修改
AXIS_ID为 1/2/3,实现多轴同步运动;限位保护:添加
GT_GetLimitSignal()读取正负限位信号,触发时执行急停;位置清零:使用
GT_SetPrfPos(AXIS_ID, 0)将当前位置置零,方便重复实验;MFC 界面化:将核心函数封装到 MFC 按钮 / 文本框事件中,实现可视化操作(如输入目标位置、速度,显示实时状态)。
总结
GT400 控制卡 VC++ 开发核心是调用官方 SDK 函数,遵循 “打开卡→轴使能→设运动模式→配参数→下发指令→读状态→关闭卡” 的流程;
点位运动需配置目标位置和加减速参数,速度运动需手动停止,实验前务必确认电机接线和硬件安全;
代码中错误码排查、轴状态监测是定位问题的关键,可对照固高 SDK 手册解读错误码含义。

