optical/EMBOS/Users/EmbFunc/busmotos/ruanyictrl.c

195 lines
3.5 KiB
C
Raw Permalink Normal View History

2025-09-04 01:45:08 +00:00
#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