dd编程
㈠ 什么是编程器固件呢与dd固件有什么区别
用电脑比喻通俗的来说,官方的固件就是电脑的操作系统,Xp、win7等,但是每次开机都要通过BIOS自检、再加载系统文件,编程器固件就是包含两者
㈡ DD马达用plc编程软件写程序时,准备信号是常通的还是触发的
1、在无报警的情况下,伺服驱动器接收到上位机的准备好信号,主电路开始上电。
2、伺服驱动器主电路上电完成后,输出一个伺服准备好信号。
3、上位机在接收到伺服准备好信号后,发出使能信号,启动。
4、脉冲和方向就控制了电机转的圈数和方向。
㈢ C语言编程,输入是yyyy-month-dd格式的日期 ,求出K天后的日期
/*--------------------------------------------
* FUNC: 日期计算处理函数 CalcDate
* PARA:
* type
* 1: 获取date1当月的第一天 赋值到date2 其他参数无效
* 2: 获取date1当月的最后一天 赋值到date2 其他参数无效
* 3: 获取date1的num天之后的日期 赋值到date2, 当num为负值时获取date1之前的日期
* 4: 获取date1的num月之后的日期 赋值到date2, 当num为负值时获取date1之前的日期
* 若大于月末则赋值月末
* 5: 获取date1到date2之间的天数 赋值到num, 当date1大于date2时, num为负值
* 6: 获取date1到date2之间的月数 赋值到num, 当date1大于date2时, num为负值
* 7: 获取date1的num月之后的月末日期 赋值到date2, 当num为负值时获取date1之前的月末日期
* 8: 获取date1的num月之后的日期 赋值到date2, 当num为负值时获取date1的num月前的日期;若date1为20120229 num为12则date2为20130228
*
* date1: 格式YYYYMMDD, 输入参数
* date2: 格式YYYYMMDD, 输入参数/输出参数
* num: 数字, 输入参数/输出参数 可正可负
*
* RETURN VALUE:
* 0: 计算成功
* 非0: 计算失败
*
* NOTICE: date2作为出口参数时不能是无结束符的字符串的中间字段
* 因为赋值时将会在date2的后面增加字符串结束符
*
*--------------------------------------------*/
int CalcDate(int type, const char *date1, char *date2, int *num)
{
int Mday[]={29,31,28,31,30,31,30,31,31,30,31,30,31};
int result;
int month;
int yy, mm, dd, yy1, mm1;
char year[4+1], mon[2+1], day[2+1];
EXEC sql BEGIN DECLARE SECTION;
char datebeg[8+1];
char dateend[8+1];
int inputnum;
EXEC SQL END DECLARE SECTION;
result = checkDate(date1);
if ( result != 0 ) return result*10+2;
if ( type == 1 )
{
sprintf(date2, "%6.6s01", date1);
return 0;
}
if ( type == 2 )
{
memset(mon, 0, sizeof(mm));
memcpy(mon, date1+4, 2);
mm = atol(mon);
sprintf(date2, "%6.6s%02d", date1, Mday[mm-LeapFebruary(date1)]);
return 0;
}
if ( type == 3 )
{
memset(datebeg, 0, sizeof(datebeg));
memset(dateend, 0, sizeof(dateend));
memcpy(datebeg, date1, 8);
inputnum = *num;
EXEC SQL select to_char((to_date(:datebeg,'yyyymmdd') + :inputnum),'yyyymmdd') into :dateend from al;
if ( sqlca.sqlcode != 0 ) return sqlca.sqlcode;
memcpy(date2, dateend, 8);
return 0;
}
if ( type == 4 || type == 7 )
{
memset(year, 0, sizeof(year));
memset(mon, 0, sizeof(mon));
memset(day, 0, sizeof(day));
memcpy(year, date1, 4);
memcpy(mon, date1+4, 2);
memcpy(day, date1+6, 2);
yy = atol(year);
mm = atol(mon);
dd = atol(day);
month = yy*12 + mm - 1;
month += *num;
yy = month/12;
mm = month%12 + 1;
sprintf(date2, "%04d%02d%02d", yy, mm, dd);
if ( type == 4 )
{
if ( dd > Mday[mm-LeapFebruary(date2)] )
dd = Mday[mm-LeapFebruary(date2)];
}
if ( type == 7 )
{
dd = Mday[mm-LeapFebruary(date2)];
}
sprintf(date2, "%04d%02d%02d", yy, mm, dd);
return 0;
}
if ( type == 5 )
{
result = checkDate(date2);
if ( result != 0 ) return result*10+4;
memset(datebeg, 0, sizeof(datebeg));
memset(dateend, 0, sizeof(dateend));
memcpy(datebeg, date1, 8);
memcpy(dateend, date2, 8);
EXEC SQL select (to_date(:dateend,'yyyymmdd')-to_date(:datebeg,'yyyymmdd')) into :inputnum from al;
if ( sqlca.sqlcode != 0 ) return sqlca.sqlcode;
*num = inputnum;
return 0;
}
if ( type == 6 )
{
result = checkDate(date2);
if ( result != 0 ) return result*10+7;
memset(year, 0, sizeof(year));
memset(mon, 0, sizeof(mon));
memcpy(year, date1, 4);
memcpy(mon, date1+4, 2);
yy = atol(year);
mm = atol(mon);
memset(year, 0, sizeof(year));
memset(mon, 0, sizeof(mon));
memcpy(year, date2, 4);
memcpy(mon, date2+4, 2);
yy1 = atol(year);
mm1 = atol(mon);
*num = (yy1-yy)*12 + (mm1-mm);
return 0;
}
if ( type == 8 )
{
memset(datebeg, 0, sizeof(datebeg));
memset(dateend, 0, sizeof(dateend));
memcpy(datebeg, date1, LEN_DATE);
inputnum = *num;
EXEC SQL select to_char(add_months(to_date(:datebeg,'yyyymmdd'),:inputnum),'yyyymmdd') into :dateend from al;
if ( sqlca.sqlcode != 0 ) return sqlca.sqlcode;
memcpy(date2, dateend, LEN_DATE);
return 0;
}
}