195 lines
3.5 KiB
C
195 lines
3.5 KiB
C
|
||
#include "ruanyictrl.h"
|
||
|
||
#if (BUSCTRL_MOTO == RUANYI)
|
||
|
||
#include "modbus_m.h"
|
||
#include "workctrl.h"
|
||
|
||
typedef struct
|
||
{
|
||
u16 motoreturndat; //电机回包数据
|
||
u16 motoparaval; //参数设置值
|
||
u16 zerocodeval; //零位编码值
|
||
int curtozeroval; //当前位置与零位编码值
|
||
u32 curtozeroabs;
|
||
|
||
u8 zeroflag;
|
||
s16 motocurpuspos;
|
||
}RYDriverCtrl;
|
||
|
||
RYDriverCtrl g_rydriverctrl;
|
||
|
||
void InitRuanyiCom(void) //初始化
|
||
{
|
||
memset(&g_rydriverctrl, 0, sizeof(RYDriverCtrl));
|
||
|
||
}
|
||
|
||
|
||
/*移动电机到某位置 (绝对位置)
|
||
* decIdx:电机设备地址:1-127
|
||
* pos:目标位置(脉冲数)
|
||
* spd:速度 0:不改变速度
|
||
* */
|
||
|
||
int MoveRyiToAbsolutePos(u8 devIdx, s16 pos, u16 spd)
|
||
{
|
||
int err = 0;
|
||
static u16 oldRyspd = 500;
|
||
if(spd != oldRyspd)
|
||
{
|
||
oldRyspd = spd;
|
||
err = ModbusComm16(0,devIdx, MODBUS_WR, 8256, (u16)spd, &g_rydriverctrl.motoreturndat); //更改最高速度
|
||
DelayRef(300);
|
||
}
|
||
if(err >= 0 &&
|
||
pos != 0)
|
||
{
|
||
err = ModbusComm16(0,devIdx, MODBUS_WR, 9473, (u16)pos, &g_rydriverctrl.motoreturndat);
|
||
if(g_rydriverctrl.motoreturndat != (u16)pos)
|
||
{
|
||
err = -10;
|
||
}
|
||
}
|
||
|
||
return err;
|
||
}
|
||
|
||
|
||
|
||
/*移动电机到某位置(相对位置)
|
||
* decIdx:电机设备地址:1-127
|
||
* pos:目标位置(脉冲数)
|
||
* spd:速度 0:不改变速度
|
||
* */
|
||
|
||
int MoveRyiToRelativePos(u8 devIdx, s16 pos, u16 spd)
|
||
{
|
||
int err = 0;
|
||
static u16 oldRyspd = 1500;
|
||
if(spd != oldRyspd)
|
||
{
|
||
oldRyspd = spd;
|
||
err = ModbusComm16(0,devIdx, MODBUS_WR, 8256, (u16)spd, &g_rydriverctrl.motoreturndat); //更改最高速度
|
||
DelayRef(300);
|
||
}
|
||
if(err >= 0 &&
|
||
pos != 0)
|
||
{
|
||
err = ModbusComm16(0,devIdx, MODBUS_WR, 9475, (u16)pos, &g_rydriverctrl.motoreturndat);
|
||
if(g_rydriverctrl.motoreturndat != (u16)pos)
|
||
{
|
||
err = -10;
|
||
}
|
||
}
|
||
|
||
return err;
|
||
}
|
||
|
||
/*电机JOG+ 运行
|
||
* decIdx:电机设备地址:1-127
|
||
* spd:速度 0:不改变速度
|
||
* */
|
||
|
||
int MoveRyiJOGP(u8 devIdx, u16 spd)
|
||
{
|
||
int err = 0;
|
||
if(spd != 0)
|
||
{
|
||
err = ModbusComm16(0,devIdx, MODBUS_WR, 8241, (u16)spd, &g_rydriverctrl.motoreturndat); //点动速度
|
||
}
|
||
if(err >= 0)
|
||
{
|
||
err = ModbusComm16(0,devIdx, MODBUS_WR, BITMOVEADDR, BITJOGPCMD, &g_rydriverctrl.motoreturndat);
|
||
}
|
||
return err;
|
||
}
|
||
|
||
int MoveRyiJOGN(u8 devIdx, u16 spd)
|
||
{
|
||
int err = 0;
|
||
if(spd != 0)
|
||
{
|
||
err = ModbusComm16(0,devIdx, MODBUS_WR, 8241, (u16)spd, &g_rydriverctrl.motoreturndat); //点动速度
|
||
}
|
||
if(err >= 0)
|
||
{
|
||
err = ModbusComm16(0,devIdx, MODBUS_WR, BITMOVEADDR, BITJOGNCMD, &g_rydriverctrl.motoreturndat);
|
||
}
|
||
return err;
|
||
}
|
||
|
||
//电机停止
|
||
int RyiMotoStop(u8 devIdx)
|
||
{
|
||
int err = 0;
|
||
err = ModbusComm16(0,devIdx, MODBUS_WR, BITMOVEADDR, BITSTOPCMD, &g_rydriverctrl.motoreturndat);
|
||
return err;
|
||
}
|
||
|
||
//当前位置给定
|
||
int SetRyiCurPos(u8 devIdx, s16 pos)
|
||
{
|
||
int err = 0;
|
||
err = ModbusComm16(0,devIdx, MODBUS_WR, 9472, pos, &g_rydriverctrl.motoreturndat);
|
||
return err;
|
||
}
|
||
|
||
//当前位置清零
|
||
int RyiMotoSetCurPosZero(u8 devIdx)
|
||
{
|
||
int err = 0;
|
||
err = ModbusComm16(0,devIdx, MODBUS_WR, BITMOVEADDR, BITSETCPOSZEROCMD, &g_rydriverctrl.motoreturndat);
|
||
return err;
|
||
}
|
||
|
||
//到对应位置
|
||
int RyiMotoToPos(u8 devIdx, u16 pos)
|
||
{
|
||
int err = 0;
|
||
err = ModbusComm16(0,devIdx, MODBUS_WR, BITTOPOSADDR, pos, &g_rydriverctrl.motoreturndat);
|
||
return err;
|
||
}
|
||
|
||
|
||
//读取电机位置 单位:脉冲
|
||
int GetCurPusPos(u8 devIdx, s16 * puspos)
|
||
{
|
||
int err = 0;
|
||
u16 upuspos = 0;
|
||
err = ModbusComm16(0,devIdx, MODBUS_RD, 9729, 0, &upuspos);
|
||
*puspos = (s16)upuspos;
|
||
return err;
|
||
}
|
||
|
||
//读取电机状态 当前指令是否完成0:未完成;1:完成 2:堵转 3:错误
|
||
int GetCurStatus(u8 devIdx, int * statuflg)
|
||
{
|
||
int err = 0;
|
||
u16 sta = 0;
|
||
err = ModbusComm16(0,devIdx, MODBUS_RD, 9728, 0, &sta);
|
||
if(err < 0)
|
||
{
|
||
return err;
|
||
}
|
||
else
|
||
{
|
||
if(sta == 1)
|
||
{
|
||
*statuflg = 1;
|
||
}
|
||
else if(sta == 0)
|
||
{
|
||
*statuflg = 0;
|
||
}
|
||
else
|
||
{
|
||
*statuflg = -1;
|
||
}
|
||
}
|
||
return err;
|
||
}
|
||
|
||
#endif
|