пятница, 1 декабря 2017 г.

Проблема с прямой адресацией на S7-1200

Как известно, TIA Portal использует косвенную адресацию, но, одновременно с этим, не запрещена и прямая адресация. Для этого в Data Block надо просто снять галочку в разделе Attributes под названием Optimized block access (это для версии TIA Portal V13 SP1).

В общем и целом адресация пародирует S7-200, только нет привычных нормальных команд (типа ANDB и т.д.), приходится обходиться тем, что есть в языке SCL.
Однако, и с этим оказались проблемы.

Описание проблемы я разместил на сайте Siemens.

Вот вам русское описание этого примера.

Я создал data block DB1 с именем "HMI_DB". Добавил в него 4 переменных:

var1  Real  DB1.DBD0 
var2  Real  DB1.DBD4
var3  Word  DB1.DBW8
var4  Word  DB1.DBW10
 
Я хочу использовать HMI_DB.var3 и HMI_DB.var4 как буфер для моих операций пересылки байтов.
В частности, данная операция востребована при приёме и дальнейшем использовании данных по интерфейсу RS485, где данные принимаются по количеству слов данных.

Итак, я хочу передать два слова данных из HMI_DB.var1 в два отдельных слова HMI_DB.var3 и  HMI_DB.var4, затем я хочу передать результат из var3 и var4 в переменную var2:




"HMI_DB".var1 := 24.7; // (для примера), это 16#41C5_999A
-------------
%DB1.DBW8 := %DB1.DBW0; // 16#41C5
%DB1.DBW10 := %DB1.DBW2; // 16#999A
%DB1.DBD4 := %DB1.DBD8; // (oops!) 16#4E83_8B33



Нежданчик! Программа автоматически конвертировала (DINT_TO_REAL), хотя никто этого не просил, значение 16#41C5_999A (что является 1,103,468,954 в DEC-формате) в 16#4E83_8B33 (что является 1.103469e+009 в Real-формате).
 

Если я напишу таким образом, то всё работает нормально:

%DB1.DBW4 := %DB1.DBW8;
%DB1.DBW6 := %DB1.DBW10;

Вот такая интересная система конвертации в TIA Portal, т.е. среда разработки как бы "знает", что %DB1.DBD4 имеет тип Real. Какая умная среда разработки, правда? Да, не совсем. Попробуем написать вот такое присвоение:

%DB1.DBD0 := 24.7;

И что мы видим? На такую запись компилятор отругался следующим сообщением:

Datatype "LReal" cannot be converted implicitly to datatype "DWord".

Вот так вот, т.е. компилятор "знает", что DBD - это Real и производит автоматическое преобразование из других форматов, когда его об этом не просят, ну, а когда такому DBD типа Real пытаешься напрямую присвоить число с плавающей точкой, вот тогда компилятор прикидывается шлангом и не может выполнить очевидное преобразование, сообщая, что DBD - это же DWord, а ему тут дробные числа, видите ли, подсовывают. 

В обсуждении на форуме Siemens разъясняют, что компилятор просто не умеет автоматически преобразовывать LReal в DWord, т.е. число с плавающей точкой компилятор всегда понимает как LReal, а если его присваивают переменной типа Real, то автоматом происходит преобразование LREAL_TO_REAL. Таким образом, для присвоения DWord дробного числа требуется два поочерёдного преобразования: LREAL_TO_REAL, а затем - REAL_TO_DINT, чего компилятор делать автоматически не умеет.



среда, 22 ноября 2017 г.

Панель быстрого запуска в Windows 7

Как известно, корпорация Microsoft, начиная с Windows Vista, последовательно ухудшает интерфейс операционной системы, который в совершенном виде присутствовал в Windows XP и не требовал никаких изменений. В настоящее время (ноябрь 2017 года) единственной приемлемой для работы операционной системой является Windows 7 SP1. Несмотря на изуродованный интерфейс, его можно преобразить до уровня Windows XP, используя Classic Shell.

