Обязательно представиться на русском языке кириллицей (заполнить поле "Имя").
Фиктивные имена мы не приветствуем. Ивановых и Пупкиных здесь уже достаточно.
Не надо писать свой вопрос в первую попавшуюся тему - всегда лучше создать новую тему.
За поиск, предложение и обсуждение пиратского ПО и средств взлома - бан без предупреждения. Непонятно? - Читать здесь.
Рекламу и частные объявления "куплю/продам/есть халтура" мы не размещаем ни на каких условиях.
Перед тем как что-то написать - читать здесь, а затем здесь и здесь.
Не надо писать в ЛС администраторам свои технические вопросы. Администраторы форума отлично знают как работает форум, а не все-все контроллеры, о которых тут пишут.
tonyk писал(а): ↑31 янв 2023, 14:50
Можно пояснить, откуда взят дизассемблер и значегия для pANY?
Что Вы имеете ввиду под дизассемблер, тут ничего не дизассемблировалось.
Значения для pANY взяты из примера по ссылке, а вообще смотрите структуру указателей, например у Бергера.
Вот это заработало. Откуда это взялось- понял, почитав Бергера. Благодарю за помощь!
Раз уж встретил знающего человека, тогда позволю себе задать ещё один вопрос. С каждым FB обычно связан экземплярный DB. Для вызова некоторых библиотечных FB требуется передавать им номер DB, например, как того требуют SEND и RCV в моём случае. Вопрос: как мне получить номер экземплярного DB у экземпляра моего FB, чтобы адресоваться к этому экземплярному DB и передать его номер другим FB? Если это есть у того же Бергера и я не понял, что это ответ на мой вопрос, можно просто указать страницу для прочтения.
У вас нет необходимых прав для просмотра вложений в этом сообщении.
tonyk писал(а): ↑01 фев 2023, 08:37
как мне получить номер экземплярного DB у экземпляра моего FB, чтобы адресоваться к этому экземплярному DB и передать его номер другим FB?
Конкретно так не пробовал. Но Вам вообще известно о методе мультиэкземплярных FB? Когда кучка FB собирается в одном каком то FB, и уже при вызове оного формируется один большой DB для всех этих FB. Я бы так решил озвученную задачу.
Если, конечно, правильно понял ))
tonyk писал(а): ↑01 фев 2023, 09:57
И как узнать номер этого DB и положение данных для моего FB
Предлагаю сперва изучить предмет )) Возможно ответ придет после понимания.
Вкратце - зачем Вам номер DB? Номер может быть константой, смещение тоже, поскольку DB (набор данных) по размеру - един. Указывать можно только величину смещения.
Номер DB нужен для передачи его другим FB, которые его требуют для своей работы, например, линейка 1SI для работы с последовательными интерфейсами 232, 422 и 485 по разным протоколам.
У вас нет необходимых прав для просмотра вложений в этом сообщении.
tonyk писал(а): ↑01 фев 2023, 10:19
Номер DB нужен для передачи его другим FB
Сути не понимаете... Все нужные Вам FB можно собрать в другой общий FB. И уже у него будет DB. Таким образом у всех FB, DB будет один, но большой. Там будут данные всех этих FB. А, ладно короче, проще уже рассказать как это делается. Но там вкратце не получится.
PS так, повнимательнее посмотрел на Вашу ф-цию - таки да. Тут не пролезет. Как я понимаю тут нужен стандартный какой то DB и указывается только его номер. Обычно для этого используется указатель. Ну я с такими FB по связи пока только встречался
PPS Хотя... Есть же DBB, а это и есть смещение. А значит прокатит!
Длина STRING[8] составляет 10 байт, 8 задекларированных и 2 служебных байта заголовка.
С чем связано 542/543, возможно с этими-же заголовочными байтами.
Для получения смещения, можете преобразовывать так:
(компилятор ошибок не дает, а что там по факту не проверял)
Помогите пжлст. SCL
Хочу в оргблоке копировать локальные переменные в ДБ, при вызове ОБ. С помощью BLKMOV ну жно скопировать первые 12 байт локальных данных в первые 12 байт DB82. BLKMOV дает ошибку 0х8124 и ничего не копирует.
Хотя вроде все правильно кмк. ОБ вызывается совершенно точно, дату-время пишет и обычный MOVE копирует.
pAnySRC.S7Code := 16#10; // S7Code member is fixed at 16#10
pAnySRC.DataType := 16#02; // BYTE Data type
pAnySRC.Length := 12;
pAnySRC.DBNumber := 0; // DB Number, Для L возможно нужен ноль????Вот тут я не уверен
pAnySRC.MemoryArea := 16#86; // 16#86=Local data (L stack)
pAnySRC.ByteAddressMSB := 0; // Generally, you can leave pAny.ByteAddressMSB at zero unless you are using very large DB's (greater than 8192 bytes)
pAnySRC.ByteAddressLSB := W#0;
pSRC:=OB82_EV_CLASS; //первая переменная из передаваемой области; обратите внимание на тип данных переменной для следующей строки кода
pAnySRC.Length := 12;
pDST:=DB82.OB82_EV_CLASS; //первая переменная из области назначения; обратите внимание на тип данных переменной для следующей строки кода
pAnyDST.Length := 12;
DB82.OB82_TMP := BLKMOV(SRCBLK := pSRC, DSTBLK => pDST);
AppCreator писал(а): ↑02 фев 2023, 10:46
Если у Вас нет уверенности, как заполнить переменную типа ANY - просто дайте это сделать компилятору:
Гениально. Все работает. Очень много спасибо, я с этими указателями уже мозг почти сломал
А pAnySRC.Length := 12 это длина в единицах типа, который имеет пременная pSRC:=OB82_EV_CLASS?
т.е. если pSRC я установлю на переменную типа DWORD, то 12 будет длина в DWORDах?
Да, все верно. ANY формируется в соответствии с переменной, на которую он указывает (адресная область, тип данных, количество данных этого типа, начальный адрес), а дальше просто корректируем указатель под свои цели