Просмотр полной версии : Modbus oni PLR studio
Алмаз Нафиков
14.07.2025, 08:29
Короче изучаю другие контроллеры для развития и столкнулся с проблемой что то не так делаю.
Самоучка.
Контроллер oni , программа modbus OPC
Прописал теги чтобы можно было читать и записывать в программе, я написал адрес 4576 и запускаю программу она не читает.
Проблемы с другими регистрами как дискретный вход/выход, аналоговый я разобрался, а вот как с временами, часами я не понял
kondor3000
14.07.2025, 08:46
Короче изучаю другие контроллеры для развития и столкнулся с проблемой что то не так делаю.
Самоучка.
Контроллер oni , программа modbus OPC
Прописал теги чтобы можно было читать и записывать в программе, я написал адрес 4576 и запускаю программу она не читает.
Проблемы с другими регистрами как дискретный вход/выход, аналоговый я разобрался, а вот как с временами, часами я не понял
Чем отличается тип DWORD от типа INT16, знаете? Адрес тоже не правильный
Алмаз Нафиков
15.07.2025, 22:06
Чем отличается тип DWORD от типа INT16, знаете? Адрес тоже не правильный
Нет, ещё не разобрался чем отличаются, а почему адрес не верный? Там же модбас указан, с обычными coils так получается, а здесь как тогда писать адрес
На первой картинке у вас адрес для REG0 = 24576, почему вы задаете 4576?
На второй картинке у вас тип данных в устройстве INT16, но, согласно первой картинки, число занимает 2 регистра, т.е., вы должны указать, как минимум, INT32. Возможно UINT32 (или как там число без знака обозначается), а еще, возможно, придется поиграться с перестановкой байт
Алмаз Нафиков
16.07.2025, 06:35
На первой картинке у вас адрес для REG0 = 24576, почему вы задаете 4576?
На второй картинке у вас тип данных в устройстве INT16, но, согласно первой картинки, число занимает 2 регистра, т.е., вы должны указать, как минимум, INT32. Возможно UINT32 (или как там число без знака обозначается), а еще, возможно, придется поиграться с перестановкой байт
Тоесть надо написать 0 ?
Алмаз Нафиков
16.07.2025, 06:38
На первой картинке у вас адрес для REG0 = 24576, почему вы задаете 4576?
На второй картинке у вас тип данных в устройстве INT16, но, согласно первой картинки, число занимает 2 регистра, т.е., вы должны указать, как минимум, INT32. Возможно UINT32 (или как там число без знака обозначается), а еще, возможно, придется поиграться с перестановкой байт
Я вот не разобрался с функциями int16 и прочее, где можно найти информацию чтобы понять новичку
Я вот не разобрался с функциями int16 и прочее, где можно найти информацию чтобы понять новичку
int16 - это не функция, а тип данных. Для REG0 адрес будет 24576, для REG1 -24578. И т.д. Без лидирующей 4-ки. 4х - это просто мнемонический указатель на тип регистра, holding в данном случает. Каждый регистр вашего ПЛК занимает 2 слова, т.е. DWORD. В типах данных это может быть LONG (int32), ULONG (uint32), FLOAT и т.п.. Т.е. любой тип данных, для представления которого нужны 2 слова. Всё.
Информацию новичку можно найти даже в википедии. Не говоря о прочем.
Алмаз Нафиков
16.07.2025, 08:39
int16 - это не функция, а тип данных. Для REG0 адрес будет 24576, для REG1 -24578. И т.д. Без лидирующей 4-ки. 4х - это просто мнемонический указатель на тип регистра, holding в данном случает. Каждый регистр вашего ПЛК занимает 2 слова, т.е. DWORD. В типах данных это может быть LONG (int32), ULONG (uint32), FLOAT и т.п.. Т.е. любой тип данных, для представления которого нужны 2 слова. Всё.
Информацию новичку можно найти даже в википедии. Не говоря о прочем.
Ага, вроде более менее понятно стало, начал показывать, теперь говорите с перестановкой байтов надо пробовать чтобы коректно отображалось, 1 цифра только подошла, остальные пока не получается
kondor3000
16.07.2025, 08:52
Ага, вроде более менее понятно стало, начал показывать, теперь говорите с перестановкой байтов надо пробовать чтобы коректно отображалось, 1 цифра только подошла, остальные пока не получается
Поставьте тип UINT32 (аналог DWORD), адреса 24576 и 24578, пробуйте переставить регистры (байты)
Выложите скрины
Алмаз Нафиков
16.07.2025, 11:57
Поставьте тип UINT32 (аналог DWORD), адреса 24576 и 24578, пробуйте переставить регистры (байты)
Выложите скрины
Вот сделал, но я изменил программу и поставил другой адрес, поставил 24614
Совпадает только одна цифра, "секунда" Остальные минуты не совпадают
kondor3000
16.07.2025, 13:17
Вот сделал, но я изменил программу и поставил другой адрес, поставил 24614
Совпадает только одна цифра, "секунда" Остальные минуты не совпадают
Вы можете цифры озвучить, сколько должно и сколько показывает.
Должно быть 3 варианта ещё, при перестановке регистров и байт,
при перестановке байт из 48286 получается 40636
Алмаз Нафиков
17.07.2025, 12:49
Вы можете цифры озвучить, сколько должно и сколько показывает.
Должно быть 3 варианта ещё, при перестановке регистров и байт,
при перестановке байт из 48286 получается 40636
Короче алябирда какая то, у меня в программе только 24614 а тут он считывает 24614-24616
Почему так? Я же адрес 24616 не загружал в программу, должен показывать ноль
Короче он сейчас должен показывать 99:00 минут а в значении показывает непонятные цифры, совпадает только вначале, когда считывает секунды, доходит до 60 секунды а потом начинается ересь без совпадений.
Пробовал перестановки байт, не помогает, что оо не так делаю наверно.
С обычными дискретными аналоговыми входами работал и работает по сей день а с временем не получается настроить
kondor3000
17.07.2025, 13:24
С какого вы решили, что должно показывать 99:00 , это по вашему целое число? Это только вывод времени на экран такой.
Вообще то время передаётся как, Время= Час*3600 + Мин*60 + Секунды в формате DWORD в секундах, 99 минут это 5940 секунд
или Время *1000 в формате DWORD, в миллисекундах, 99 минут это 5940 000 ms
Алмаз Нафиков
17.07.2025, 13:48
С какого вы решили, что должно показывать 99:00 , это по вашему целое число? Это только вывод времени на экран такой.
Вообще то время передаётся как, Время= Час*3600 + Мин*60 + Секунды в формате DWORD в секундах, 99 минут это 5940 секунд
или Время *1000 в формате DWORD, в миллисекундах, 99 минут это 5940 000 ms
Капец, я то думал как положено должен показать, мда уж.
"Старшим байтом вперёд " Получается, правильно показывает в секундах.
А как теперь мне в скаде показать его в нормальном виде, и чтобы можно было менять эту установленное время.
Вот допустим таймер выставлен на 90 минут, но его надо будет менять например на 50 минут
kondor3000
17.07.2025, 13:56
В скаде может быть Дисплей отображения времени как в панели, если такого нет, разбиваете сами на час, мин, сек и выводите
Алмаз Нафиков
17.07.2025, 14:04
В скаде может быть Дисплей отображения времени как в панели, если такого нет, разбиваете сами на час, мин, сек и выводите
Попробую. А какой делать запись? В OPC ввожу число 3000 это 50 минут, но запись не меняется с 99 минут на 50 минут, что не так делаю
kondor3000
17.07.2025, 14:07
Попробую. А какой делать запись? В OPC ввожу число 3000 это 50 минут, но запись не меняется с 99 минут на 50 минут, что не так делаю
В ОРС сервере ставите чтение (функция 0х03) и запись (функция 0х10),
в скаде также и записывайте
Алмаз Нафиков
17.07.2025, 14:22
В ОРС сервере ставите чтение (функция 0х03) и запись (функция 0х10),
в скаде также и записывайте
Везде искал такие функции но его нет, может как то по другому называется, вот попробовал написать 6000 таймер сработал на 1 минуту, написал 12000,сработал на 2 минуты, вроде понял как
Теперь осталось это в нормальном виде написать,
В скаде попробовать надо как это делать, чтобы каждый раз не делить на 60 сек. завтра займусь
Алмаз Нафиков
17.07.2025, 14:23
В ОРС сервере ставите чтение (функция 0х03) и запись (функция 0х10),
в скаде также и записывайте
Спасибо вам большое за помощь
kondor3000
17.07.2025, 14:53
В скаде попробовать надо как это делать, чтобы каждый раз не делить на 60 сек. завтра займусь
Вообще обычно в скаде задаётся в минутах или секундах, передаёте, а все расчёты делаются в ПЛК, так удобнее.
Мало того задачу до 99 минут лучше передать через 1 регистр WORD (UINT16), а не DWORD (2 регистра)
Powered by vBulletin® Version 4.2.3 Copyright © 2025 vBulletin Solutions, Inc. All rights reserved. Перевод: zCarot