#include <stdio.h>
#define xspeed50 2728
#define xspeed75 2046
#define xspeed100 1364
#define xspeed125 1136
#define xspeed150 909
#define xspeed175 796
#define xspeed200 682
#define xspeed225 614
#define xspeed250 546
#define xspeed275 500
#define xspeed300 455
#define xspeed325 423
#define xspeed350 390
#define xspeed375 366
#define xspeed400 341
#define xspeed425 322
#define xspeed450 303
#define xspeed475 288
#define xspeed500 273
#define xspeed525 261
#define xspeed550 248
#define xspeed575 238
#define xspeed600 228
#define yspeed50 1875
#define yspeed100 937
#define yspeed150 625
#define yspeed200 469
#define yspeed250 375
#define yspeed300 312
#define yspeed350 268
#define yspeed400 234
#define yspeed450 208
#define yspeed500 188
const unsigned short xCurve[20][2]=
{
xspeed100,7,
xspeed125,9,
xspeed150,11,
xspeed175,13,
xspeed200,15,
xspeed225,16,
xspeed250,18,
xspeed275,20,
xspeed300,22,
xspeed325,24,
xspeed350,26,
xspeed375,28,
xspeed400,29,
xspeed425,31,
xspeed450,33,
xspeed475,35,
xspeed500,37,
xspeed525,39,
xspeed550,40,
xspeed575,42,
};
unsigned short yCurve[10][2]=
{
yspeed100,11,
yspeed150,11,
yspeed200,15,
yspeed250,18,
yspeed300,22,
yspeed350,26,
yspeed400,29,
yspeed450,33,
yspeed500,37,
};
unsigned short xIndexNum;
unsigned short xMoveCurve[41][2];
void xTCurveCal(unsigned char speedLevel, unsigned short pulseNum)
{
unsigned char i;
unsigned short pulseNumTemp;
unsigned short pulseNumTempLast;
unsigned short pulseNumHalf;
unsigned char accelPulseIndexNum;
unsigned char uniformPulseIndexNum;
unsigned char decelPulseIndexNum;
unsigned char totalPulseIndexNum;
pulseNumHalf = pulseNum / 2;
printf("pulseNumHalf: %u\n", pulseNumHalf);
pulseNumTemp = 0;
pulseNumTempLast = 0;
printf("pulseNumTemp: %u, pulseNumTempLast: %u\n", pulseNumTemp, pulseNumTempLast);
if (speedLevel > 19)
{
xIndexNum = 0;
printf("speedLevel exceeds limit, xIndexNum: %u\n", xIndexNum);
return;
}
if (pulseNum == 0)
{
xIndexNum = 0;
printf("pulseNum is 0, xIndexNum: %u\n", xIndexNum);
return;
}
else if (pulseNum == 1)
{
xMoveCurve[0][0] = xCurve[0][0];
xMoveCurve[0][1] = pulseNum;
xIndexNum = 1;
printf("pulseNum is 1, xMoveCurve[0][0]: %u, xMoveCurve[0][1]: %u, xIndexNum: %u\n", xMoveCurve[0][0], xMoveCurve[0][1], xIndexNum);
return;
}
for (i = 0; i < (speedLevel + 1); i++)
{
pulseNumTemp += xCurve[i][1];
printf("acceleration segment, i: %u, pulseNumTemp: %u\n", i, pulseNumTemp);
if (pulseNumTemp < pulseNumHalf)
{
xMoveCurve[i][0] = xCurve[i][0];
xMoveCurve[i][1] = xCurve[i][1];
printf("xMoveCurve[%u][0]: %u, xMoveCurve[%u][1]: %u\n", i, xMoveCurve[i][0], i, xMoveCurve[i][1]);
}
else
{
xMoveCurve[i][0] = xCurve[i][0];
xMoveCurve[i][1] = pulseNumHalf - pulseNumTempLast;
pulseNumTemp = pulseNumHalf;
printf("xMoveCurve[%u][0]: %u, xMoveCurve[%u][1]: %u\n", i, xMoveCurve[i][0], i, xMoveCurve[i][1]);
break;
}
pulseNumTempLast = pulseNumTemp;
printf("pulseNumTempLast: %u\n", pulseNumTempLast);
}
accelPulseIndexNum = i;
printf("accelPulseIndexNum: %u\n", accelPulseIndexNum);
xMoveCurve[i][0] = xCurve[i - 1][0];
xMoveCurve[i][1] = pulseNum - pulseNumTemp - pulseNumTemp;
printf("uniform segment, xMoveCurve[%u][0]: %u, xMoveCurve[%u][1]: %u\n", i, xMoveCurve[i][0], i, xMoveCurve[i][1]);
if (xMoveCurve[i][1] != 0)
{
i++;
uniformPulseIndexNum = 1;
printf("uniformPulseIndexNum: %u\n", uniformPulseIndexNum);
}
else
{
uniformPulseIndexNum = 0;
printf("uniformPulseIndexNum: %u\n", uniformPulseIndexNum);
}
decelPulseIndexNum = accelPulseIndexNum;
totalPulseIndexNum = accelPulseIndexNum + uniformPulseIndexNum + decelPulseIndexNum;
printf("decelPulseIndexNum: %u, totalPulseIndexNum: %u\n", decelPulseIndexNum, totalPulseIndexNum);
for (i; i < totalPulseIndexNum; i++)
{
xMoveCurve[i][0] = xMoveCurve[totalPulseIndexNum - i - 1][0];
xMoveCurve[i][1] = xMoveCurve[totalPulseIndexNum - i - 1][1];
printf("deceleration segment, xMoveCurve[%u][0]: %u, xMoveCurve[%u][1]: %u\n", i, xMoveCurve[i][0], i, xMoveCurve[i][1]);
}
xIndexNum = totalPulseIndexNum;
printf("xIndexNum: %u\n", xIndexNum);
}
int main () {
printf("运行过程\n");
xTCurveCal(3,330);
printf("运行结果\n");
printf("xIndexNum = %d;\n",xIndexNum);
int i;
for(i=0;i<41;i++)
{
printf("xMoveCurve[%d][0] = %d;\n",i,xMoveCurve[i][0]);
printf("xMoveCurve[%d][1] = %d;\n",i,xMoveCurve[i][1]);
}
return 0;
}