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