Преобразование реального типа данных из ПЛК Siemens (S7-1200) для отображения в Visual C# Windows Form
Я пытаюсь прочитать реальное значение из ПЛК Siemens (S7-1200) и отобразить его в форме Windows. Я использую библиотеку S7.NET для связи с ПЛК и TIA Portal V15 для программирования / мониторинга ПЛК.
Я могу прочитать конкретный блок данных (DB3.DBD0) в форме Windows из ПЛК, он действительно возвращает значение, но значение отображается в каком-то другом формате. Например, если я изменю значение в DB3.DBD0 на "2.22", это даст мне "1.074665+09". Я хотел бы, чтобы он возвращал то же значение, что и в TIA Portal, то есть "2.22".
Ниже приведен код, который я использую для преобразования значений.
object real0 = Convert.ToSingle(plc.Read("DB3.DBD0"));
label43.Text = real0.ToString();
Если мой вопрос непонятен, дайте мне знать, я могу попытаться объяснить более подробно.
Заранее спасибо!
3 ответа
Тип данных ПЛК выглядит как REAL (число с плавающей запятой) "Число с плавающей запятой IEEE" согласно http://www.plcdev.com/step_7_elementary_data_types
Эти числа представлены в виде дробей, поэтому 2,2 невозможно точно определить. Прекрасное подробное объяснение: почему числа с плавающей запятой неточны?
Хорошее простое объяснение: https://floating-point-gui.de/basic/
Попробуйте преобразовать данные в десятичные типы данных, а затем округлить, чтобы удалить завершающие 0
Siemens и другие системы ПЛК хранят эти числа в виде СЛОВ.
Например, значение 2.22 с плавающей запятой/действительное значение сохраняется как 0x400E147B в ПЛК. в порядке байтов ABCD. А=40, В=0Е, С=14, Г=7В.
Но, как я вижу, вы читаете правильное шестнадцатеричное значение из ПЛК, но конвертируете его в 32-битное ЦЕЛОЕ ЧИСЛО.
Вы можете проверить:https://www.scadacore.com/tools/programming-calculators/online-hex-converter/
Вы должны разыграть его как uint и преобразовать в двойное.
например:var real0 = Convert.ToDouble((uint)plc.Read("DB3.DBD0"));
или это:var real0 = ((uint)plc.Read("DB3.DBD0")).ConvertToDouble();
Надеюсь, это помогло :)
для получения дополнительных примеров вы можете посмотреть это видео, оно немного устарело, поэтому вам, возможно, придется сделать некоторые мелкие вещи по-другому: https://www.mesta-automation.com/siemens-s7-plc-c-s7-net-plc -Водитель/