Однако, вернувшись в нормальный классический вид, я обнаружил, что панель быстрого запуска работает как-то странно: значки ярлыков, расположенные слева от панели задач пропадают сразу после запуска соответствующего приложения, а если уже были открытые окна, то новые, вызванные через панель быстрого запуска, добавляются в панель задач не справа, как положено, а на том месте, где располагается ярлык вызова.
Оказалось, что это никакая не панель быстрого запуска, а всё то же продолжение панели задач, на которую тоже можно добавлять ярлыки. А панель быстрого запуска в WIndows 7 вообще отсутствует. Но её можно организовать, делается это просто:

1. Правой кнопкой мыши на панели задач, в выпадающем меню выбираем Панели -> Создать панель инстументов...


2. В появившемся диалоговом окне ввести в нижней строке

%AppData%\Microsoft\Internet Explorer\Quick Launch

После этого на панели задач появится раздел "Quick Launch" и ярлыки из этой папки (ярлыки можно сразу не увидеть из-за слишком большой надписи, тогда ярлыки будут в выпадающем меню ("»").

3. Правой кнопкой мыши на панели задач, в выпадающем меню снимаем галочку с пункта "Закрепить панель задач"

4. Правой кнопкой мыши по надписи "Quick Launch", снимаем галочки с пунктов "Показывать подписи" и "Показывать заголовки" (любители ублюдочного "ленточного" интерфейса последнюю галку могут не снимать)

5. Левой кнопкой мыши за вертикальную линию (слева от ярлыков) перемещаем наш раздел с ярлыками на удобную позицию на экране (рядом с кнопкой "Пуск", конечно же).

6. Правой кнопкой мыши на панели задач, в выпадающем меню ставим галочку на пункте "Закрепить панель задач"

среда, 26 июля 2017 г.

Отключить встроенный автоматический просмотр PDF в Firefox

давно раздражает совершенно ненужная функция браузера - просмотр pdf. Раздражает, потому что ни в одном браузере эта функция пока не реализована по-человечески, постоянно всё тормозит, глючит и ни в какое сравнение с просмотром в нормальном просмотрщике (читай - Foxit Reader'e) ни идёт. Это касается как встроенный плагинов, так и внешних. Причем внешние плагины легко отключаются, как известно, а встроенные через одно место. Ну, в частности, для отключения ненужной функции просмотра pdf в Firefox нужно следующее:

1. открыть страницу about:config

2. найти пункт pdfjs.disabled

3. установить его в состояние true

четверг, 23 марта 2017 г.

Проблема с WinCC Flexible - перестали открываться проекты

Несколько лет назад была у меня проблема с WinCC Flexible 2008 SP3 касательно того, что проект во время открытия вдруг переставал загружаться (т.е. ProgressBar на экране доходил примерно до середины - и arrivederci). Тут намедни возникла всё та же проблема, только с WinCC Flexible Smart. Видимо у них это общая болезнь, поэтому не лишним будет вспомнить способ исцеления, а именно сброс настроек WInCc Flexible.

Итак, удаляем вот эти папки и всё:
C:\Documents and Settings\All Users\Application Data\SIEMENS AG\SIMATIC WinCC flexible ХХХ
C:\Documents and Settings\USER NAME\Application Data\SIEMENS AG\SIMATIC WinCC flexible ХХХ
C:\Documents and Settings\USER NAME\Local Settings\Application Data\SIEMENS AG\SIMATIC WinCC flexible ХХХ

(вместо "ХХХ" будет конкретная версия программы)

У меня в связи с этим всплыл ещё один нюанс. Как известно, Microsoft с некоторых пор зачем-то озаботился никому не нужной безопасностью в Windows (никому не нужной, потому что те, кому нужна безопасность, Windows'ом не пользуется), и напридумывал всяких ограничений по доступу к файлам. Т.е. попытка открыть папку "Documents and Settings" приводила к сообщению, что отказано в доступе. Не оказалось проблемой это обойти, но не лишним будет вспомнить, как сие делается:

1. Заходим в свойства папки, вкладка "Безопасность", жмём кнопку "Дополнительно"



2. В окрывшемся окне выбираем вкладку "Владелец" и меняем его на себя, конечно же