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;
    }
}
