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; //<2F><><EFBFBD><EFBFBD><EFBFBD>ذ<EFBFBD><D8B0><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
u16 motoparaval; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ
|
|||
|
|
u16 zerocodeval; //<2F><>λ<EFBFBD><CEBB><EFBFBD><EFBFBD>ֵ
|
|||
|
|
int curtozeroval; //<2F><>ǰλ<C7B0><CEBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD>ֵ
|
|||
|
|
u32 curtozeroabs;
|
|||
|
|
|
|||
|
|
u8 zeroflag;
|
|||
|
|
s16 motocurpuspos;
|
|||
|
|
}RYDriverCtrl;
|
|||
|
|
|
|||
|
|
RYDriverCtrl g_rydriverctrl;
|
|||
|
|
|
|||
|
|
void InitRuanyiCom(void) //<2F><>ʼ<EFBFBD><CABC>
|
|||
|
|
{
|
|||
|
|
memset(&g_rydriverctrl, 0, sizeof(RYDriverCtrl));
|
|||
|
|
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
|
|||
|
|
/*<2A>ƶ<EFBFBD><C6B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ijλ<C4B3><CEBB> (<28><><EFBFBD><EFBFBD>λ<EFBFBD><CEBB>)
|
|||
|
|
* decIdx:<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>豸<EFBFBD><EFBFBD>ַ<EFBFBD><EFBFBD>1-127
|
|||
|
|
* pos:Ŀ<EFBFBD><EFBFBD>λ<EFBFBD>ã<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
* spd:<EFBFBD>ٶ<EFBFBD> 0<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ı<EFBFBD><EFBFBD>ٶ<EFBFBD>
|
|||
|
|
* */
|
|||
|
|
|
|||
|
|
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); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ٶ<EFBFBD>
|
|||
|
|
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;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
/*<2A>ƶ<EFBFBD><C6B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ijλ<C4B3>ã<EFBFBD><C3A3><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD>ã<EFBFBD>
|
|||
|
|
* decIdx:<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>豸<EFBFBD><EFBFBD>ַ<EFBFBD><EFBFBD>1-127
|
|||
|
|
* pos:Ŀ<EFBFBD><EFBFBD>λ<EFBFBD>ã<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
* spd:<EFBFBD>ٶ<EFBFBD> 0<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ı<EFBFBD><EFBFBD>ٶ<EFBFBD>
|
|||
|
|
* */
|
|||
|
|
|
|||
|
|
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); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ٶ<EFBFBD>
|
|||
|
|
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;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
/*<2A><><EFBFBD><EFBFBD>JOG+ <20><><EFBFBD><EFBFBD>
|
|||
|
|
* decIdx:<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>豸<EFBFBD><EFBFBD>ַ<EFBFBD><EFBFBD>1-127
|
|||
|
|
* spd:<EFBFBD>ٶ<EFBFBD> 0<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ı<EFBFBD><EFBFBD>ٶ<EFBFBD>
|
|||
|
|
* */
|
|||
|
|
|
|||
|
|
int MoveRyiJOGP(u8 devIdx, u16 spd)
|
|||
|
|
{
|
|||
|
|
int err = 0;
|
|||
|
|
if(spd != 0)
|
|||
|
|
{
|
|||
|
|
err = ModbusComm16(0,devIdx, MODBUS_WR, 8241, (u16)spd, &g_rydriverctrl.motoreturndat); //<2F>㶯<EFBFBD>ٶ<EFBFBD>
|
|||
|
|
}
|
|||
|
|
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); //<2F>㶯<EFBFBD>ٶ<EFBFBD>
|
|||
|
|
}
|
|||
|
|
if(err >= 0)
|
|||
|
|
{
|
|||
|
|
err = ModbusComm16(0,devIdx, MODBUS_WR, BITMOVEADDR, BITJOGNCMD, &g_rydriverctrl.motoreturndat);
|
|||
|
|
}
|
|||
|
|
return err;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD><EFBFBD>ֹͣ
|
|||
|
|
int RyiMotoStop(u8 devIdx)
|
|||
|
|
{
|
|||
|
|
int err = 0;
|
|||
|
|
err = ModbusComm16(0,devIdx, MODBUS_WR, BITMOVEADDR, BITSTOPCMD, &g_rydriverctrl.motoreturndat);
|
|||
|
|
return err;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//<2F><>ǰλ<C7B0>ø<EFBFBD><C3B8><EFBFBD>
|
|||
|
|
int SetRyiCurPos(u8 devIdx, s16 pos)
|
|||
|
|
{
|
|||
|
|
int err = 0;
|
|||
|
|
err = ModbusComm16(0,devIdx, MODBUS_WR, 9472, pos, &g_rydriverctrl.motoreturndat);
|
|||
|
|
return err;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//<2F><>ǰλ<C7B0><CEBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
int RyiMotoSetCurPosZero(u8 devIdx)
|
|||
|
|
{
|
|||
|
|
int err = 0;
|
|||
|
|
err = ModbusComm16(0,devIdx, MODBUS_WR, BITMOVEADDR, BITSETCPOSZEROCMD, &g_rydriverctrl.motoreturndat);
|
|||
|
|
return err;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD><EFBFBD>Ӧλ<D3A6><CEBB>
|
|||
|
|
int RyiMotoToPos(u8 devIdx, u16 pos)
|
|||
|
|
{
|
|||
|
|
int err = 0;
|
|||
|
|
err = ModbusComm16(0,devIdx, MODBUS_WR, BITTOPOSADDR, pos, &g_rydriverctrl.motoreturndat);
|
|||
|
|
return err;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
|
|||
|
|
//<2F><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>λ<EFBFBD><CEBB> <20><>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
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;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//<2F><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>״̬ <20><>ǰָ<C7B0><D6B8><EFBFBD>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD><EFBFBD>0<EFBFBD><30>δ<EFBFBD><CEB4><EFBFBD>ɣ<EFBFBD>1<EFBFBD><31><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 2<><32><EFBFBD><EFBFBD>ת 3<><33><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
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
|