PDA

Просмотр полной версии : Вопрос по команде "mem"



Алексей11
25.04.2007, 14:12
Добрый день!
Насколько я понимаю, значения всех дискретных входов ПЛК150 читаются программой из одного байта – первого в адресном пространстве образа входов, аналогично для дискретных выходов используется один первый байт из образа выходов. Почему при выполнении команд mem %V.IX0.0 и mem %V.IX0.5 при раскрытии макроса получается разное смещение : mem #1:0 для первого дискретного входа, mem #1:5 для шестого дискретного входа, и как следствие, получаем адреса разных байтов. (в моем случае 202845DC и 202845E1). По идее обе команды должны указывать на один и тотже байт, тем более байт с адресом #1:5 находится в адресном пространстве первого аналогового входа (#1:4). Аналогично по дискретным выходам.
Прошивка 2.00.4, таргет 2.0

незарегистрированный
25.04.2007, 14:55
Добрый день!
Насколько я понимаю, значения всех дискретных входов ПЛК150 читаются программой из одного байта – первого в адресном пространстве образа входов, аналогично для дискретных выходов используется один первый байт из образа выходов. Почему при выполнении команд mem %V.IX0.0 и mem %V.IX0.5 при раскрытии макроса получается разное смещение : mem #1:0 для первого дискретного входа, mem #1:5 для шестого дискретного входа, и как следствие, получаем адреса разных байтов. (в моем случае 202845DC и 202845E1). По идее обе команды должны указывать на один и тотже байт, тем более байт с адресом #1:5 находится в адресном пространстве первого аналогового входа (#1:4). Аналогично по дискретным выходам.
Прошивка 2.00.4, таргет 2.0

О какой команде mem Вы говорите? Какая библиотека?

Алексей11
25.04.2007, 15:47
О команде из стандартного набора 3S, выполняемой из ПЛК-браузера

Филоненко Владислав
26.04.2007, 08:09
Тогда все понятно!
Вы задаете битовый адрес и получаете тоже битовый адрес.

Алексей11
26.04.2007, 08:53
То есть командой mem %V.IX0.0 получаем адрес байта (в моем случае:202845DC); смещение #1:0 или #1:5 используется для определения позиции нужного бита в байте с полученным адресом , а на результат команды mem %V.IX0.5 (202845E1) не обращаем внимание. Я правильно понял?

Филоненко Владислав
26.04.2007, 12:43
202845e1-202845dc=5!
А для чего вы вообще используете эти данные:confused: Надеюсь не записываете в качестве адреса для указателей:eek: ?
Память вообще-то динамическая, и никто не гарантирует, что при сл. загрузке, изменении конфигурации или новой прошивке адрес не изменится. Используйте функцию ADR или определение

my_var at %IX1.1.0:BOOL;

Алексей11
26.04.2007, 14:27
Конечно согласен, что физические адреса (типа 202845e1) при следующей загрузке изменятся, никто и не использует их в качестве указателей. Вопрос был не об использовании этих адресов в программе, а о работе команды плк-браузера. Просматривая область входов с помощью "mem" , я обратил внимание, что состояние всех дискретных входов ПЛК хранится в одном и томже байте, а результат выполнения команд mem %V.%IX0.0 и mem %V.%IX0.5 разный - это адреса разных байтов. Иначе говоря, команды "mem %V.%IX0.1; ...; mem %V.%IX0.5" выдают адрес не соответствующий действительности. Вы верно написали "202845e1-202845dc=5!", но это адреса байтов, а не битов.

Филоненко Владислав
26.04.2007, 14:59
По видимому, это к-то ошибка CoDeSys при расчете битовых адресов...