Показано с 1 по 10 из 10

Тема: Макрос для панели оператора

  1. #1

    По умолчанию Макрос для панели оператора

    Добрый день, столкнулся со сложностями по созданию макроса. Есть четыре сетевые переменные значение которых приходят с реле, необходимо при определенных значениях этих сетевых переменных, чтобы появлялось текстовое сообщение при определенной комбинации: фаза1, фаза2 , фаза3. Помогите написать макрос и объясните для чего нужен раздел глобальный макрос

  2. #2

    По умолчанию

    Вы уже создали проект с переменными? Можете выложить в тему?

  3. #3
    Пользователь Аватар для petera
    Регистрация
    06.05.2011
    Адрес
    Минск
    Сообщений
    4,187

    По умолчанию

    Цитата Сообщение от fever dream Посмотреть сообщение
    Добрый день, столкнулся со сложностями по созданию макроса. Есть четыре сетевые переменные значение которых приходят с реле, необходимо при определенных значениях этих сетевых переменных, чтобы появлялось текстовое сообщение при определенной комбинации: фаза1, фаза2 , фаза3. Помогите написать макрос и объясните для чего нужен раздел глобальный макрос
    В глобальном макросе определяешь глобальные переменные и можно написать свои функции, которые используются в других, обычных макросах
    Например глобальный макрос
    Захват-22.png
    Скрытый текст:
    Код:
    #define gotoxy   GOTOXY	//+
    #define clrscr   CLRSCR	//+
    #define getch    GETCH	//+
    #undef putchar
    #define putchar  PUTCHAR	//+
    #define kbhit    KBHIT	//+
    #define printf   PRINTF	//+
    
    //
    unsigned long clock(void);
    void INITIAL(int Lines, int Columns);
    void GOTOXY(int xpos, int ypos);
    void CLRSCR(void);
    int GETCH(void);
    int PUTCHAR(int cb);
    int KBHIT(void);
    int PRINTF(char *format, ...);
    
    #define KEY_UP 72 //
    #define KEY_DOWN 80 //
    #define KEY_LEFT 75 //
    #define KEY_RIGHT 77 //
    #define KEY_SPACE 32 //
    #define KEY_ESC 27 //
    #define KEY_ENTER 13 //
     
    #define SIZEX 16
    #define SIZEY 17
    #define FMAP_COUNTS 7 //
     
    #define TRUE 1
    #define FALSE 0
     
    #define SCR_SP  '\x95' //
    //#define SCR_SP  '\xB0' //
    #define SCR_OB  '\x7F' // 
    
    char* GAME_TITLE;
    char* GAME_MENU;
    
    int screen[SIZEX][SIZEY] = {0}; //
    int map[4][4]; //
    int px, py, score, nextmap;
    int fmap[FMAP_COUNTS][4][4];
    
    
    unsigned long CLOCK(void)
    {
        return *(DWORD*)(PSW + 38) * 100;
    }
    
    void print(void) //
    {
        int i, j;
        int buff[SIZEX][SIZEY];
        
        for(i = 0; i < SIZEY; i++) for(j = 0; j < SIZEX; j++) buff[j][i] = screen[j][i]; //
        for(i = 0; i < 4; i++) for(j = 0; j < 4; j++) if(map[j][i]) buff[j + px][i + py] = 1; //
     
        gotoxy(0, 0); //
        for(i = 0; i < SIZEY; i++)
        {
            for(j = 0; j < SIZEX; j++) 
            {
                putchar(buff[j][i] == 0 ? SCR_SP : SCR_OB); //
            }
            putchar('\n');
        }
        
        gotoxy(SIZEX + 1, 0); //
        printf("Score: %i", score); //
    }
    
    void printnextmap(void) //
    {
        int i, j;
     
        gotoxy(SIZEX + 1, 2);
        printf("Next: "); 
     
        for(i = 0; i < 4; i++)
        {
            gotoxy(SIZEX + 2, i + 3);
            for(j = 0; j < 4; j++)
            {
                putchar(fmap[nextmap][j][i] == 0 ? ' ' : SCR_OB); //
            }
        }
    }
     
    int getkey(void)
    {
        int c;
        if(kbhit()) //
        {
            if((c = getch()) == 224) c = getch(); //
            return c;
        }
        return FALSE;
    }
    
    int valnewpos(int x, int y) //
    {
        int i, j;
        if(x < 0) return FALSE;
        for(i = 0; i < 4; i++)
        {
            for(j = 0; j < 4; j++)
            {
                if(map[j][i])
                {
                    if((j + x >= SIZEX) || (i + y >= SIZEY)) return FALSE;
                    if(screen[j + x][i + y])
                    {
                        return FALSE;
                    }
                }
            }
        }
        return TRUE;
    }
     
    void rotatemap(void) //
    {
    #define inv(x) ((x * (-1)) + 3)
    //    inv(0) => 3
    //    inv(1) => 2
    //    inv(2) => 1
    //    inv(3) => 0
        
    //    /* Optimize! 
        int _map[4][4];
        int i, j, sx = 4, sy = 4;
     
        for(i = 0; i < 4; i++)
            for(j = 0; j < 4; j++) 
            {
                _map[j][i] = map[j][i];
                if(map[j][i])
                {
                    if(i < sx) sx = i;
                    if(inv(j) < sy) sy = inv(j);
                }
                map[j][i] = 0;
            }
     
        for(i = 0; i < 4; i++)
            for(j = 0; j < 4; j++)
                if(_map[inv(i)][j]) map[j - sx][i - sy] = 1;
     
        if(!valnewpos(px,py)) for(i = 0; i < 4; i++) for(j = 0; j < 4; j++) map[j][i] = _map[j][i];
    }
     
    int rnd(int max) //
    {
        max++;
    //    return (int)(rand() * max / RAND_MAX);
    //return (int)RAND() % max;
    return (int)rand() % max;
    }
     
    void sleep(int milsec) //
    {
     //   clock_t t = clock();
     //   while(clock() - t < milsec);
     Delay(milsec);
    }
     
    void deleteline(void) //
    {
        int i, j, k, cl;
     
        for(i = SIZEY - 1; i >= 0; i--)
        {
            cl = 1;
            for(j = 0, cl = 1; j < SIZEX; j++)
            {
                if(!screen[j][i]) cl = 0;
            }
            if(cl)
            {
    //            /* Animation 
                gotoxy(0, i);
                for(k = 0; k < SIZEX; k++) putchar('_'), sleep(20);
    //            /* --------- 
                
                score += (((i * (-1)) + SIZEY) * 10);
     
                for(k = i; k > 0; k--)
                {
                    for(j = 0; j < SIZEX; j++)
                    {
                        screen[j][k] = screen[j][k - 1];
                    }
                }
                i++;
                print();
            }
        }
    }
     
    void createmap(void) //
    {
        int i, j;
     
        for(i = 0; i < 4; i++)
            for(j = 0; j < 4; j++)
                map[j][i] = fmap[nextmap][j][i];
        py = 0;
        px = SIZEX / 2;
     
        nextmap = rnd(FMAP_COUNTS - 1);
        printnextmap();
    }
     
    void clearscreen(void) //
    {
        int i, j;
        for(i = 0; i < SIZEY; i++) 
            for(j = 0; j < SIZEX; j++) 
                screen[j][i] = 0;
    }
     
    void createrndscreen(void) //
    {
        int i, j, rn;
        clearscreen();
        rn = rnd(10);
        for(i = SIZEY - 1; i >= (SIZEY - 1) - rn; i--)
            for(j = 0; j < SIZEX; j++)
            {
                screen[j][i] = rnd(1);
            }
    }
     
    void startgame(void) //
    {
        int i, j, c;
        unsigned long tm;
     
        clrscr();
        px = SIZEX / 2;
        py = 0;
        score = 0;
     
        tm = CLOCK();
     
        nextmap = rnd(FMAP_COUNTS - 1);
        createmap();
     
        while(TRUE) 
        {
    	Delay(10); //----my debug  
            c = getkey();
            switch(c)
            {
            case KEY_UP:
                rotatemap();
                break;
            case KEY_SPACE:
                rotatemap();
                break;
            case KEY_DOWN:
                for(; valnewpos(px, py + 1); py++);
                for(i = 0; i < 4; i++)
                        for(j = 0; j < 4; j++)
                            if(map[j][i]) screen[px + j][py + i] = 1;
     
                print();
                deleteline();
                createmap();
                break;
            case KEY_LEFT:
                if(valnewpos(px - 1, py)) px--;
                break;
            case KEY_RIGHT:
                if(valnewpos(px + 1, py)) px++;
                break;
            case 'p':
                getch();
                break;
            case KEY_ESC:
                return;
            }
     
    //       if((CLOCK() - tm) > 320)
            if((CLOCK() - tm) > 520)
            {
                tm = CLOCK();
                if(!(valnewpos(px, py + 1)))
                {
                    for(i = 0; i < 4; i++)
                        for(j = 0; j < 4; j++)
                            if(map[j][i]) screen[px + j][py + i] = 1;
     
                    createmap();
                    deleteline();
                }
                else py++;
            }
     
            print();
     
            for(i = 0; i < SIZEX; i++) 
            {
                if(screen[i][0])
                {
     //               CLRSCR();
                    gotoxy(30, SIZEY - 1);
                    printf("GAME OVER :(  ");
                    return;
                }
            }
        }
    }
    
    void gamemenu(void) //
    {
        int p = 1, c = 0;
        const char* GAME_MENU =  "\t" "\x1A" "1. Start\n"
                                 "\t 2. Start & Add Random Blocks\n"
                                 "\t 3. Info\n"
                                 "\t 4. Exit";
        clrscr(); printf("%s%s", GAME_TITLE, GAME_MENU);
        gotoxy(9, 8); 
        while(TRUE) //
        {
            c = getch();
     
            gotoxy(8, 8 + p - 1); //
            putchar(' ');
     
            switch(c)
            {
            case '1':
            case '2':
            case '3':
            case '4':
                p = c - '0';
            case KEY_ENTER:
                switch(p)
                {
                case 1:
                    clearscreen();
                    startgame();
                    gotoxy(20, SIZEY); printf("Press ESC to exit to main menu..."); while(getch() != KEY_ESC);
                    break;
                case 2:
                    clearscreen();
                    createrndscreen(); //
                    startgame();
                    gotoxy(20, SIZEY); printf("Press ESC for exit to main menu..."); while(getch() != KEY_ESC);
                    break;
                case 3:
                    clrscr();
    /*                
                    PRINTF( "%s%s", GAME_TITLE, 
                            "\t\x1B       Left \n"
                            "\t\x1A       Right\n"
                            "\t\x19       Put Down\n"
                            "\tSpace   Rotate\n"
                            "\tP       Pause\n"
                            "\tESC     Exit\n\n"
     
                            "Press any key...\n");
                            
    */
                    printf( "%s%s", GAME_TITLE, 
                            "\t\t\t<LEFT>           Left \n"
                            "\t\t\t<RIGHT>          Right\n"
                            "\t\t\t<DOWN>           Put Down\n"
                            "\t\t\t<UP> or <SPACE>  Rotate\n"
                            "\t\t\t<P>              Pause\n"
                            "\t\t\t<ESC>            Exit\n\n"
     
                            "Press any key... ");                        
                            getch(); if(kbhit()) getch();
                    break;
                case 4: return;
                }
                clrscr(); printf("%s%s", GAME_TITLE, GAME_MENU);
                p = 1;
                break;
            case KEY_UP:
                if(p > 1) p--;
                break;
            case KEY_DOWN:
                if(p < 4) p++;
                break;
            case KEY_ESC:
                return;
            }
            gotoxy(8, 8 + p - 1); //
            putchar('\x1A');
        }
    }
    //
    ///// CONSOLE  //////
    #include <stdarg.h>
    
    #define _lenBuff     1440  
    #define _Input       PSW[136]              
    #define _dwInput     *(DWORD*)(PSW + 136)
    #define _BuffScr      PSW[_ScrAddr]   
    #define _KbdStatus   PSW[135] 
    //----------------------
    #define ReversBit(reg, bitno) ((reg) ^= (1 << (bitno)))
    #define GetKbdStatus(bitno)   ((_KbdStatus) & (1 << (bitno)))
    #define ResetKbdStatus(bitno) ((_KbdStatus) &= ( ~ (1 << ((bitno)))))
    #define SetKbdStatus(bitno)   ((_KbdStatus) |= ( 1 << ((bitno))))
    //define (bitno) to KbdStatus 
    #define Shift           0       
    #define Ctrl            1       
    #define Repead          2       
    #define Caps            3       
    #define ru              4       
    #define en              5       
    #define ClrScreen       6
    //----------------------------
    #define ReversPSB(PSB_No)     PSB[(PSB_No) / 8] ^= (1 << ((PSB_No) % 8))
      
    static int _lTotal;          
    static int _cTotal;          
    const int _tabs = 8;
    static int _SIZE_Scr;
    static int _cCount, _lCount;
    static char _savMark;
    static BOOL _init;
    static BYTE *_pBuffScr;
    static int _ScrAddr;
    static int _stdinNoEmpty;
    
    void INITIAL(int Lines, int Columns)
    {
        _stdinNoEmpty = 0;
        _init = TRUE;
        SetKbdStatus(en);
    //    _KbdStatus = 32;
        _dwInput = 0;
        _lTotal = Lines;
        _cTotal = Columns;
        _SIZE_Scr = _lTotal * _cTotal;    
        _ScrAddr = PSW[10] - _SIZE_Scr/2;
        PSW[138] = _ScrAddr;
        CLRSCR();
        return;
    }
    //------------------------------------- 
    int GETCH(void)
    {
    #define first  blck.str[0]
    #define second blck.str[1]
        union pw {
    		int i;
    		char str[4];
    	};
        static int flag;
        static union pw blck;
        switch( flag) {
            case 1:
                flag = 0;
                if (! GetKbdStatus(Repead)) _dwInput = 0;
                else Delay(100);
                return second;        
            case 0:
                do {
                    Delay(5);
                    blck.i = _dwInput;
                    if (GetPSBStatus(4)) *_pBuffScr = '_';           //  Blink cursor 
                    else                 *_pBuffScr = _savMark;       //
                } while(_dwInput == NULL);
                *_pBuffScr = _savMark;
                if (strlen(blck.str) != 1) {
                    flag = 1;
                    ResetKbdStatus(Ctrl);
                    ResetKbdStatus(Shift);
                }
                else {
                    if (GetKbdStatus(Ctrl) && isalpha(first)) first = first & 0x1F;
                    else {
                        if (GetKbdStatus(Caps)) {
                            if ((first >= 0xE0) || isalpha(first)) ReversBit(first, 5);
                            else if (first == 0xB8) ReversBit(first, 4);
                        }
                    if (GetKbdStatus(Shift)) {
                        if (isupper(first)) first = tolower(first);
                        else if (islower(first)) first = toupper(first);
                        else if ((first == 0xB8) || (first == 0xA8))  ReversBit(first, 4);
                        else if (first >= 0xC0) ReversBit(first, 5);
                        else if (first == '1') first = '!';
                        else if ((first == '2') && GetKbdStatus(ru)) first = '\"';
                        else if (first == '2') first = '@';
                        else if ((first == '3') && GetKbdStatus(ru)) first = 0xB9;
                        else if (first == '3') first = '#';
                        else if ((first == '4') && GetKbdStatus(ru)) first = ';';
                        else if (first == '4') first = '$';
                        else if (first == '5') first = '%';
                        else if ((first == '6') && GetKbdStatus(ru)) first = ':';
                        else if (first == '6') first = '^';
                        else if ((first == '7') && GetKbdStatus(ru)) first = '?';
                        else if (first == '7') first = '&';
                        else if (first == '8') first = '*';
                        else if (first == '9') first = '(';
                        else if (first == '0') first = ')';
                        else if (first == '-') first = '_';
                        else if (first == '=') first = '+';
                        else if (first == '\'') first = '\"';
                        else if (first == '[') first = '{';
                        else if (first == ']') first = '}';
                        else if (first == '\\') first = '|';
                        else if (first == ';') first = ':';
                        else if ((first == '/') && GetKbdStatus(en)) first = '?';
                        else if ((first == ';') && GetKbdStatus(en)) first = ':';
                        else if (first == ',') first = '<';
                        else if ((first == '.') && GetKbdStatus(ru)) first = ',';
                        else if (first == '.') first = '>';
                        else if (first == '`') first = '~';
                    }
                 }
                    if (! GetKbdStatus(Repead)) {   
                        _dwInput = 0;                
                        ResetKbdStatus(Ctrl);       
                        ResetKbdStatus(Shift);      
                    }
                    else Delay(100);
                }
        }
        return first;
    }
    //-------------------------------------------
    int KBHIT(void)
    {
        return _Input;
    }
    //-------------------------------------------
    int PUTCHAR(int cb)
    {
        union pw {
            int i;
            char ch[4];
    	};
        register int tmp;
        union pw blck;
        if (cb == EOF) return EOF;
        blck.i = cb;
        *_pBuffScr = _savMark;        
        switch (blck.ch[0]) {
            case 0x07:          //Bell - (ctrl+G) 
                Beep();
                break;
            case 0x8:          //backspace - (ctrl+H /Delete)
                if (_cCount != 0) {
                    _cCount--;
                    _pBuffScr--;
                    *_pBuffScr = ' ';
                }
                else return EOF;
                break;
            case 0x9:          //Tab - (ctrl+I)
                if (_cCount < (_cTotal - _tabs)) {
                    tmp = _tabs - _cCount % _tabs;
                    _cCount = _cCount + tmp;
                }
                else {
                    tmp = _cTotal -1 - _cCount;
                    _cCount = _cTotal-1;
                }
                _pBuffScr = _pBuffScr + tmp;            
                break;
            case 0xA:        //LF - line feed (ctrl+J)
                _lCount++;
                _pBuffScr = _pBuffScr + _cTotal - _cCount;
                _cCount = 0;
                break;
            case 0xD:        //CR - carriage return (ctrl+M /Enter)
                _pBuffScr = _pBuffScr - _cCount;                
                _cCount = 0;
                break;
            case 0x03:        //ETX - end of text (ctrl+C) 
            case 0x04:        //EOT - end of transmission (ctrl+D)
            case 0x1A:        //ctrl+Z (SUB -substitute)
            default:
                *_pBuffScr = blck.ch[0];
                _pBuffScr++;
                _cCount++;
                break;
        }
        _savMark = *_pBuffScr;
    
        if (
            _cCount >= _cTotal) {
            _cCount =0;
            _lCount++;
        }
        if (_lCount >= _lTotal) {
            memmove(&_BuffScr, &_BuffScr + _cTotal/2, ((_lTotal-1) * _cTotal));
            _lCount=_lTotal-1;
            memset(&_BuffScr+(_lTotal-1) * _cTotal/2, ' ', _cTotal);
            _savMark = ' ';
            _pBuffScr = (BYTE *)&_BuffScr + _lCount * _cTotal + _cCount;
        }
        return cb;
    }
    //--------------------------------
    int PRINTF(char *format, ...)
    {
        char *pBuff = Malloc(_lenBuff);
        register int t;
        int len;
        va_list ptr;
        va_start(ptr, format);
        len = vsnprintf (pBuff, _lenBuff - 1, format, ptr);
        va_end(ptr);
        pBuff[len] = '\0';
        for (t = 0; pBuff[t]; t++) PUTCHAR(pBuff[t]);
        Free(pBuff);
        return len;
    }
    //------------------------------------------------
    void CLRSCR(void)
    {
        memset(&_BuffScr, ' ', _cTotal * _lTotal);  //
        _lCount = _cCount = 0;
        _pBuffScr = (BYTE *)&_BuffScr;
        _savMark = ' ';    
        return;
    }
    //---------------------------------------------
    void GOTOXY(int xpos, int ypos)
    {
        _lCount = Min(Max(ypos, 0), (_lTotal - 1));
        _cCount = Min(Max(xpos, 0), (_cTotal - 1));
        *_pBuffScr = _savMark;
        _pBuffScr = (BYTE *)&_BuffScr + _lCount * _cTotal + _cCount;
        _savMark = *_pBuffScr;
    }

    И обычный макрос
    Захват-11.png
    Скрытый текст:
    Код:
    extern char* GAME_TITLE;
    extern char* GAME_MENU;
    extern int fmap[FMAP_COUNTS][4][4];
    int t;
    char* TITLE = "###########  ###########   ###########     #########  #####    ###     #######\n"
                      "#    #    #    #       #   #    #    #    #      #     #      # #    #        #\n"
                      "#    #    #    #   #       #    #    #    #      #     #     #  #   #         \n"
                      "     #         #####            #           ######     #   ##   #   #          \n"
                      "     #         #   #            #          #     #     #  #     #    #         \n"  
                      "     #         #       #        #         #      #     # #      #     #       #\n"
                      "  #######    ###########     #######   ###    #####   ###    #####      ###### \n\n";  
     
    char* MENU = "\t" "\x1A" "1. Start\n"
                     "\t 2. Start & Add Random Blocks\n"
                     "\t 3. Info\n"
                     "\t 4. Exit";
    int Setmap[FMAP_COUNTS][4][4] =
    {
        {
            {1, 1, 0, 0},
            {1, 1, 0, 0},
            {0, 0, 0, 0},
            {0, 0, 0, 0}
        },
        {
            {1, 0, 0, 0},
            {1, 0, 0, 0},
            {1, 0, 0, 0},
            {1, 0, 0, 0}
        },
        {
            {0, 0, 1, 0},
            {1, 1, 1, 0},
            {0, 0, 0, 0},
            {0, 0, 0, 0}
        },
        {
            {1, 1, 1, 0},
            {0, 0, 1, 0},
            {0, 0, 0, 0},
            {0, 0, 0, 0}
        },
        {
            {0, 1, 1, 0},
            {1, 1, 0, 0},
            {0, 0, 0, 0},
            {0, 0, 0, 0}
        },
        {
            {1, 1, 0, 0},
            {0, 1, 1, 0},
            {0, 0, 0, 0},
            {0, 0, 0, 0}
        },
        {
            {1, 1, 1, 0},
            {0, 1, 0, 0},
            {0, 0, 0, 0},
            {0, 0, 0, 0}
        }
    };
    
    INITIAL(18, 80);	//Set screen parameters to 18 rows(_cTotal) and 80 columns(_lTotal)
    GAME_TITLE = TITLE;
    GAME_MENU = MENU;
    memcpy(fmap, Setmap, sizeof(Setmap));
    srand(PSW[38]);	//srand((unsigned)time(NULL))
    gotoxy(0,8);    
    printf("                        PETER_A PRESENTS THE GAME\n");
    Delay(3000);
    gotoxy(0, _lTotal);
    t = 10;
    while(t--) {
        putchar('\n');
        Delay(100);
    }
    gotoxy(0,5);
    printf( "%s", GAME_TITLE);
    Delay(2000);
    t = 9;
    while(t--) {
        putchar('\n');
        Delay(100);
    }
    Delay(500);
    printf("Press any key to begin... ");        
    getch(); if(kbhit()) getch();
    
    gamemenu();
    
    gotoxy(0, _lTotal);
    t = 12;
    while(t--) {
        putchar('\n');
        Delay(100);
    }
    gotoxy(0,8);
    printf("                        Bye-bye take care of yourself!!!\n");
    printf("                                        :)");

    https://owen.ru/forum/showthread.php...l=1#post340895
    Мой канал на ютубе
    https://www.youtube.com/c/ПетрАртюков
    Мой канал на РУТУБЕ
    https://rutube.ru/channel/23641433/
    Библиотека ГМ для СП300
    https://disk.yandex.com/d/gHLMhLi8x1_HBg

  4. #4

    По умолчанию

    Да, есть готовый проект с макросом который компилируется при проверке но не работает при запуске программы

  5. #5

    По умолчанию

    Зачем тут вообще макрос?

    Динамический текст с нужными числами и текстом. Кроме всего, ещё управление видимостью есть.
    Последний раз редактировалось kondor3000; 16.10.2026 в 15:27.

  6. #6

    По умолчанию

    ЦБП = 2
    ЦБЖ = 2 Фаза 1 готово к выгрузке


    ЦБЖ = 4 Фаза 2 готова к выгрузке


    ЦБМ = 2 Фаза 3 готова

    При таких условиях
    Изображения Изображения

  7. #7

    По умолчанию

    Динамический не будет учитывать комбинации чисел

  8. #8

    По умолчанию

    Цитата Сообщение от fever dream Посмотреть сообщение
    Динамический не будет учитывать комбинации чисел
    Всё можно настроить и в Динамическом и в Вариационном, 1 Вариационный.jpg
    Текст есть или нет, биты нужные включить тоже можно по маске бит.
    Последний раз редактировалось kondor3000; 16.10.2026 в 17:29.

  9. #9

    По умолчанию

    Регистром для этих вариантов текста будет выступать значения из цифровых дисплеев?

  10. #10

    По умолчанию

    Цитата Сообщение от fever dream Посмотреть сообщение
    Регистром для этих вариантов текста будет выступать значения из цифровых дисплеев?
    Естественно, меняя число в указанном регистре, вы включаете нужный текст. Бит0 - это 1, бит1-это 2, бит2-это 4 и т. д.
    Последний раз редактировалось kondor3000; 19.10.2026 в 13:59.

Похожие темы

  1. Макрос индикатора для панели СП310
    от fever dream в разделе СП3хх, СП270
    Ответов: 6
    Последнее сообщение: 20.05.2026, 10:25
  2. Принтер к панели оператора СП 315 Р
    от Molkanzik в разделе СП3хх, СП270
    Ответов: 5
    Последнее сообщение: 13.09.2024, 12:59
  3. Выбор панели оператора
    от pylesos в разделе Трёп (Курилка)
    Ответов: 26
    Последнее сообщение: 18.09.2019, 16:17
  4. СПК 110 в качестве Панели оператора
    от GSM73 в разделе СПК1xx (архив)
    Ответов: 3
    Последнее сообщение: 14.03.2017, 00:42
  5. СПК 107 в качестве панели оператора
    от Леонид в разделе СПК1xx (архив)
    Ответов: 15
    Последнее сообщение: 20.11.2015, 08:17

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •