Страница 1 из 1

Системы счисления

СообщениеДобавлено: Ср апр 08, 2015 2:50 pm
idementia
Здравствуйте.
Выполняя одну из задач по бинарной арифметике в InTouch столкнулся с проблемой.
Я пытаюсь написать в коде приложения CRC16 - прямым методом. Путем деления на полином.
Естественно, тот факт, что в InTouch отсутствуют операции логического битового сдвига, а также то, что нет хорошего функционала, который можно задействовать при переводе чисел из одной в другую систему счисления, жизнь не облегчает.

Задача конкретная в следующем. В тег integer инициализируется слово (16 бит - до 32767). К нему необходимо дописать 16 нулей, чтобы нормально поделить. И вот здесь встает проблема. По идее 32битная величина, с которой я хочу работать имеет право на существование в integer, но как ее можно занести туда, если InTouch работает только в десятичной системе?

Я думал, что можно было бы умножить 16ричное число на 10000, что дало б желаемый результат. Но опять же - арифметика только десятичная.

Вторая попытка была - перевод слова в строку StringFromIntg(Word,2/16), прибавление 16 или 4 нулей (в зависимости от системы счисления, в которой считываем). Но после этого неизвестно, как перевести набор двоичных (или шестнадцатеричных) символов в число, ведь в интаче StringToIntg переводит только в десятичную систему.

Подскажите, пожалуйста, какие выходы вообще можно из такой ситуации придумать.

Re: Системы счисления

СообщениеДобавлено: Ср апр 08, 2015 3:15 pm
Генератор зла
idementia писал(а):По идее 32битная величина, с которой я хочу работать имеет право на существование в integer, но как ее можно занести туда, если InTouch работает только в десятичной системе?

Смешались в кучу: кони, люди,... Как коррелируется 32-бит и десятичная величина? А 32-бит не может быть 16-ричной величиной? Или BCD ?

IntFromString() Script Function

All Tech Notes and KBCD documents and software are provided "as is" without warranty of any kind. See the Terms of Use for more information.

The InTouch™ script function IntFromString() converts a given numeric string into an integer value based on a given Base (that is, Base 2, 8, 10, 16, or 32). IntFromString() requires that you supply the integer base of the string within a range of 2 to 35. IntFromString() is limited to InTouch's 32-bit integer range of -2,147,483,648 to 2,147,483,647. If you supply a value that is outside of this range, then a zero value (0) is returned and an error message is logged to the Wonderware Logger.

Note If the numeric string that is passed to IntFromString() contains invalid characters or numbers for the specified base value, then the invalid characters will be ignored and IntFromString() will return an incorrect number with no errors or warnings. Invalid characters include punctuation characters (",", "!", ";", etc.). Invalid numbers are when the given numeric string is not a valid base value. For example, if a numeric string of '1' is entered with a base of '8', then a value of '1' is returned. If a numeric string of '19' is enterd with a base of '8', then again, a value of '1' is returned because 9 is not a valid base-8 character (0-7 are valid).
Unzip the file that you downloaded, then the copy the files WWHEX.DLL, WWHEX.WDF and README.TXT into your InTouch directory.

Using the IntFromString() Function

Format:
<Integer_tag> = IntFromString(<Numeric_Text>, <Base>);
Where <Integer_tag> is a valid InTouch Integer tagname, <Numeric_Text> is the given numeric string that is converted to an integer value using the specified <Base> value (that is, 2, 8, 10, 16 or 32).
For example, IntFromString( "FF", 16 ) will return a value of 255; IntFromString( "11010", 2 ) will return a value of 26; and IntFromString( "8", 10 ) will return a value of 8.

Ссылка для скачивания библиотек:
https://cloud.mail.ru/public/d2570e64fa1e/Guest

Re: Системы счисления

СообщениеДобавлено: Ср апр 08, 2015 3:31 pm
idementia
Спасибо большое. Я понимаю разницу между системой счисления и битностью.
Собственно, проблема была в том, что у меня как бы этой функции и не было. Поэтому не было способа инициализировать в число из строки величину не в десятеричной системе. У меня стоит демка, в ней quick-функции обрезаны. А как выяснилось, именно там все нужные мне SHR, SHL и т. п.
Есть способ таким же образом на демку скинуть библиотеки, например, оглашенных quick-функций или нужно ломать обязательно? Последнее просто, не очень желательно, т.к. железо корпоративное, политика лицензионного ПО и т. п. :)

Re: Системы счисления

СообщениеДобавлено: Чт апр 09, 2015 12:34 am
Генератор зла
idementia писал(а):У меня стоит демка

Не демка, а вовсе безлицензионка. Демка (времянка) как раз ничего не режет. Запросите времянки у дистрибьютора, делов то.