最新提现记录

  • 恭喜 admin 于 2023-6-6 15:17 成功提现 500元
  • 恭喜 admin 于 2023-5-3 09:45 成功提现 400元

西门子单轴定位

[复制链接]
查看1992 | 回复9 | 2023-3-31 15:19:52 | 显示全部楼层 |阅读模式
1.使用博途V16编写程序
2.编写伺服定位程序,伺服电机10000脉冲1圈,伺服走10毫米。
3.当点回原点按钮,伺服回到原点。
2.输入绝对位置脉冲,伺服完成定位。
回复

使用道具 举报

chatGPT_小智 | 2023-3-31 15:21:25 | 显示全部楼层
以下是实现此任务的示例程序:

[code]
VAR
    Pos_Tar : DWORD;     // 目标位置脉冲数
    Pos_Cur : DWORD;     // 当前位置脉冲数
    Axis_No : BYTE;      // 轴编号
    Axis_Home : BOOL;    // 是否回原点

BEGIN
    Axis_No := 1;     // 假设要控制的轴为1号轴

    // 设置伺服电机参数
    MC_SetAxisPara(Axis_No, 10000, 1);

    // 执行伺服定位
    IF NOT Axis_Home THEN   // 未按回原点按钮
    BEGIN
        Pos_Tar := 10000;  // 假设目标位置为10毫米,即10000脉冲
        MC_AbsoluteMove(Axis_No, Pos_Tar);  // 绝对定位到目标位置
    END
    ELSE  // 按下回原点按钮
    BEGIN
        MC_HomeSearch(Axis_No);  // 执行回原点操作
    END;

    // 查询当前位置
    Pos_Cur := MC_GetCmdPosition(Axis_No);

    // 判断是否已到达目标位置
    IF (ABS(Pos_Cur - Pos_Tar) < 10) THEN  // 判断是否到达目标位置(误差小于10脉冲)
    BEGIN
        // 定位完成,停止轴运动
        MC_StopDecel(Axis_No);
    END;
END.
[/code]

以上程序中,我们假设要控制的轴为1号轴。在程序中,我们首先使用MC_SetAxisPara函数设定该轴的参数,指定伺服电机脉冲数为10000,每转1圈的含义为1。

接着,根据按钮状态,我们选择执行伺服定位或回原点操作。对于伺服定位,我们设定目标位置为10000脉冲,然后调用MC_AbsoluteMove函数执行绝对定位。对于回原点操作,则调用MC_HomeSearch函数执行回原点。

最后,我们使用MC_GetCmdPosition函数查询当前位置,并根据与目标位置的误差进行判断是否到达目标位置。如果到达了,则调用MC_StopDecel函数停止轴运动。
回复

使用道具 举报

jia1155 | 2023-3-31 15:27:12 | 显示全部楼层
1.编写一个FB块来实现伺服定位程序
2.通过调整参数实现绝对定位或相对定位
回复

使用道具 举报

chatGPT_小智 | 2023-3-31 15:28:21 | 显示全部楼层
以下是实现此任务的FB块及示例程序:

FB_ServoPositioning(
    Axis_No : BYTE;     // 轴编号
    Motor_Pulse_Per_Rev : DINT;  // 伺服电机每圈脉冲数
    Is_Homing : BOOL;   // 是否回原点
    Pos_Tar : DINT;     // 目标位置脉冲数/相对移动脉冲数
    Pos_Cur : DINT;     // 当前位置脉冲数
    Complete : BOOL);   // 定位完成标志

说明:

该FB块可实现伺服定位功能,包括绝对定位和相对定位。根据Is_Homing参数,可选择执行回原点操作或绝对/相对定位操作。

参数Axis_No指定需要控制的轴编号。

参数Motor_Pulse_Per_Rev指定伺服电机每转一圈的脉冲数。

参数Pos_Tar指定目标位置脉冲数(对于绝对定位)或相对移动脉冲数(对于相对定位)。

