»ªÖÐÊý¿ØPLC±à³Ì˵Ã÷Êé
¸Ãº¯Êý·µ»Ø1±íʾָ¶¨ÖáÒÑÍ£Ö¹Ô˶¯£»·µ»Ø0±íʾÖáÕýÔÚÒÆ¶¯
µÚÁùÕ ¸¨ÖúÖ¸ÁîM¡¢S¡¢T¡¢BµÄ¿ØÖÆ
ÔÚPLC³ÌÐòÖУ¬¶Ô¸¨ÖúÖ¸Áî½øÐпØÖÆÉæ¼°µ½¸¨ÖúÖ¸ÁîÏìÓ¦º¯Êý¼°Æä³õʼ»¯¡¢PLCÓëÊý¿ØÏµÍ³µÄͨÐŵȹý³Ì¡£±¾Õ½«Ê¾Àý˵Ã÷¶Ô¸¨ÖúÖ¸ÁîµÄ¿ØÖÆ·½·¨¡£ Êý¿ØÏµÍ³ÔÚ×Ô¶¯ÔËÐйý³ÌÖÐÅöµ½¸¨ÖúÖ¸ÁîMSTBʱ£¬½«ÏòPLC·¢ËÍMSTBÖ¸ÁîÐźš¢µ÷ÓÃÏàÓ¦µÄÏìÓ¦º¯Êý²¢µÈ´ýPLC¸ø³ö¶¯×÷Íê³ÉµÄÓ¦´ðÐźš£MSTBÏìÓ¦º¯ÊýÔÚÖ´ÐÐÍêÏà¹Ø¶¯×÷ºó£¬Ó¦ÏòÊý¿ØÏµÍ³¸ø³öÓ¦´ðÐźţ¬·ñÔòÊý¿ØÏµÍ³½«Ò»Ö±µÈ´ý¡£
PLCÏòÊý¿ØÏµÍ³¸ø³öÓ¦´ðÐźÅÓÐÁ½ÖÖ·½Ê½£º
1) PLCÔÚÍê³ÉËùÓÐÏàÓ¦¶¯×÷ºóÔÙ¸ø³öÓ¦´ðÐźţ»
2) PLC¼Ç¼ÏÂÏàÓ¦Ö¸ÁÂíÉϸø³öÓ¦´ðÐźţ¬È»ºóÔÙÖ´ÐÐÏàÓ¦¶¯×÷¡£
6.1 ¸¨ÖúÖ¸ÁîÏìÓ¦º¯Êý¼°Æä³õʼ»¯
Êý¿ØÏµÍ³ÔÚ×Ô¶¯ÔËÐйý³ÌÖÐÅöµ½¸¨ÖúÖ¸ÁîMSTBʱ£¬½«ÏòPLC·¢ËÍMSTBÖ¸ÁîÐźŲ¢µ÷ÓÃÏàÓ¦µÄÏìÓ¦º¯Êý¡£ÕâЩÏìÓ¦º¯Êý±ØÐëÔÚPLC³õʼ»¯Ê±£¬¼´ÔÚº¯Êýinit()ÖУ¬µ÷Óú¯Êýset_mst_func()À´Ö¸¶¨£¬Èç¹û²»Ö¸¶¨£¬ÏµÍ³½«µ÷ÓÃȱʡµÄÏìÓ¦º¯Êý£¬¸Ãº¯Êý½«¶ÔMSTBÖ¸Áî²»×÷ʵ¼Ê´¦Àí£¬Ö»ÊǶÔÊý¿ØÏµÍ³¸ø³ö¸¨ÖúÖ¸ÁîÖ´ÐÐÍêµÄÐźš£¸Ãº¯ÊýµÄÔÐͶ¨ÒåΪ£º
void set_mst_func( int ch, //ͨµÀ char name, //´úÂëÀàÐÍ£ºM¡¢S¡¢T¡¢B¡¢E void (*mst_func)(int)); //ÏìÓ¦º¯ÊýµØÖ· PLC¸¨ÖúÖ¸ÁîµÄ³õʼ»¯¿ÉʾÀýÈçÏ£¬EÖ¸ÁîÉÔºó±ã»á˵Ã÷£º
void exec_M(int ch) { mod_M_code(ch)=-1; } void exec_S(int ch) { mod_M_code(ch)=-1; } void exec_T(int ch) { mod_M_code(ch)=-1; } void exec_B(int ch) { mod_M_code(ch)=-1; } void exec_MST_mod(int ch) { ; } void init(void) //ϵͳ³õʼ»¯³ÌÐò {
set_mst_func(0,'M',exec_M); //¸¨Öú¹¦ÄÜMÖ¸ÁîÏìÓ¦º¯ÊýÉèÖà set_mst_func(0,'T',exec_T); //µ¶¿â¹¦ÄÜTÖ¸ÁîÏìÓ¦º¯ÊýÉèÖÃ
49
»ªÖÐÊý¿ØPLC±à³Ì˵Ã÷Êé
}
set_mst_func(0,'S',exec_S); //Ö÷ÖáËٶȹ¦ÄÜSÖ¸ÁîÏìÓ¦º¯ÊýÉèÖà set_mst_func(0,'B',exec_B); //µ¶¿â¹¦ÄÜTÖ¸ÁîÏìÓ¦º¯ÊýÉèÖà set_mst_func(0,'E',exec_MST_mod); //MSTģָ̬ÁîÏìÓ¦º¯ÊýÉèÖà ¡¡¡¡
6.2·ÃÎʸ¨ÖúÖ¸Áîģֵ̬
¶ÔÓÚMSTBµÄµ±Ç°ÃüÁîÖµ£¬¼´Êý¿Ø¼Ó¹¤³ÌÐò´«µÝ¹ýÀ´µÄ¸¨ÖúÖ¸ÁPLC³ÌÐò¿Éͨ¹ýÈçÏÂºê½øÐзÃÎÊ£º 6.2.1 ͨµÀµ±Ç°µÄM´úÂë
#define ch_M_code(x) (F_i[(x)*20+164]) //M´úÂë
ÆäÖкê²ÎÊýx±íʾͨµÀºÅ£¬ÆäÖµ¿ÉΪ0,1,2,3£¬¼´ÏµÍ³×î´ó¿ÉÓÐ4¸öͨµÀ¡£Àý£º
ͨµÀ0µ±Ç°µÄM´úÂëΪ ch_M_code(0) 6.2.2 ͨµÀµ±Ç°µÄT´úÂë
#define ch_T_code(x) (F_i[(x)*20+165]) //T´úÂë
ÆäÖкê²ÎÊýx±íʾͨµÀºÅ£¬ÆäÖµ¿ÉΪ0,1,2,3£¬¼´ÏµÍ³×î´ó¿ÉÓÐ4¸öͨµÀ¡£ 6.2.3 ͨµÀµ±Ç°µÄB´úÂë
#define ch_B_code(x) (F_i[(x)*20+166]) //B´úÂë
ÆäÖкê²ÎÊýx±íʾͨµÀºÅ£¬ÆäÖµ¿ÉΪ0,1,2,3£¬¼´ÏµÍ³×î´ó¿ÉÓÐ4¸öͨµÀ¡£ 6.2.4 ͨµÀµ±Ç°µÄS´úÂë
#define ch_S_code(x) (F_i[(x)*20+167]) //S´úÂë
ÆäÖкê²ÎÊýx±íʾͨµÀºÅ£¬ÆäÖµ¿ÉΪ0,1,2,3£¬¼´ÏµÍ³×î´ó¿ÉÓÐ4¸öͨµÀ¡£
6.3 ÔÚPLC³ÌÐòÖпØÖÆÏµÍ³¸¨ÖúÖ¸Áîģֵ̬ÓëϵͳӦ´ð
PLC³ÌÐò¿ÉÒÔ¸ü¸ÄÊý¿ØÏµÍ³µÄMSTBģֵ̬£¬¼´ÏòÊý¿ØÏµÍ³·¢Ë͸¨ÖúÖ¸Áî»òÆäÔËÐÐÇé¿ö¡£¾ßÌåʵÏÖÊǶԺêch_mst_mod(ch,x)½øÐи³ÖµÏà¹ØÖµ¡£Îª±ãÓÚ¼ÇÒä·½±ã£¬ÏµÍ³ÌṩÁËÈçϺê¶Ô¸¨ÖúÖ¸Áî½øÐпØÖÆ£º 6.3.1 ͨµÀµ±Ç°µÄM´úÂëģֵ̬
#define mod_M_code(ch)
(*ch_mst_mod(ch,0))//M´úÂëģʽ
50
»ªÖÐÊý¿ØPLC±à³Ì˵Ã÷Êé
ÆäÖкê²ÎÊých±íʾͨµÀºÅ£¬ÆäÖµ¿ÉΪ0,1,2,3£¬¼´ÏµÍ³×î´ó¿ÉÓÐ4¸öͨµÀ¡£ 6.3.2 ͨµÀµ±Ç°µÄS´úÂëģֵ̬
#define mod_S_code(ch) (*ch_mst_mod(ch,1)) //S´úÂëģʽ
ÆäÖкê²ÎÊých±íʾͨµÀºÅ£¬ÆäÖµ¿ÉΪ0,1,2,3£¬¼´ÏµÍ³×î´ó¿ÉÓÐ4¸öͨµÀ¡£ 6.3.3 ͨµÀµ±Ç°µÄT´úÂëģֵ̬
#define mod_T_code(ch)
(*ch_mst_mod(ch,2)) //T´úÂëģʽ
ÆäÖкê²ÎÊých±íʾͨµÀºÅ£¬ÆäÖµ¿ÉΪ0,1,2,3£¬¼´ÏµÍ³×î´ó¿ÉÓÐ4¸öͨµÀ¡£ 6.3.4 ͨµÀµ±Ç°µÄB´úÂëģֵ̬
#define mod_B_code(ch) (*ch_mst_mod(ch,3))//B´úÂëģʽ
ÆäÖкê²ÎÊých±íʾͨµÀºÅ£¬ÆäÖµ¿ÉΪ0,1,2,3£¬¼´ÏµÍ³×î´ó¿ÉÓÐ4¸öͨµÀ¡£ µ±Ö´ÐС° *ch_mst_mod(ch,x) = -1¡±ºó£¬Êý¿ØÏµÍ³½«ÈÏΪÏà¹Ø¸¨ÖúÖ¸ÁîÖ´ÐÐÍê±Ï£¬²¢×Ô¶¯¼ÌÐøÖ´ÐÐÏÂÒ»ÌõÊý¿Ø¼Ó¹¤Ö¸Áî¡£ÈçÓï¾ä£º
mod_M_code(0)=-1
½«±íʾµ±Ç°M´úÂëÒÑÖ´ÐÐÍê³É£¬Êý¿ØÏµÍ³½«×Ô¶¯ÔËÐÐÏÂÒ»ÌõÖ¸Áî¡£
µ«Èç¹ûÔÚÕâ֮ǰÖñêÖ¾¡°*msthold_dis(ch)|=CH_M_HDIS¡±£¬Ò²¿ÉÈÃÊý¿ØÏµÍ³¼ÌÐøµÈ´ý£¬Ö±µ½PLCÇåµô¸Ã±êÖ¾¡£
Òò´Ë£¬PLCÒ»¶¨ÒªÔÚÏà¹Ø¸¨ÖúÖ¸ÁîÖ´ÐÐÍêºó£¬²ÅÄܽ«¶ÔÓ¦µÄģ̬±äÁ¿Öµ¸³ÖµÎª¡°-1¡±¡£ÔÚÓÐЩ³¡ºÏ£¬PLC¿ÉÒÔÔÚ²»Ö´ÐÐÍêÏà¹Ø¸¨ÖúÖ¸Áîʱ£¬ÈÃϵͳ¼ÌÐøÖ´ÐÐÏÂÒ»Ö¸Áî¡£Õâʱ£¬¿É¶Ô¸¨ÖúÖ¸ÁîµÄ»º³åģ̬½øÐи³Öµ£¬Ê¹µÃϵͳÏòPLC·¢ËÍ¡°E¡±Ö¸Á²¢Ö´ÐÐÏà¹Ø¸¨ÖúÖ¸Áî¡£
Àý£º PLC³õʼ»¯Ê±¿ÉÇ¿ÖÆÏµÍ³µÄÖ÷ÖáתËÙSΪ500ת/·ÖÖÓ¡£Êý¿ØÏµÍ³ÔÚ̽µÃSģֵ̬±»PLC¸Ä±äºó£¬»áÏòPLC·¢Ë͸¨ÖúÖ¸Áî¡°E¡±£¬²¢µ÷ÓÃÆä¶ÔÓ¦µÄÏìÓ¦º¯Êý¡£
#define mod_S_buf (*ch_mst_mod(0,7)) //δִÐÐÍêµÄSÖ¸Á³åÇø void exec_M(int ch) {; } void exec_T(int ch) {; } void exec_B(int ch) {; }
#define spdl_cmd R_ui[46/2] void exec_MST_mod(int ch) { if(ch==0) //ÉèϵͳֻÓÐ0ͨµÀ´æÔÚ spdl_cmd=mod_S_buf; // ±£´æÖ÷ÖáÃüÁÔÚÖ÷Öá¿ØÖÆÄ£¿éº¯ÊýÖÐÔÙ´¦Àí }
51
»ªÖÐÊý¿ØPLC±à³Ì˵Ã÷Êé
void exec_S(int ch) {//SÖ¸Áî´¦Àí if((mst_lock()==1)||(mod_S_code(ch)<0)) { //MSTËø×¡ mod_S_code(ch)=-1; return; } mod_S_buf=mod_S_code(ch); mod_S_code(ch)=-1; //¸æËßÊý¿ØÏµÍ³SÖ¸ÁîÖ´ÐÐÍê±Ï£¬¿É×Ô¶¯ÔËÐÐÏÂÌõÖ¸Áî }
void init(void) //ϵͳ³õʼ»¯³ÌÐò {
set_mst_func(0,'M',exec_M); //¸¨Öú¹¦ÄÜMÖ¸ÁîÏìÓ¦º¯ÊýÉèÖà set_mst_func(0,'T',exec_T); //µ¶¿â¹¦ÄÜTÖ¸ÁîÏìÓ¦º¯ÊýÉèÖà set_mst_func(0,'S',exec_S); //Ö÷ÖáËٶȹ¦ÄÜSÖ¸ÁîÏìÓ¦º¯ÊýÉèÖà set_mst_func(0,'B',exec_B); //µ¶¿â¹¦ÄÜTÖ¸ÁîÏìÓ¦º¯ÊýÉèÖà set_mst_func(0,'E',exec_MST_mod); //MSTģָ̬ÁîÏìÓ¦º¯ÊýÉèÖà mod_S_buf=500; ¡¡¡¡¡ }
6.4 ¸¨ÖúÖ¸Áî¿ØÖÆÊ¾Àý
»»µ¶TÖ¸ÁîµÄ¿ØÖƿɲμûµÚËÄÕµڽڵÄʾÀý¡£±¾½Ú½«¸ø³öM´úÂë¿ØÖÆµÄʾÀý¡£S´úÂëµÄ¿ØÖÆÊ¾Àý½«ÔÚµÚ°ËÕ¸ø³ö¡£
¡¡¡¡
void exec_M(int ch); void init(void) //ϵͳ³õʼ»¯³ÌÐò {
set_mst_func(0,'M',exec_M); //¸¨Öú¹¦ÄÜMÖ¸ÁîÏìÓ¦º¯ÊýÉèÖà ¡¡¡¡ }
void exec_M(int ch) { unsigned den; if(mac_lock()||mst_lock()) //»ú´²Ëø×¡»òMSTËø×¡ { mod_M_code(ch)= -1; //M´úÂëÍ£ return; }
52
Ïà¹ØÍÆ¼ö£º