Нужно производить запись/чтение бита, а носителем информации о бите должно быть слово.Не получается присвоение %QX8.1.0.0, если в конфигурации modbus tcp массив из word.
Нужно производить запись/чтение бита, а носителем информации о бите должно быть слово.Не получается присвоение %QX8.1.0.0, если в конфигурации modbus tcp массив из word.
я честно от Вашей логики в шоке, Вы слышали что нибудь о таких логических функциях как AND и OR, ищите библиотеку на oscat.de, в ней функцию BIT_LOAD_BYTE и будет Вам счастье
Вы меня не поняли.Ну ладно, я пошел по другому пути.Я пишу в байты, а читаю OPC сервером Word.Спасибо.
я про байты начал, потому что указатели обращаются к байтам, а с ними (указателями) Вам еще придется столкнуться в свое время. А если бы не поленились и заглянули в указанную бибку то нашли бы там рядом такие функции, как BIT_LOAD_B2, BIT_LOAD_W, BIT_LOAD_W2, BIT_LOAD_DW и BIT_LOAD_DW2, а так же всевозможные обратные преобразования
Спасибо за библиотеку, довольно полезная штука. Я теперь понял ход ваших мыслей, я почти об этом и спрашивал. Но без использования операций над битами, думал в codesys есть возможность просто обращаться к битам типо есть %DW8.1.0 ,а что бы к биту обратиться %DX8.1.0.0 но увы я так понял что нельзя, 500 переменных через функции это " некрасиво" получается.Все всем спасибо, буду дальше работать.
и это тоже возможно, то о чем я написал в первую очередь, ну раз это прпустили повторю подробнее, открываем документ http://www.kipshop.ru/CoDeSys/steps/...figuration.pdf, последний абзац на 13 странице и рисунок 1.6 на 14 странице, канал станет с обычным названием переменной, к котрой можно обращаться через точку чтоб считать или записать разряд
Я в 11 посту писал об этом.Через переменную не вариант.т.к. Мне нужно одновременно писать и читать ее. Смотрите что получается, через opc я обратился к переменной, записал значение, присвоил это значение через точку переменной.Например Auto:bool . А в переменная в разделе modbus tcp имеет имя Auto_to_scada AT %QW8.0.1. Т.о. Auto:=Auto_to_scada.1;
Все прекрасно, на SCADA нажал кнопку Auto, в плк переменная auto приняла значение TRUE.Далее выключаем компьютер со SCADA, плк при этом работает.После загрузки SCADA указатель режима работы в SCADA отображает False, потому что SCADA не знает о том, что переменная Auto была переведена в true(до ее выключения).Что бы такого неопределенного состояния не возникало нужно считать переменную с плк в SCADA. Каким образом?
Auto_to_scada.1:=Auto;- уже не катит.(Поэтому как вариант я записал переменную auto в регистр byte изменив 1й бит,т.е. ушел от еще одной переменной в плк(без присвоения) и сэкономил память.Далее считал 2байта через opc.Ну а в SCADA через скрипт C# расшифровал каждый бит регистра Word. Если что не так сделал поправьте, может проще как можно сделать.
Все равно не уловил, чего Вы пытаетесь добиться. У меня нажатие управляющей кнопки записывается по отдельному каналу, а отображение этого состояния принимается из плк по другому каналу, по этому при включении скады я всегда вижу реальное состояние плк. И таких дискретных сигналов может быть сколько угодно, я их пакую в двойное слово, а в визуализации распаковываю
да, а Вы думаете что затраты на передачу одно бита по модбас существенно отличаться от передачи двух регистров?
Зато при таком раскладе, я передаю 32 состояния каких нибудь дискретных сигналов за один раз, а при передаче конкретного бита, вдруг в следующее мгновение необходимо будет передать еще битовый сигнал, начнет появляться очередь на отправку, начнет ощутимое торможение визуализации и т.п.
естественно , я забочусь о том, чтоб сигналы не изменили реальный сигнал на исполнительный механизм, если управляющая команда его некасается
Последний раз редактировалось capzap; 07.09.2012 в 13:14.
А Dword в котором содержатся биты для записи читаете scada-ой ?