PDA

Просмотр полной версии : ОВЕН СП307-Б



r0mashkin0
19.05.2018, 14:41
Здравствуйте!

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() не описано.

Евгений Кислов
19.05.2018, 14:54
Добрый день.

1. Собственно, вся необходимая информация содержится в приведенной вами цитате.
2. Это опечатка. Спасибо, поправим.
3. Мы проверим эту ситуацию.

r0mashkin0
19.05.2018, 14:57
Добрый день.

1. Собственно, вся необходимая информация содержится в приведенной вами цитате.


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

Евгений Кислов
19.05.2018, 14:59
Нет, в данном случае опечатки нет.

r0mashkin0
19.05.2018, 15:30
Нет, в данном случае опечатки нет.

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

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

petera
21.05.2018, 06:58
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() и пр. описано.
37345
Т.к. функции на Си имеют возвращаемые значения. то костылем Ваше решение называть нельзя, наоборот этот правильное написание программы.
Жаль конечно, что в руководство пользователя возвращаемые значения для таких функций (не только Read()) не попали

Евгений Кислов
21.05.2018, 07:14
Жаль конечно, что в руководство пользователя возвращаемые значения для таких функций (не только Read()) не попали

Спасибо за замечание, добавим.