Вход

Просмотр полной версии : ТРМ138 регистр состояния ВУ



РусланСемей
18.03.2025, 09:56
Добрый день. Считывание регистра состояния выходного устройства №5 выдает значение 15360, хотя поидеи должно 1 или 0. Не пойму.
82527
82528
82529

Cs-Cs
18.03.2025, 10:03
Ты читаешь Coil - биты. Они в этом ПЛК читаются сразу по 8 штук. А в регистрах сгруппированы по 16.
15360 = 0111100 00000000
То есть, ты читаешь совсем не то и не так. У тебя должна быть команда не "Coils Status", а "Input Registers" или "Holding registers" - читать РЕГИСТРЫ, а не биты.

РусланСемей
18.03.2025, 12:18
Ты читаешь Coil - биты. Они в этом ПЛК читаются сразу по 8 штук. А в регистрах сгруппированы по 16.
15360 = 0111100 00000000
То есть, ты читаешь совсем не то и не так. У тебя должна быть команда не "Coils Status", а "Input Registers" или "Holding registers" - читать РЕГИСТРЫ, а не биты.

Пробовал, все равно показывает не то, при "Input Registers" показало 60629. При "Holding registers" не реагирует.

Cs-Cs
18.03.2025, 12:38
Так, я тоже лох. Вижу скриншот из инструкции.
Пробуем ещё раз. CodeSys 2.3 НЕ умеет читать биты (функция 1) поштучно.
Может читать только пачкой по 8.
А в инструкции указано:
* Функция 1
* Номера битов с 0 по 7 (то есть 8 всего)

Я бы попробовал так:
* Добавить "8 bit input module"
* Команда 0x01 Read Coils Status
* Адрес = 0 (читаем с 0 по 7)
И посмотреть, что будет. По идее это будет битовая маска ВУ с 1 по 8.
А оттуда уже выделить статус нужного через точку (обратитьс к биту).

EFrol
18.03.2025, 12:41
Мне кажется все правильно. Просто надо извлечь младший бит и всё.
82530

РусланСемей
18.03.2025, 12:44
Так, я тоже лох. Вижу скриншот из инструкции.
Пробуем ещё раз. CodeSys 2.3 НЕ умеет читать биты (функция 1) поштучно.
Может читать только пачкой по 8.
А в инструкции указано:
* Функция 1
* Номера битов с 0 по 7 (то есть 8 всего)

Я бы попробовал так:
* Добавить "8 bit input module"
* Команда 0x01 Read Coils Status
* Адрес = 0 (читаем с 0 по 7)
И посмотреть, что будет. По идее это будет битовая маска ВУ с 1 по 8.
А оттуда уже выделить статус нужного через точку (обратитьс к биту).

Спасибо попробую. По мануалу имеем код функции 01/05 и адрес регистра 0x0004. Я не думал, что все не так просто.

РусланСемей
18.03.2025, 12:45
Мне кажется все правильно. Просто надо извлечь младший бит и всё.
82530

Спасибо тоже попробую

kondor3000
18.03.2025, 13:14
Спасибо попробую. По мануалу имеем код функции 01/05 и адрес регистра 0x0004. Я не думал, что все не так просто.

Это вообще то не адреса регистров, а адреса бит с 0 по 7 и всё это в 0 регистре. Вы вообще не тот регистр читаете по ходу.

РусланСемей
18.03.2025, 13:21
вот что получается. Настроено на ВУ номер 5
82532

kondor3000
18.03.2025, 13:28
вот что получается. Настроено на ВУ номер 5
82532

Похоже на правду, адрес 0 поставили?
Проблема может быть в записи, тут нет функции 0х05, есть только 0х0f. Вопрос будет ли записываться.

РусланСемей
18.03.2025, 13:37
Похоже на правду, адрес 0 поставили?
Проблема может быть в записи, тут нет функции 0х05, есть только 0х0f. Вопрос будет ли записываться.

да адрес 0. Мне нужно считывать состояние ВУ 5 с ТРМ138.
bit 4 соответствует 5 выходу. Как мне нужно.
16 перевести в двоичную СИ получается 10000, то тоже верно.
Я же могу значение этого бита (состояние 0 или 1) использовать дальше в программе назвав его допустим "f" как выше на скриншоте.

kondor3000
18.03.2025, 13:42
да адрес 0. Мне нужно считывать состояние ВУ 5 с ТРМ138.
bit 4 соответствует 5 выходу. Как мне нужно.
16 перевести в двоичную СИ получается 10000, то тоже верно.
Я же могу значение этого бита (состояние 0 или 1) использовать дальше в программе назвав его допустим "f" как выше на скриншоте.

Можете использовать как бит f, только состояния бит есть TRUE и FALSE , а не 1 и 0.