Задача состоит в том, что с OPC приходят значения тип данных string,
в нем вложено 4-х байтное значение, например: E0 92 9A 19
Нужно получить значение Float
Буду признателен за пример реализации скрипта.
Задача состоит в том, что с OPC приходят значения тип данных string,
в нем вложено 4-х байтное значение, например: E0 92 9A 19
Нужно получить значение Float
Буду признателен за пример реализации скрипта.
+79104444236
С уважением,
Лапшин Вячеслав
а язык какой? BitConverter.ToSingle(byte[], StartIndex) в шарпах ну если что, то переставить байты еще
поправил
Упс, еще из строки в байтовый массив придется кинуть
Последний раз редактировалось melky; 02.04.2022 в 19:39.
Ну там проще, вырезать каждый элемент и превращать в число всяким int.TryParse и подобным. что там есть для этого в скриптах и складывать в массив, можно сразу в нужной последовательности, если требуется перестановка.
Для второго надо писать функцию. Ну или убить пробелы и попробовать преобразовать, но не уверен. Я даже не уверен за одиночные E0
Convert.ToByte(string, 16); - только вот в байт можно только два символа конвертнуть из HEX
Последний раз редактировалось melky; 03.04.2022 в 00:44.
Все получилось спасибо коллегам по цеху Евгению Кислову и Сергею И
Конвертер String(Hex) to Float
Пример: 60 BA 07 41
Float - Little Endian (DCBA)
Код:using System; using MasterSCADA.Script.FB; using MasterSCADA.Hlp; using FB; using FB.FBAttributes; using System.Linq; using System.Globalization; [FBRetain] public partial class ФБ : ScriptBase { public override void Execute() { int intValue = int.Parse(HexString.Replace(" ", ""), System.Globalization.NumberStyles.AllowHexSpecifier); byte[] bytes = BitConverter.GetBytes(intValue); Array.Reverse(bytes); Float = BitConverter.ToSingle(bytes,0); } }
+79104444236
С уважением,
Лапшин Вячеслав
интересная конструкция с int.Parse а если прилетит из OPC 8 байт или строка в HEX с несколькими переменными ?
Еще будете функцию городить... по принципу когда придет проблема, будем ее решать ?
з.ы. по коду не понял откуда берется HexString ????
я так понимаю где-то было string HexString = ""; но тут его нету
Теперь я понимаю, почему MasterScada так "быстро" работает потому что программируют ее по мере возникновения проблем
Последний раз редактировалось melky; 03.04.2022 в 08:29.
Прав конечно...
Скажем так, оно и прилетает иногда "не верно"
Пример: 2022-04-03_08-37-06.png
Онлайн конвертер ascii_to_hex: C0 58 E6 40
Скрипт пишет ошибку в лог и ничего не делает. Вполне адекватное поведение.
Однако общую картину это не портит, и скада тут подвязана как некий промежуточный, доказательный элемент.
То есть в общем и целом графики пишутся, вот что за ночь записало:
2022-04-03_08-20-23.png
Откуда вообще выросла эта задача(работа с конвертером протоколов ADFweb):
https://fast-project.ru/articles/snmp-i-modbus.html
Последний раз редактировалось krollcbas; 03.04.2022 в 08:37.
+79104444236
С уважением,
Лапшин Вячеслав
Велосипед не мой. Код, проверяющий строку на праведность HEX
Например если строка не hex (сперва удалить пробелы ессно) то возвращайте или предыдущее значение или недостоверное значение по желаниюКод:public static bool IsHex(this string s) { foreach (char c in s) if (!Uri.IsHexDigit(c)) return false; return true; }
з.ы. ADFWeb больше никогда не куплю машинка конено справляется с задачей, но она придурошная во всем остальном...
Правда ценник гуманнее, чем у Babel Buster
Последний раз редактировалось melky; 03.04.2022 в 09:19.