تبدیل 2 عدد Hex به float

سوالات مربوط به برنامه نویسی محصولات PLC را در این بخش مطرح کنید
ارسال پست
keeia
کاربر تازه وارد
کاربر تازه وارد
پست: 15
تاریخ عضویت: 20 می 2023, 17:09
محل اقامت: مشهد

تبدیل 2 عدد Hex به float

پست توسط keeia »

فرض کنید بوسیله مدباس یک عددی مثلا 36.2 از نوع floating را دریافت کرده و به صورت 2 عدد Hex در Word زیر ذخیره می کنیم
Word0=0xcccd
Word1=0x4210
بزای اینکه عدد float معادل 36.2 را از طریق این 2 رجیستر word بدست بیاوریم باید چه کار کنیم؟
ممنون
آواتار کاربر
mahdi.faani
مدیر انجمن
مدیر انجمن
پست: 99
تاریخ عضویت: 14 می 2023, 14:39
محل اقامت: Tehran
تماس:

Re: تبدیل 2 عدد Hex به float

پست توسط mahdi.faani »

با سلام
وقتی عدد اعشاری float رو میخونید باید 4 بایت دیتا رو به Real تبدیل کنید
برای این کار دو راه دارید. یکی استفاده از اینستراکشن DESERIALIZE و دوم تغییر تنظیمات MB_MASTER. برای کاربرد شما راه دوم ساده تر هست
طبق تصویر زیر وقتی شما R/W32 رو روی مقدار True قرار بدید، اینستراکشن MB_MASTER به جای 16 بیت، 32 بیت دیتا را از Slave برداشت میکنه. دقت کنید که نوع بافر رو باید مناسب با نوع خواندن تنظیم کنید. مثلا وقتی قصد دارید به صورت 32 بیتی دیتا برداشت کنید (R/W32=True) باید بافر رو یک آرایه از DWORD تعریف کنید. DWORD همان Double Word هست که سایزش 32 بیت میشه.

در مرحله بعد باید المان اول بافر DwordBuffer[0] را به Real تبدیل کنید.

تصویر
پیوست‌ها
Capture.PNG
(52.04 KiB) هنوز دانلود نشده
آموزش ارسال پست در انجمن : viewtopic.php?t=31
قوانین انجمن : viewtopic.php?t=23
keeia
کاربر تازه وارد
کاربر تازه وارد
پست: 15
تاریخ عضویت: 20 می 2023, 17:09
محل اقامت: مشهد

Re: تبدیل 2 عدد Hex به float

پست توسط keeia »

من با راهنمایی شمابوسیله Dword مشکلم حل شد
ولی برای swap کردن یا استفاده از حالت‌های مختلف float مثل big endian یا... راهنمایی بفرمایید
ممنون
آواتار کاربر
mahdi.faani
مدیر انجمن
مدیر انجمن
پست: 99
تاریخ عضویت: 14 می 2023, 14:39
محل اقامت: Tehran
تماس:

Re: تبدیل 2 عدد Hex به float

پست توسط mahdi.faani »

برای swap کردن میتوانید از اینستراکشن SWAP استفاده کنید
این اینستراکشن جای بایت ها را تغییر میدهد تا امکان تبدیل big endian به little endian یا برعکس را برای شما فراهم کند.
آموزش ارسال پست در انجمن : viewtopic.php?t=31
قوانین انجمن : viewtopic.php?t=23
ارسال پست