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

Тема: ОВЕН СП307-Б

  1. #1

    По умолчанию ОВЕН СП307-Б

    Здравствуйте!

    1. В "CП3xx. Руководство пользователя" (Версия: 1.4 Дата: 16.03.2018) на странице 47 указано: "2. область памяти PCW используется для выполнения сервисных программ и не должна использоваться пользователем". Прошу прояснить про область памяти PCW, что она из себя представляет.

    2. В "CП3xx. Руководство пользователя" (Версия: 1.4 Дата: 16.03.2018) на странице 199 указано: "PFW32 СOM 2 (PLC-порт): количество стоп бит. Возможные значения: 0 – 1 стоповый бит; 1 – 1.5 бита; 2 – 2 бита". В конфигураторе СП300 V2.D3k-5 в меню "Настройка проекта" для устройства "PLC-порт" выбран режим "Modbus RTU Master", и его настройки могут иметь "Стоп бит" - "1 бит" и "2 бита", причем возможности выбрать "1.5 бита" отсутствует. При выборе в меню "Настройка проекта" "Стоп бит" - "1 бит" в регистре PFW32 появляется значение "2", при выборе - "2 бита" в регистре PFW32 - "0". В данной ситуации либо расхождение с документацией, либо косяк самой панели?

    3. Написал макрос чтения регистра со слайв устройства:
    Код:
    WORD vlb;
    
    Read(PLC, 11, MODBUS_RTU_REG_4X, 0, 0, TYPE_WORD, &vlb)
    
    PSW[300]=vlb;
    Регистр под номером 0 читается, все хорошо. Но стоить отключить линию RS-485 от вторичного устройства в регистре PSW[300] появляется значение "2". Я понимаю что это значение код какой то ошибки (или мусор), мне не понятно почему регистру PSW[300] присваивается код ошибки, если чтение со слейв устройства не произошло? Разве не логично тогда регистру PSW[300] никаких данных не присваивать? Код ошибки можно и по другому проверить, вот пример "костыля", который проверяет код возврата функции Read(), и только после проверки присваивает значение регистру PSW[300]:
    Код:
    WORD vlb;
    
    if(Read(PLC, 11, MODBUS_RTU_REG_4X, 0, 0, TYPE_WORD, &vlb))
    {
    	PSW[300]=vlb;
    };
    В документации такое поведение функции Read() не описано.

  2. #2

  3. #3

    По умолчанию

    Цитата Сообщение от Евгений Кислов Посмотреть сообщение
    Добрый день.

    1. Собственно, вся необходимая информация содержится в приведенной вами цитате.
    По поиску слова "PCW" в документации находится только одно упоминание, в приведенной мной цитате. Там скорей всего тоже опечатка?

  4. #4

  5. #5

    По умолчанию

    Цитата Сообщение от Евгений Кислов Посмотреть сообщение
    Нет, в данном случае опечатки нет.
    В документации расписаны три области памяти "PSB", "PSW", "PFW". Расписаны их типы, адресация и т.д. Так же есть сноска (цитата выше) в которой говорится про область "PCW" для выполнения сервисных программ, что это за область, каков ее размер и так далее информации нет. Если это какая то четвертая область и не доступна для работы пользователю, то за чем о ней упоминать в руководстве пользователя?

  6. #6
    Супер Модератор Аватар для Евгений Кислов
    Регистрация
    27.01.2015
    Адрес
    Москва
    Сообщений
    12,062

    По умолчанию

    Эта область (PCW) доступна в конфигураторе. Но для обычных пользователей она не представляет интереса.
    Ее могут использовать разработчики и сервисные инженеры при диагностике и в других специфических случаях.

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

    По умолчанию

    Цитата Сообщение от r0mashkin0 Посмотреть сообщение
    3. Написал макрос чтения регистра со слайв устройства:
    Код:
    WORD vlb;
    
    Read(PLC, 11, MODBUS_RTU_REG_4X, 0, 0, TYPE_WORD, &vlb)
    
    PSW[300]=vlb;
    Регистр под номером 0 читается, все хорошо. Но стоить отключить линию RS-485 от вторичного устройства в регистре PSW[300] появляется значение "2". Я понимаю что это значение код какой то ошибки (или мусор), мне не понятно почему регистру PSW[300] присваивается код ошибки, если чтение со слейв устройства не произошло? Разве не логично тогда регистру PSW[300] никаких данных не присваивать? Код ошибки можно и по другому проверить, вот пример "костыля", который проверяет код возврата функции Read(), и только после проверки присваивает значение регистру PSW[300]:
    Код:
    WORD vlb;
    
    if(Read(PLC, 11, MODBUS_RTU_REG_4X, 0, 0, TYPE_WORD, &vlb))
    {
    	PSW[300]=vlb;
    };
    В документации такое поведение функции Read() не описано.
    Зато во встроенной справке макросов такое поведение функций Read(), Write() и пр. описано.
    Захват-1.png
    Т.к. функции на Си имеют возвращаемые значения. то костылем Ваше решение называть нельзя, наоборот этот правильное написание программы.
    Жаль конечно, что в руководство пользователя возвращаемые значения для таких функций (не только Read()) не попали
    Мой канал на ютубе
    https://www.youtube.com/c/ПетрАртюков
    Библиотека ГМ для СП300
    https://disk.yandex.com/d/gHLMhLi8x1_HBg

  8. #8

Похожие темы

  1. ПЛК 150-И-М +СП307-Б
    от Виталий Попович в разделе ПЛК1хх
    Ответов: 1
    Последнее сообщение: 23.03.2018, 11:03
  2. СП307-Р
    от murdemon в разделе Панели оператора (HMI)
    Ответов: 2
    Последнее сообщение: 18.10.2016, 11:55
  3. СП307-Р + S7-300
    от alexk54 в разделе Панели оператора (HMI)
    Ответов: 0
    Последнее сообщение: 07.10.2016, 16:17
  4. СП307+ПЧВ
    от pedro93 в разделе Панели оператора (HMI)
    Ответов: 35
    Последнее сообщение: 31.07.2016, 22:02
  5. СП270 и СП307
    от RZH в разделе Панели оператора (HMI)
    Ответов: 3
    Последнее сообщение: 30.06.2016, 11:04

Ваши права

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