в способах передачи из ПЛК в SCADA нет ничего плохого или хорошего, уж всяко лучше чем каждую булевую переменную передавать одним регистром, тем более если SCADA умеет распаковывать и склеивать..
в способах передачи из ПЛК в SCADA нет ничего плохого или хорошего, уж всяко лучше чем каждую булевую переменную передавать одним регистром, тем более если SCADA умеет распаковывать и склеивать..
Bad programmers worry about the code. Good programmers worry about data structures and their relationships
среди успешных людей я не встречала нытиков
Барбара Коркоран
Да сказал уже, и еще раз скажу! Спасибо всем, на форуме очень часто многие помогают, за это конечно благодарен. А собирать биты в 1 байт, есть какие то камни подводные, я думал, также как и раскрывать, только уже битам присваивать. Все везде вижу про перестановку старшими, младшими, не подскажите при передачи каких переменных это работает?
Vitorgan порядок байт определяет процессор обычно, старшим или младшим вперед, иногда приходится их менять местами, в той же MasterScada это есть. Но так как вы оперируете программой в ПЛК можете и сами перевернуть если необходимо.
И.Петров предлагал использовать директивы, я вместо добавлений просто .Х использую осмысленные константы. По поводу старшим словом вперед работает когда переменная больше одного слова или для модбаса больше регистра
Bad programmers worry about the code. Good programmers worry about data structures and their relationships
среди успешных людей я не встречала нытиков
Барбара Коркоран
Еще раз повторю, что для данного случая, когда в/из скады для экономии точек, совсем ненужно никаких программных Паков/Унпаков.
Все переменные в слейве ПЛК, не зависимо от того, битовые они или BYTE или WORD или DWORD, перекрывают друг друга в адресном пространстве
Скрытый текст:
По этому вместо тог, чтобы городить огород в программе, просто используйте это свойство ПЛК ОВЕН.
А именно, вот вместо "упакованной в одну переменную 4 байта 4-ех 8-ми битовых масок, на языке ST"
1.PNG
Здесь MASK - упакованная маска
Просто вставьте в слейв четыре модуля 8 bits, взамен модуля 4byte
2.PNG
здесь Mask_1, Mask_2, Mask_3, Mask_4 Ваши четыре битовые маски
Скада даже этого и не заметит. Если она читала значения DWORD по адресу 4х 02, то и теперь получит те же данные по тому же адресу.
ЗЫ.
На запись из скады в ПЛК это тоже распространяется.
Последний раз редактировалось petera; 02.08.2016 в 14:00.
Мой канал на ютубе
https://www.youtube.com/c/ПетрАртюков
Библиотека ГМ для СП300
https://disk.yandex.com/d/gHLMhLi8x1_HBg
petera, как всегда, инструкция для чайника (то бишь меня). Все с картинками, примерами и стрелочками. Я Вас понял. Спасибо. То есть, я просто вывожу из плк 4 маски, а в модбасе это читаю как 1 четырехбайтовую переменную? правильно?
Vitorgan правильно, только вам придется либо правильно расположить маски, либо при чтении SCADA-ой поменять местами слова или байты в зависимости как происходит передача.
Мой канал на ютубе
https://www.youtube.com/c/ПетрАртюков
Библиотека ГМ для СП300
https://disk.yandex.com/d/gHLMhLi8x1_HBg
Люди, please help. все сделал как в примере petera.
Как связать эти биты из масок с булевыми переменными в программе codesys? )) у меня каждый бит это кнопка для старта процесса. кнопки - на панели,а процессы в ПЛК. то есть Задача: выдернуть бит из маски (modbus slave) и сделать так, чтобы он писал свое значение в переменную. bool1, bool2 и т. д.
Или как правильно обращаться к конкретному биту в маске?
Как сделать элегантно? заранее спасибо
Последний раз редактировалось Andrey_om; 17.05.2018 в 16:03.