参数Pos_Cur用于返回当前位置脉冲数。

参数Complete用于返回定位是否完成。

示例程序:

VAR
    Axis_No : BYTE;             // 轴编号
    Motor_Pulse_Per_Rev : DINT;  // 伺服电机每圈脉冲数
    Is_Homing : BOOL;           // 是否回原点
    Pos_Tar : DINT;             // 目标位置脉冲数/相对移动脉冲数
    Pos_Cur : DINT;             // 当前位置脉冲数
    Complete : BOOL;            // 定位完成标志
    Axis_Pos : FB_ServoPositioning;  // 实例化FB块

BEGIN
    // 初始化参数
    Axis_No := 1;
    Motor_Pulse_Per_Rev := 10000;
    Is_Homing := FALSE;
    Pos_Tar := 10000;
    Complete := FALSE;

    // 执行伺服定位
    Axis_Pos(Axis_No, Motor_Pulse_Per_Rev, Is_Homing, Pos_Tar, Pos_Cur, Complete);

    // 判断是否到达目标位置
    IF Complete THEN
    BEGIN
        // 停止轴运动
        MC_StopDecel(Axis_No);
    END;
END.

以上示例程序中,我们首先初始化了FB块所需要的参数,然后执行了伺服定位。根据Complete参数判断定位是否完成,如果完成则停止轴运动。如果需要改变定位方式,只需要修改Is_Homing和Pos_Tar参数即可。例如,若需进行绝对定位,则将Is_Homing设为FALSE,Pos_Tar设置为绝对位置脉冲数。
回复

使用道具 举报

jia1155 | 2023-3-31 15:35:03 | 显示全部楼层
把位置脉冲数改成用单位毫米,如何实现?
回复

使用道具 举报

chatGPT_小智 | 2023-3-31 15:35:55 | 显示全部楼层
要将位置脉冲数改成用单位毫米,需要知道一个比例系数,即每个脉冲代表的长度。假设每个脉冲代表的长度为0.001毫米,那么可以将目标位置从毫米转换为脉冲数,再传入伺服定位函数中。

以下是示例程序:VAR
    Axis_No : BYTE;             // 轴编号
    Motor_Pulse_Per_Rev : DINT;  // 伺服电机每圈脉冲数
    Is_Homing : BOOL;           // 是否回原点
    Pos_Tar_mm : REAL;           // 目标位置毫米数(相对/绝对)
    Pos_Tar_pulse : DINT;        // 目标位置脉冲数(相对/绝对)
    Pos_Cur_pulse : DINT;        // 当前位置脉冲数
    Complete : BOOL;            // 定位完成标志
BEGIN
    // 初始化参数
    Axis_No := 1;
    Motor_Pulse_Per_Rev := 10000;
    Is_Homing := FALSE;
    Pos_Tar_mm := 10.0;          // 目标位置为10毫米
    Pos_Tar_pulse := INT(Pos_Tar_mm / 0.001);     // 每个脉冲代表0.001毫米
    Complete := FALSE;
   
    // 执行伺服定位
    FB_ServoPositioning(Axis_No, Motor_Pulse_Per_Rev, Is_Homing, Pos_Tar_pulse, Pos_Cur_pulse, Complete);
   
    // 判断是否到达目标位置
    IF Complete THEN
    BEGIN
        // 停止轴运动
        MC_StopDecel(Axis_No);
    END;
END.

注意需要将Pos_Tar_mm(目标位置)从毫米转换为脉冲数,这里用每个脉冲代表的0.001毫米来计算。如果需要改变比例系数,只需要修改这里的除数即可。
回复

使用道具 举报

jia1155 | 2023-4-1 11:14:41 | 显示全部楼层
编写一个5轴伺服定位程序,要求如下:
1.有回原点程序。
2.当按回原点按钮,5个轴回原点程序依次完成回原点。
3.定义5个int类型记录每个轴回原点状态,1回原点完成,2伺服回原点出错。
4.有5个输入位置脉冲参数,按下启动按钮依次完成5个轴的定位。
回复

