Неужели нет вопросов, как это работает?
Вид для печати
Т.е. вы специально даете ответы, которые не имеют смысла без задавания дополнительных вопросов, и ожидаете знаков внимания? Вот это поворот.
Я ради интереса попробовал так:
Предсказуемо не сработало.Код:Reads(HMI_LOCAL_MCH, 0, TYPE_PSB, 256, 16, &PSB[356]);
Посмотрел проект по ссылке из #367 - в целом, все ясно, процентов 75 задач по манипуляции с памятью он закрывает, остальное можно самому написать по аналогии.
SokolovS'у тоже, видимо, этого хватило.
На счет Writes() я конечно погорячился, все таки я чайник в Си. Догадки были, что по аналогии с группировкой битов PSB в регистры PSB http://www.owen.ru/forum/showthread....l=1#post113602
будет возможность группировать биты 0х/1х также в целые регистры
А вот на счет Reads(), то работает
Например
Reads(PLC, 1, MODBUS_RTU_BIT_1X, 16, 2, &PSW[256]);
биты 1х16..1х47 будут прочитаны в биты регистров PSW256, 257
1х16-->PSW256.00, 1х47-->PSW257.15
Reads(PLC, 1, MODBUS_RTU_BIT_0X, 0, 3, &PSW[256]);
биты 0х00..0х47 будут прочитаны в биты регистров PSW256, 257, 258
0х00-->PSW256.00 - 0х15-->PSW256.15
0х16-->PSW257.00 - 0х17-->PSW257.31
0х32-->PSW258.00 - 0х47-->PSW258.15
Причем, опять же по аналогии с группировкой битов PSB
Reads(PLC, 1, MODBUS_RTU_BIT_0X, {0..15}, 3, &PSW[256]) эквивалентно Reads(PLC, 1, MODBUS_RTU_BIT_0X, 0, 3, &PSW[256])
Reads(PLC, 1, MODBUS_RTU_BIT_0X, {16..31}, 3, &PSW[256]) эквивалентно Reads(PLC, 1, MODBUS_RTU_BIT_0X, 16, 3, &PSW[256])
Reads(PLC, 1, MODBUS_RTU_BIT_0X, {32..47}, 3, &PSW[256]) эквивалентно Reads(PLC, 1, MODBUS_RTU_BIT_0X, 0, 32, &PSW[256])
т.е. адрес бита в команде берется наименьшим, кратным 16
А снифф обмена делали? Там реально функции 0x01 и 0x02 в запросе? А то кратность 16-ти позволяет предположить, что в данном случае просто запрашиваются регистры (функцией 0x03/0x04). На ПЛК от ОВЕН, где все области памяти наложены друг на друга, такое, конечно, прокатит, но не на контроллерах с отдельной областью под coils.
Естественно делал.
Используются именно функции 01 и 02
ЗЫ.
Проект
Вложение 29764 Вложение 29765
Вложение 29766 Вложение 29767
Панель подключена к виртуальному слейву. По коммуникационному монитору видно, что функции именно 01 и 02
https://www.youtube.com/watch?v=G1RlTmB-hKs
Вложение 29768
Кроме того в Data мониторе реально меняю биты в областях 0х и 1х и они отображаются на экране панели!
По поводу группировки отдельных PSB в один регистр
Вот версия примера для СП300
https://www.youtube.com/watch?v=2HpmVftV0AY
Все действия сделаны элементарными арифметическими операциями над содержимым целого регистра PSB256.
Никаких обращений к отдельным битам, за исключением операций циклического сдвига, но и там анализируются только младший или старший бит регистра.
Речь идёт о работе по порту PLC/Download и использовании возможности Modbus работать с несколькими дискретными значениями
Ваш пример не подходит для этого
Ответ и правда малополезный... Будь у меня на руках панель, эти возможности я бы исследовал и самостоятельно.
Если верить википедии, в Modbus нет такого выравнивания. Также если верить ей же, то нет и требования запросить ровно 2 байта, а можно запрашивать любое количество регистров, если надо, слейв добавит байтов в ответе. Так же и запись должна работать.
Добрый вечер. Помогите разобраться новичку с панелью оператора ОВЕН СП307-Р. Создан проект объемом 9,31 mb. При попытке загрузить проект в панель вылетает сообщение переполнение psw. Уменьшая же проект до объема 8,81 mb проект загружается спокойно. Я так понимаю проблема в слишком большом объеме памяти созданного проекта. Подскажите есть ли возможность загружать более масштабные проекты в панель и как ее реализовать.
Для начала можно попробовать п. 1.7 из FAQ:
http://www.owen.ru/catalog/sensornie...sp3xx/81265010