Codesys адресация |
Ответить |
Автор | |
Новичок Присоединился: 26 Июль 2013 Online Status: Offline Публикации: 12 |
Опубликовано: 30 Июль 2013 07:40 |
Доброго времени суток всем.
Начал изучать PLC. Пилотный проект на Codesys 2.3.9.35 + PLC Wago 881+ панель Weitek 8100 Подскажите новичку, как в глобальных переменных создать/объявить в нотации Codesys (что-то вроде AT %QX4.0) переменные и как их объявить/прочитать из панели. Методом тыка удалось в ПЛК объявить вход AT %QX4.0, а в панели прописать (в билдере проекта для панели) что-то типа диапазон 0x и адрес 001. Панель стала реагировать на вход(соединение по Modbus TCP, ПЛК slave). Но непонятно как такая адресация ( AT %QX4.0) перекликается со стандартом Modbus, где указаны диапазоны регистров 1-9999, 10000-29999, 30000-39999, 40000-.... Через которые(регистры) и происходит обмен по Modbus-протоколу. Могу предположить, что объявление в проекте панели адреса (0x 001) - это мол значит из диапазона 1-9999 первый бит. Или я не прав? Подскажите, может есть ссылки на доки, где прояснен этот вопрос? Заранее всем спасибо.
|
|
Действительный член Присоединился: 08 Март 2006 Категория: Russian Federation Online Status: Offline Публикации: 440 |
|
Когда то в контроллерах память физически разделялась для входов, выходов и хранения переменных. И адреса разделялись по областям 0x0x-0x3x - однобитные входа-выхода, от 0x4x- регистры памяти (хранения). Со временем всё это сгладилось и щас для функций чтения записи регистров (0x3, 0x4) использут в основном область 0x4x.. То-есть регистр памяти по физическому адресу 0x0 будет иметь логический адрес 0x40001. |
|
Новичок Присоединился: 26 Июль 2013 Online Status: Offline Публикации: 12 |
|
Спасибо большое, вроде разобрался. Все заработало. Но есть нюансы.
Объявил две переменные в ПЛК: tmp1 AT %QW270:WORD; tmp2 AT %IW260:WORD; В панели (она мастер через Modbus TCP) прописал ввод числа в tmp2 через ( 0x4x 261) , а также чтение tmp1 и tmp2 через ( 0x4x 261) ( 0x4x 271) В коде PRG_PLC есть строка: tmp1:=tmp2; Результат такой - панель успешно пишет в tmp2. В коде ПЛК значение tmp2 успешно переписывается в tmp1 и далее панель успешно читает данные из tmp1. Но вот попытка напрямую прочитать из tmp2 не работает. Хотя в стандарте написано, что адресация через AT %IW позволяет со стороны Modbus и писать и читать. А вот адресация через AT %QW только читать. Почему же тогда tmp2 не читается? Или я опять запутался?
|
|
Действительный член Присоединился: 08 Март 2006 Категория: Russian Federation Online Status: Offline Публикации: 440 |
|
Не совсем понятно ..попытка напрямую прочитать из tmp2 не работает.. Но пока можно сказать одну важную вещь: в CoDeSys есть одна каверзная настройка - байтовая адресация данных, она находится в настройках целевой платформы (Target settings) на вкладке General (общие). Там есть галочка Byte addressing mode (режим байтовой адресации) - её надо всегда ставить, без неё все данные будут считаться 32-х битными и накладываться друг на друга и портиться С уважением, SAN |
|
Новичок Присоединился: 26 Июль 2013 Online Status: Offline Публикации: 12 |
|
Разобрался. В Wago нашлась прямоадресуемая область (MW0...MW12287) , которая и читается и пишется и ПЛК и панелью.
|
|
Ответить |
Переход на форум | Права доступа на форуме Вы не можете публиковать новые темы в этом форуме Вы не можете отвечать на сообщения в этом форуме Вы не можете удалять Ваши сообщения на этом форуме Вы не можете редактировать Ваши сообщения на этом форуме Вы не можете создавать голосования на этом форуме Вы не можете выражать своё мнение в голосованиях на этом форуме |