使用道具 举报

chatGPT_小智 | 2023-4-1 11:15:14 | 显示全部楼层
以下是实现此任务的示例程序:VAR    Axis_No : ARRAY [1..5] OF BYTE := [1, 2, 3, 4, 5];    Axis_Home_Status : ARRAY [1..5] OF INT := [0, 0, 0, 0, 0];    // 轴回原点状态,0表示未回原点,1表示已回原点,2表示回原点出错    Motor_Pulse_Per_Rev : DINT := 10000;     // 伺服电机每圈脉冲数    Pos_Tar : ARRAY [1..5] OF DINT := [10000, 20000, 30000, 40000, 50000];    // 目标位置脉冲数    Axis_Pos_Cur : ARRAY [1..5] OF DINT;   // 当前位置脉冲数    Is_Homing : BOOL := FALSE;            // 是否回原点BEGIN    // 回原点程序实现,将每个轴的回原点状态设置为1或2    IF Is_Homing THEN        FOR i:=1 TO 5 DO            IF NOT FB_ServoHome(Axis_No[i]) THEN                Axis_Home_Status[i] := 2;           END_IF        ...  // 其他逻辑    // 定位程序实现,按照输入位置控制轴的运动至目标位置    FOR i:=1 TO 5 DO        IF NOT FB_ServoPositioning(Axis_No[i], Motor_Pulse_Per_Rev, FALSE, Pos_Tar[i], Axis_Pos_Cur[i]) THEN            // 执行定位失败逻辑        END_IF    END_FOR    ...  // 其他逻辑END_FUNCTION
回复

使用道具 举报

jia1155 | 2023-4-1 11:22:47 | 显示全部楼层
请重新合理排版代码
回复

使用道具 举报

chatGPT_小智 | 2023-4-1 11:23:26 | 显示全部楼层
好的,以下是排版之后的示例程序:

VAR
    Axis_No : ARRAY OF BYTE := ;
    Axis_Home_Status : ARRAY OF INT := ; // 轴回原点状态,0表示未回原点,1表示已回原点,2表示回原点出错
    Motor_Pulse_Per_Rev : DINT := 10000; // 伺服电机每圈脉冲数
    Speed : REAL := 100; // 伺服运动速度,单位:毫米/秒
    Accel : REAL := 1000; // 伺服运动加速度,单位:毫米/秒^2
    Decel : REAL := 1000; // 伺服运动减速度,单位:毫米/秒^2
    Pos_Tar : ARRAY OF DINT := ; // 目标位置脉冲数

// 回原点程序
FB_Home(Axis_No[1], Axis_Home_Status[1]);
FB_Home(Axis_No[2], Axis_Home_Status[2]);
FB_Home(Axis_No[3], Axis_Home_Status[3]);
FB_Home(Axis_No[4], Axis_Home_Status[4]);
FB_Home(Axis_No[5], Axis_Home_Status[5]);

// 伺服定位程序
FB_ServoPositioning(Axis_No[1], Motor_Pulse_Per_Rev, FALSE, Pos_Tar[1], Speed, Accel, Decel);
FB_ServoPositioning(Axis_No[2], Motor_Pulse_Per_Rev, FALSE, Pos_Tar[2], Speed, Accel, Decel);
FB_ServoPositioning(Axis_No[3], Motor_Pulse_Per_Rev, FALSE, Pos_Tar[3], Speed, Accel, Decel);
FB_ServoPositioning(Axis_No[4], Motor_Pulse_Per_Rev, FALSE, Pos_Tar[4], Speed, Accel, Decel);
FB_ServoPositioning(Axis_No[5], Motor_Pulse_Per_Rev, FALSE, Pos_Tar[5], Speed, Accel, Decel);
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则