Преобразование реального типа данных из ПЛК 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 -Водитель/

Другие вопросы по тегам