Sergey666 Во-первых, нечего пенять на техноблогосферу, коли не читал мой блог. Пишу я там только тогда, когда разберусь. Потому и написал, что ближе к осени. К примеру пост про модули IO от ОВЕНа вынашивался полгода. А статья про Modbus в двух частях (с анализом сигналов осциллографом и логическим анализатором и тем, как работают CodeSys v2 и CodeSys v3) вынашивается уже второй год. Так-то.
Что касается самого "бложока" - дык ему 12ый год идёт. С 2009 года-то. Известный ресурс в узких кругах, между прочим.
Во-вторых, после того как я увидел этот пример на говнокоде (так это называлось во все времена) - без именований переменных, без комментариев и пояснений в логике, меня стошнило.
Так как я прогал на разных языках (QB, VB, VC++, PHP, 1C 7.7, MCS-51, AVR, Pascal/Delphi), то судить право имею: во всех языках (а кое-где даже в командах разработки) есть правила оформления кода, именования переменных (причём с разными нотациями), оформления комментариев и отступов, работы с константами и магическими числами. Вкус к понятному коду у меня привит с 1997 года, ибо нефиг.
И по форуму я вижу, что большинство разрабов под ПЛК делают такую хрень. Открываешь проект, который тебе с пафосом прислали как супер-важный-пример, а там понаписано всякого типа "pr3", "i", "j = pr8 / 10 + i-5", и ты сидишь и офигеваешь.
Или, что ещё хуже нет никаких проверок границ массивов, валидности указателей, длины буферов, логической валидности принятых данных. Это же, чёрт побери, АЗЫ грамотного программирования: сначала проверил все параметры функции (или FB в нашем случае), потом начал действовать или вывалил код ошибки!
И вот эти люди (включая Sergey666) будут мне указывать на бложик и на статьи?... Пха!
Я против этого, и я буду от этого воротить свой нос. И тут меня не перешибёшь ничем: есть понятный код, а есть говнокод.
При том, что есть обратные примеры, и в разделе ПРок чел с аватаром волка ("ты заходи если чё") быстро рисует отличные понятные FBD на OWL.
В-третьих, по поводу "разберусь - напишу статью". А вот тут я и скажу следующее: Валенок вон в третий (или пятый) раз объясняет одно и то же с этими STRING.
Все (как и я сам) спрашивают пример. И где он? Кто-то, включая Валенка самого, подготовил картинки скриншоты, пояснения (то, почему мы так делаем и на каких принципах это построено)? Валенок давал код в теме, которую жахнули... и - всё.
У меня многие проекты делаются с посыла "если никто, то это сделаю я" и "задолбало". Вот и задолбало. Сделаю пост!
В-четвёртых, в DWORD меня тянет, так как в VC++ на 32-битной платформе это 4 байта. И осталась привычка с приведением типов указателей к чему угодно. Что например можно склеить DWORD, а потом взять memcpy какой-нить и хажнуть (void*)&dwVariable в REAL. Про то и спрашивал, как тут в CodeSys делают.
kondor3000 А ты отрицательную температуру потести так. Косяк вылазит на отрицательных.
Вон, если дома разрабатываешь, возьми чего-нить из морозилки и на датчик положи - и зацени что будет.
SBeaR Во, про это и надо будет написать в посте. Что, мол, работает не во всех случаях, и надо смотреть на докуму и на практику.
Хм... про 4ТД интересно. Я нашёл докуму - https://docs.owen.ru/product/moduli_...14#topic-40914 - а там пишут, что якобы он поддерживает команду 0x03 и может отдавать несколько регистров.
А в реале, значит, ни фига. Значит баг =)
Ну, в добрый путь, так сказать...Особенно позабавило РНР, 1С 7.7 способствует привитию вкуса к понятному коду. Понятия у нас разные.
Cs-Cs Word-у и DWord-у на биты плевать всегда было.
На счет склеивания, так есть же всякие /256 или %256 но так как я немного далек от паскалеподобного CodeSys не знаю как у них там точно.
Ну или можно SHR, SHL использовать с ИЛИ
Не суть как вы это сделаете, главное регистры переставить местами.
По ссылке:Хм... про 4ТД интересно. Я нашёл докуму - https://docs.owen.ru/product/moduli_...14#topic-40914 - а там пишут, что якобы он поддерживает команду 0x03 и может отдавать несколько регистров.
А в реале, значит, ни фига. Значит баг =)
2021-06-30_9-24-10.png
Это откровенно неудачная реализация, но она документирована.
СODESYS V3.5: Repository Archive V3.5 SP4 (необходим для старых СПК) / Раздел CDS V3.5 на сайте
Форум: Вопросы и ответы / Визуализация / Настройка обмена с другими устройствами
Web-панель ВП110 / Modbus-индикатор СМИ2-М
Telegram: @JuneSmellsLikeBlood | e-mail: e.kislov@owen.ru | oscat.ru | Как обратиться в техподдержку?
Как отлаживать ошибки | Отладка проектов в CODESYS V3.5 | XY problem | Как правильно задавать вопросы | AnyDesk
Лень. аналогичная ерунда с ПЛК63, групповой запрос только из служебной памяти, хотя можно было поправить все и сделать по штатным адресам работу групповыми запросами.
Даже с морозилкой связываться не надо, у меня в моей библиотеке есть блоки разложения REAL на BYTE и WORD и сборки обратно и перестановка местами WORD.
Взял отрицательный REAL, разложил, так там и байты и ворды положительные и целочисленные, так что пофигу. Скрин из программы выложил. WORD_ы.jpg
А принцип разложения и сборки байтов и вордов, всё равно сводится к ADR() и указателям, как писал Sergey666. Пример кода выкладывал выше.
Проблемы могут быть только с целочисленными значениями без смещения точки, по этому поводу уже писал выше. Достаточно объявить переменные как INT и присвоить им значения считанных WORD.
Последний раз редактировалось kondor3000; 30.06.2021 в 12:39.
Сделал все 4-мя строками, но другим способом.
Объявил указатели на эти строки.
Присвоил указателям адреса строк.
Но все значения равны 0.
В приложении скрины.
Делал все по книге.
Не могу понять что не так, почему в строках все байты равны 0.