Страница 71 из 320 ПерваяПервая ... 2161697071727381121171 ... ПоследняяПоследняя
Показано с 701 по 710 из 3198

Тема: Панели оператора СП3xx. Вопросы и ответы

  1. #701

    По умолчанию

    Пробовал пример со страницы панели с ПР200 [url]http://www.owen.ru/uploads/sp310_pr200modbus_v2.zip.
    СП3хх- использовал онлайн эмулятор, ПР200 - живьем.
    Есть след вопросы:
    1. В эмуляторе при нажатии на переключатель с индикацией приложение стабильно вылетает с ошибкой. Пробовал на разных компах с семеркой и десяткой. Что не так?
    2. В параметрах порта убрал галку "переставить word в float" соответственно в пр200 в настройках установил галку старшим регистром вперед. В результате отображение переменных F2...F5 отсталось нормальным, F1 отображается неверно, причем оно не зависить от расстановки галок в настройках ПР200 "старшим регистром вперед" и "старшим байтом вперед". Что происходит?
    Изображения Изображения
    Последний раз редактировалось RomX; 26.09.2017 в 14:42.

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

    По умолчанию

    Цитата Сообщение от RomX Посмотреть сообщение
    Пробовал пример со страницы панели с ПР200 [url]http://www.owen.ru/uploads/sp310_pr200modbus_v2.zip.
    СП3хх- использовал онлайн эмулятор, ПР200 - живьем.
    Есть след вопросы:
    1. В эмуляторе при нажатии на переключатель с индикацией приложение стабильно вылетает с ошибкой. Пробовал на разных компах с семеркой и десяткой. Что не так?
    2. В параметрах порта убрал галку "переставить word в float" соответственно в пр200 в настройках установил галку старшим регистром вперед. В результате отображение переменных F2...F5 отсталось нормальным, F1 отображается неверно, причем оно не зависить от расстановки галок в настройках ПР200 "старшим регистром вперед" и "старшим байтом вперед". Что происходит?
    Эмулятор не работает с битовыми переменными типа 4хNNN.mm

    ЗЫ.
    п.2
    т.к. настройка в параметрах порта "переставить word в float" влияет только на чтение/запись единичных переменных DWord или Float.
    Отображение переменных F2...F5 происходит через промежуточные PSW, в которые значения регистров копируются функцией "Копировать блок регистров". На эту функцию настройки "переставить word в float" не действует.
    А действует только на правильность отображения перемеренной F1

    Настройки вернуть как было в проектах изначально.
    Последний раз редактировалось petera; 26.09.2017 в 15:13.
    Мой канал на ютубе
    https://www.youtube.com/c/ПетрАртюков
    Библиотека ГМ для СП300
    https://disk.yandex.com/d/gHLMhLi8x1_HBg

  3. #703

    По умолчанию

    Спасибо petera.

  4. #704

    По умолчанию

    Добрый день. Это снова я.
    Размножил макросы и попробовал это дело на панели. Сначала запустил сразу четыре макроса и панель встала не на что не реагируя. Помогло только отключение питания. Попробовал по одному макросу запускать. Работает только первый макрос нормально, остальные не работают, не переписывается текущее значение в уставку, пишет какие то непонятные цифры. Останов макросов происходит нормально с перезаписью на 10 единиц. Регистры все проверил всё соответствует.
    В чем может быть проблема?

    Проблема похоже в ТРМе, что в регистре положения точки? Потому что некоторые каналы читает со сдвигом влево вместо 11 гр. пишет 1.1, а другие каналы наоборот, вместо 7 гр. пишет 700. В восьмом канале ничего не происходит вообще. Как её там поправить я не знаю. На табло прибора и на панели текущее значение отображает нормально. Читать буду с регистров других. Но самое печальное что более трех макросов одновременно не могут работать, при запуске четвертого макроса панель встает и все процессы тоже.
    Вложения Вложения
    Последний раз редактировалось paul-th; 28.09.2017 в 12:26.

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

    По умолчанию

    Цитата Сообщение от paul-th Посмотреть сообщение
    Добрый день. Это снова я.
    Размножил макросы и попробовал это дело на панели. Сначала запустил сразу четыре макроса и панель встала не на что не реагируя. Помогло только отключение питания. Попробовал по одному макросу запускать. Работает только первый макрос нормально, остальные не работают, не переписывается текущее значение в уставку, пишет какие то непонятные цифры. Останов макросов происходит нормально с перезаписью на 10 единиц. Регистры все проверил всё соответствует.
    В чем может быть проблема?

    Проблема похоже в ТРМе, что в регистре положения точки? Потому что некоторые каналы читает со сдвигом влево вместо 11 гр. пишет 1.1, а другие каналы наоборот, вместо 7 гр. пишет 700. В восьмом канале ничего не происходит вообще. Как её там поправить я не знаю. На табло прибора и на панели текущее значение отображает нормально. Читать буду с регистров других. Но самое печальное что более трех макросов одновременно не могут работать, при запуске четвертого макроса панель встает и все процессы тоже.
    В общем 8 параллельных макросов панель не тянет, мне удалось запустить только четыре одновременно работающих.
    По этому нужно отказаться от циклов do...while и использовать вместо этого case и сделать один макрос для всех каналов
    Захват-1.png
    Скрытый текст:
    Код:
    static UINT tm1, tm2, tm3, tm4, tm5, tm6, tm7, tm8;
    static int State1, State2, State3, State4, State5, State6, State7, State8;
    static int CurTemp1, CurTemp2, CurTemp3, CurTemp4, CurTemp5, CurTemp6, CurTemp7, CurTemp8;
    static int SleepMinute1, SleepMinute2, SleepMinute3, SleepMinute4, SleepMinute5, SleepMinute6, SleepMinute7, SleepMinute8;
    static int MaxTemp1, MaxTemp2, MaxTemp3, MaxTemp4, MaxTemp5, MaxTemp6, MaxTemp7, MaxTemp8;
    //--------- Canal 1 -----------------
    if (!GetPSBStatus(256) && State1 > 0) {
        State1 = 99;
    }
    
    switch (State1) {
        case 0:
        if (GetPSBStatus(256)) {
            State1 = 1;
        }
        else break;
        
        case 1:
        Read(HMI_LOCAL_MCH, 0, TYPE_PFW, 256, 0, TYPE_WORD, &SleepMinute1);
        Read(HMI_LOCAL_MCH, 0, TYPE_PFW, 258, 0, TYPE_WORD, &MaxTemp1);
        Read(PLC, 16, MODBUS_RTU_REG_3X, 0X01, 0, TYPE_WORD, &CurTemp1);
        Write(PLC, 16, MODBUS_RTU_REG_4X, 0X11, 0, TYPE_WORD, CurTemp1);
        tm1 = *(DWORD*)(PSW + 38);
        State1 = 2;
      
        case 2:
        if (*(DWORD*)(PSW + 38) >= tm1 + 1800) {
            tm1 = *(DWORD*)(PSW + 38);
            CurTemp1 = CurTemp1 + 10;
            if (CurTemp1 <= MaxTemp1) {
                Write(PLC, 16, MODBUS_RTU_REG_4X, 0X11, 0, TYPE_WORD, CurTemp1);
                break;
            }
            else {
                State1 = 3;
            }
        }
        
        case 3:
        if ((*(DWORD*)(PSW + 38) >= tm1 + SleepMinute1 * 600)) {
            ResetPSB(256);
            State1 = 99;
        }
        else break;
        
        case 99:
        Write(PLC, 16, MODBUS_RTU_REG_4X, 0x11, 0, TYPE_WORD, 10 );
        State1 = 0;
    }
    //--------- Canal 2 -----------------
    if (!GetPSBStatus(257) && State2 > 0) {
        State2 = 99;
    }
    
    switch (State2) {
        case 0:
        if (GetPSBStatus(257)) {
            State2 = 1;
        }
        else break;
        
        case 1:
        Read(HMI_LOCAL_MCH, 0, TYPE_PFW, 260, 0, TYPE_WORD, &SleepMinute2);
        Read(HMI_LOCAL_MCH, 0, TYPE_PFW, 262, 0, TYPE_WORD, &MaxTemp2);
        Read(PLC, 16, MODBUS_RTU_REG_3X, 0x06, 0, TYPE_WORD, &CurTemp2);
        Write(PLC, 16, MODBUS_RTU_REG_4X, 0x15, 0, TYPE_WORD, CurTemp2);
        tm2 = *(DWORD*)(PSW + 38);
        State2 = 2;
      
        case 2:
        if (*(DWORD*)(PSW + 38) >= tm2 + 1800) {
            tm2 = *(DWORD*)(PSW + 38);
            CurTemp2 = CurTemp2 + 10;
            if (CurTemp2 <= MaxTemp2) {
                Write(PLC, 16, MODBUS_RTU_REG_4X, 0x15, 0, TYPE_WORD, CurTemp2);
                break;
            }
            else {
                State2 = 3;
            }
        }
        
        case 3:
        if ((*(DWORD*)(PSW + 38) >= tm2 + SleepMinute2 * 600)) {
            ResetPSB(257);
            State2 = 99;
        }
        else break;
        
        case 99:
        Write(PLC, 16, MODBUS_RTU_REG_4X, 0x15, 0, TYPE_WORD, 10 );
        State2 = 0;
    }
    //--------- Canal 3 -----------------
    if (!GetPSBStatus(258) && State3 > 0) {
        State3 = 99;
    }
    
    switch (State3) {
        case 0:
        if (GetPSBStatus(258)) {
            State3 = 1;
        }
        else break;
        
        case 1:
        Read(HMI_LOCAL_MCH, 0, TYPE_PFW, 264, 0, TYPE_WORD, &SleepMinute3);
        Read(HMI_LOCAL_MCH, 0, TYPE_PFW, 266, 0, TYPE_WORD, &MaxTemp3);
        Read(PLC, 16, MODBUS_RTU_REG_3X, 0x0B, 0, TYPE_WORD, &CurTemp3);
        Write(PLC, 16, MODBUS_RTU_REG_4X, 0x19, 0, TYPE_WORD, CurTemp3);
        tm3 = *(DWORD*)(PSW + 38);
        State3 = 2;
      
        case 2:
        if (*(DWORD*)(PSW + 38) >= tm3 + 1800) {
            tm3 = *(DWORD*)(PSW + 38);
            CurTemp3 = CurTemp3 + 10;
            if (CurTemp3 <= MaxTemp3) {
                Write(PLC, 16, MODBUS_RTU_REG_4X, 0x19, 0, TYPE_WORD, CurTemp3);
                break;
            }
            else {
                State3 = 3;
            }
        }
        
        case 3:
        if ((*(DWORD*)(PSW + 38) >= tm3 + SleepMinute3 * 600)) {
            ResetPSB(258);
            State3 = 99;
        }
        else break;
        
        case 99:
        Write(PLC, 16, MODBUS_RTU_REG_4X, 0x19, 0, TYPE_WORD, 10 );
        State3 = 0;
    }
    //--------- Canal 4 -----------------
    if (!GetPSBStatus(259) && State4 > 0) {
        State4 = 99;
    }
    
    switch (State4) {
        case 0:
        if (GetPSBStatus(259)) {
            State4 = 1;
        }
        else break;
        
        case 1:
        Read(HMI_LOCAL_MCH, 0, TYPE_PFW, 268, 0, TYPE_WORD, &SleepMinute4);
        Read(HMI_LOCAL_MCH, 0, TYPE_PFW, 270, 0, TYPE_WORD, &MaxTemp4);
        Read(PLC, 16, MODBUS_RTU_REG_3X, 0x10, 0, TYPE_WORD, &CurTemp4);
        Write(PLC, 16, MODBUS_RTU_REG_4X, 0x1D, 0, TYPE_WORD, CurTemp4);
        tm4 = *(DWORD*)(PSW + 38);
        State4 = 2;
      
        case 2:
        if (*(DWORD*)(PSW + 38) >= tm4 + 1800) {
            tm4 = *(DWORD*)(PSW + 38);
            CurTemp4 = CurTemp4 + 10;
            if (CurTemp4 <= MaxTemp4) {
                Write(PLC, 16, MODBUS_RTU_REG_4X, 0x1D, 0, TYPE_WORD, CurTemp4);
                break;
            }
            else {
                State4 = 3;
            }
        }
        
    	case 3:
        if ((*(DWORD*)(PSW + 38) >= tm4 + SleepMinute4 * 600)) {
            ResetPSB(259);
            State4 = 99;
        }
        else break;
        
        case 99:
        Write(PLC, 16, MODBUS_RTU_REG_4X, 0x1D, 0, TYPE_WORD, 10 );
        State4 = 0;
    }
    //--------- Canal 5 -----------------
    if (!GetPSBStatus(260) && State5 > 0) {
        State5 = 99;
    }
    
    switch (State5) {
        case 0:
        if (GetPSBStatus(260)) {
            State5 = 1;
        }
        else break;
        
        case 1:
        Read(HMI_LOCAL_MCH, 0, TYPE_PFW, 272, 0, TYPE_WORD, &SleepMinute5);
        Read(HMI_LOCAL_MCH, 0, TYPE_PFW, 274, 0, TYPE_WORD, &MaxTemp5);
        Read(PLC, 16, MODBUS_RTU_REG_3X, 0x15, 0, TYPE_WORD, &CurTemp5);
        Write(PLC, 16, MODBUS_RTU_REG_4X, 0x21, 0, TYPE_WORD, CurTemp5);
        tm5 = *(DWORD*)(PSW + 38);
        State5 = 2;
      
        case 2:
        if (*(DWORD*)(PSW + 38) >= tm5 + 1800) {
            tm5 = *(DWORD*)(PSW + 38);
            CurTemp5 = CurTemp5 + 10;
            if (CurTemp5 <= MaxTemp5) {
                Write(PLC, 16, MODBUS_RTU_REG_4X, 0x21, 0, TYPE_WORD, CurTemp5);
                break;
            }
            else {
                State5 = 3;
            }
        }
        
        case 3:
        if ((*(DWORD*)(PSW + 38) >= tm5 + SleepMinute5 * 600)) {
            ResetPSB(260);
            State5 = 99;
        }
        else break;
        
        case 99:
        Write(PLC, 16, MODBUS_RTU_REG_4X, 0x21, 0, TYPE_WORD, 10 );
        State5 = 0;
    }
    //--------- Canal 6 -----------------
    if (!GetPSBStatus(261) && State6 > 0) {
        State6 = 99;
    }
    
    switch (State6) {
        case 0:
        if (GetPSBStatus(261)) {
            State6 = 1;
        }
        else break;
        
        case 1:
        Read(HMI_LOCAL_MCH, 0, TYPE_PFW, 276, 0, TYPE_WORD, &SleepMinute6);
        Read(HMI_LOCAL_MCH, 0, TYPE_PFW, 278, 0, TYPE_WORD, &MaxTemp6);
        Read(PLC, 16, MODBUS_RTU_REG_3X, 0x1A, 0, TYPE_WORD, &CurTemp6);
        Write(PLC, 16, MODBUS_RTU_REG_4X, 0x25, 0, TYPE_WORD, CurTemp6);
        tm6 = *(DWORD*)(PSW + 38);
        State6 = 2;
      
        case 2:
        if (*(DWORD*)(PSW + 38) >= tm6 + 1800) {
            tm6 = *(DWORD*)(PSW + 38);
            CurTemp6 = CurTemp6 + 10;
            if (CurTemp6 <= MaxTemp6) {
                Write(PLC, 16, MODBUS_RTU_REG_4X, 0x25, 0, TYPE_WORD, CurTemp6);
                break;
            }
    		else {
                State6 = 3;
            }
        }
        
        case 3:
        if ((*(DWORD*)(PSW + 38) >= tm6 + SleepMinute6 * 600)) {
            ResetPSB(261);
            State6 = 99;
        }
        else break;
        
        case 99:
        Write(PLC, 16, MODBUS_RTU_REG_4X, 0x25, 0, TYPE_WORD, 10 );
        State6 = 0;
    }
    //--------- Canal 7 -----------------
    if (!GetPSBStatus(262) && State7 > 0) {
        State7 = 99;
    }
    
    switch (State7) {
        case 0:
        if (GetPSBStatus(262)) {
            State7 = 1;
        }
        else break;
        
        case 1:
        Read(HMI_LOCAL_MCH, 0, TYPE_PFW, 280, 0, TYPE_WORD, &SleepMinute7);
        Read(HMI_LOCAL_MCH, 0, TYPE_PFW, 282, 0, TYPE_WORD, &MaxTemp7);
        Read(PLC, 16, MODBUS_RTU_REG_3X, 0x1F, 0, TYPE_WORD, &CurTemp7);
        Write(PLC, 16, MODBUS_RTU_REG_4X, 0x29, 0, TYPE_WORD, CurTemp7);
        tm7 = *(DWORD*)(PSW + 38);
        State7 = 2;
      
        case 2:
        if (*(DWORD*)(PSW + 38) >= tm7 + 1800) {
            tm7 = *(DWORD*)(PSW + 38);
            CurTemp7 = CurTemp7 + 10;
            if (CurTemp7 <= MaxTemp7) {
                Write(PLC, 16, MODBUS_RTU_REG_4X, 0x29, 0, TYPE_WORD, CurTemp7);
                break;
            }
            else {
                State7 = 3;
            }
        }
        
    	case 3:
        if ((*(DWORD*)(PSW + 38) >= tm7 + SleepMinute7 * 600)) {
            ResetPSB(262);
            State7 = 99;
        }
        else break;
        
        case 99:
        Write(PLC, 16, MODBUS_RTU_REG_4X, 0x29, 0, TYPE_WORD, 10 );
        State7 = 0;
    }
    //--------- Canal 8 -----------------
    if (!GetPSBStatus(263) && State8 > 0) {
        State8 = 99;
    }
    
    switch (State8) {
        case 0:
        if (GetPSBStatus(263)) {
            State8 = 1;
        }
        else break;
        
        case 1:
        Read(HMI_LOCAL_MCH, 0, TYPE_PFW, 284, 0, TYPE_WORD, &SleepMinute8);
        Read(HMI_LOCAL_MCH, 0, TYPE_PFW, 286, 0, TYPE_WORD, &MaxTemp8);
        Read(PLC, 16, MODBUS_RTU_REG_3X, 0x24, 0, TYPE_WORD, &CurTemp8);
        Write(PLC, 16, MODBUS_RTU_REG_4X, 0x2D, 0, TYPE_WORD, CurTemp8);
        tm8 = *(DWORD*)(PSW + 38);
        State8 = 2;
      
        case 2:
        if (*(DWORD*)(PSW + 38) >= tm8 + 1800) {
            tm8 = *(DWORD*)(PSW + 38);
            CurTemp8 = CurTemp8 + 10;
            if (CurTemp8 <= MaxTemp8) {
                Write(PLC, 16, MODBUS_RTU_REG_4X, 0x2D, 0, TYPE_WORD, CurTemp8);
                break;
            }
            else {
                State8 = 3;
            }
        }
        
        case 3:
        if ((*(DWORD*)(PSW + 38) >= tm8 + SleepMinute8 * 600)) {
            ResetPSB(263);
            State8 = 99;
        }
        else break;
        
        case 99:
        Write(PLC, 16, MODBUS_RTU_REG_4X, 0x2D, 0, TYPE_WORD, 10 );
        State8 = 0;
    }

    "Волшебное" слово static в объявлении переменных обязательно!

    Макрос нужно запускать в ф.области с типом - Непрерывно.
    Захват-2.png Захват-3.png
    Режим выполнения макроса - Последовательный.
    Ф.область должна быть глобальной.

    Контроль кнопок ПУСК/СТОП сделан в самом макросе. По этому нужно использовать обычные кнопки.
    Захват-4.png Захват-5.png

    Проверил работу. Полет нормальный.
    Измененный проект во вложении.

    ЗЫ.
    Конечно можно использовать 8 отдельных макросов и 8 ф.областей.
    Но зачем, если и в одном макросе все работает?
    Вложения Вложения
    Последний раз редактировалось petera; 29.09.2017 в 06:33.
    Мой канал на ютубе
    https://www.youtube.com/c/ПетрАртюков
    Библиотека ГМ для СП300
    https://disk.yandex.com/d/gHLMhLi8x1_HBg

  6. #706

    По умолчанию

    А я сижу как раз ковыряю это дело. Вы на чем проверяли? С ТРМом 138?
    Потому что у меня не читает текущее значение правильно с регистров 0Х06,0Х0b,0X10,0X15,0X1a,0X1f,0Х24, а читает только правильно с 0X01, я переписал чтение с регистров float, может я неправильно форму записи номера регистра использую? Там есть в каждом канале регистр положения десятичной точки. как с ним работать? Четыре макроса не удавалось запустить. Три работали. В понедельник проверю работу макроса.Спасибо.
    Последний раз редактировалось paul-th; 29.09.2017 в 09:53.

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

    По умолчанию

    Цитата Сообщение от paul-th Посмотреть сообщение
    А я сижу как раз ковыряю это дело. Вы на чем проверяли? С ТРМом 138?
    Потому что у меня не читает текущее значение правильно с регистров 0Х06,0Х0b,0X10,0X15,0X1a,0X1f,0Х24, а читает только правильно с 0X01, я переписал чтение с регистров float, может я неправильно форму записи номера регистра использую? Там есть в каждом канале регистр положения десятичной точки. как с ним работать? Четыре макроса не удавалось запустить. Три работали. В понедельник проверю работу макроса.Спасибо.
    ТРМ у меня нет. Во многих случаях, при отсутствии реального железа, я использую "PeakHMI MODBUS serial RTU slave simulator"
    Захват-2.png

    Захват-1.png

    Захват-3.png Захват-4.png

    Захват-5.png Захват-6.png

    Незаменимый инструмент, совершенно бесплатный.
    Захват-7.png

    http://www.hmisys.com/
    Мой канал на ютубе
    https://www.youtube.com/c/ПетрАртюков
    Библиотека ГМ для СП300
    https://disk.yandex.com/d/gHLMhLi8x1_HBg

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

    По умолчанию

    Там есть в каждом канале регистр положения десятичной точки. как с ним работать?
    Все очень просто.
    Из ТРМ можно читать значения или формате Float или Int.
    Float - это вещественные числа или числа с плавающей запятой(точкой), тут присутствуют и целые и дробные числа
    Int - это только целые числа, дробных нет. Но можно интерпретировать их как числа с фиксированной точкой(запятой), если договорится о требуемой точности представления. Для этого между двумя заранее определёнными разрядами ставится запятая для превращения целого числа в дробное. Например, целое число 1234 после вставки запятой превращается в дробное 12,34.
    Так вот в регистре положения десятичной точки и находится число которое указывает сколько знаков после запятой(или от конца числа) отводится под дробную часть в измеренном значении.
    Например.
    Пусть температура среды равна 123,4гр.
    если в регистре положения десятичной точки 0, то в регистре значения температуры получим 123
    если в регистре положения десятичной точки 1, то в регистре значения температуры получим 1234
    если в регистре положения десятичной точки 2, то в регистре значения температуры получим 12340

    Аналогичные настройки есть и у дисплея панели для целых чисел(Dec, Unsigned)
    Захват-1.png Захват-2.png
    По этому, если Вы у дисплея задали число знаков после запятой =1, то и В ТРМ в регистре положения десятичной точки должна быть 1.
    В противном случае будет так
    некоторые каналы читает со сдвигом влево вместо 11 гр. пишет 1.1, а другие каналы наоборот, вместо 7 гр. пишет 700
    В первом случае в регистре положения десятичной точки число 0, а во втором - в регистре положения десятичной точки число 3.

    А алогичный регистр положения десятичной точки есть и для уставок. И здесь нужно быть аккуратным. Если в регистре положения десятичной точки для уставки, например 1 канала 0x0010, записано
    - число 0, то CurTemp1 = CurTemp1 + 10; увеличивает уставку на 10гр
    - число 1, то CurTemp1 = CurTemp1 + 10; увеличивает уставку на 1,0гр
    - число 2, то CurTemp1 = CurTemp1 + 10; увеличивает уставку на 0,10гр
    и т.д.


    В принципе можно принудительно записать в регистры положения десятичной точки для всех каналов измерения число 1. Добавить по одной строчке
    case 1:
    Write(PLC, 16, MODBUS_RTU_REG_4X, 0, 0, TYPE_WORD, 1);
    Read(HMI_LOCAL_MCH, 0, TYPE_PFW, 256, 0, TYPE_WORD, &SleepMinute1);
    Read(HMI_LOCAL_MCH, 0, TYPE_PFW, 258, 0, TYPE_WORD, &MaxTemp1);
    Read(PLC, 16, MODBUS_RTU_REG_3X, 0X01, 0, TYPE_WORD, &CurTemp1);
    Write(PLC, 16, MODBUS_RTU_REG_4X, 0X11, 0, TYPE_WORD, CurTemp1);
    tm1 = *(DWORD*)(PSW + 38);
    State1 = 2;
    Тут же можно для однозначности добавит запись в регистры положения десятичной точки уставок для всех каналов нужное число.
    Последний раз редактировалось petera; 29.09.2017 в 11:28.
    Мой канал на ютубе
    https://www.youtube.com/c/ПетрАртюков
    Библиотека ГМ для СП300
    https://disk.yandex.com/d/gHLMhLi8x1_HBg

  9. #709

    По умолчанию

    Спасибо, понял, так и сделаю. По регистрам уставок вроде всё в порядке, а вот по регистрам в int десятичной точки похоже бардак и надо их переписать.
    Проще наверно написать отдельный макрос и залить и выполнить его отдельно один раз, а потом уже залить основную программу, чтобы уже не лазить по готовой программе. Я то думал что это возможно в ТРМе ручками сделать, но нет.
    Последний раз редактировалось paul-th; 29.09.2017 в 12:07.

  10. #710

    По умолчанию

    Добрый день, господа.
    В проекте создал окно в которое вставил "таблицу отображения данных":
    список.JPG
    Проблема заключается в том, что отсчёт начинается с 0, а мне нужно строго с единицы.
    С этим можно что-то сделать?

Страница 71 из 320 ПерваяПервая ... 2161697071727381121171 ... ПоследняяПоследняя

Похожие темы

  1. Экспорт CSV в панели СП3xx и порядок квитирования событий
    от theoretician в разделе Панели оператора (HMI)
    Ответов: 30
    Последнее сообщение: 24.08.2021, 16:17
  2. Индикатор ИП120 , вопросы- ответы
    от rovki в разделе Программируемые реле
    Ответов: 56
    Последнее сообщение: 03.11.2017, 15:58
  3. Сенсорные панели оператора ОВЕН СП3ХХ
    от Боднар Олег Миколайович в разделе Подбор Оборудования
    Ответов: 7
    Последнее сообщение: 17.12.2015, 09:09
  4. СПК 107 в качестве панели оператора
    от Леонид в разделе СПК1хх
    Ответов: 15
    Последнее сообщение: 20.11.2015, 08:17

Ваши права

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