نقل قول نوشته شده توسط nima_8m مشاهده تاپیک
با سلام به اساتید گرامی
سپاس از زحماتتون برای برپا نگهداشتن این تالار
من دوتا قطعه کد فاکس دارم که مربوط میشه به اتصال ترازو به برنامه حالا میخوام تحلیل این دو قطعه کد و تفاوتش رو بدونم و اگه بشه به سی شارپ تبدلیش کنم برای برنامه ممنون

wight_tar = FOPEN('COM1', 12)
wight_c = FREAD(wight_tar, 8)
FCLOSE(wight_tar)
PUBLIC a[3]
FOR i = 1 TO 3
a[i] = ASC(SUBSTR(wight_c, AT('»', wight_c)+i, 1))
a[i] = dec2hex(a(i))
ENDFOR
result = a(1)+a(2)+a(3)
RELEASE a
result = VAL(result)/1000
ENDPROC



wight_tar = FOPEN('COM1', 12)
wight_c = FREAD(wight_tar, 32)
FCLOSE(wight_tar)
PUBLIC a
a = ''
FOR i = 1 TO 8
a = a+SUBSTR(wight_c, AT('+', wight_c)+i, 1)
ENDFOR
result = VAL(ALLTRIM(a))
RELEASE a
result = result/1000
ENDPROC
با سلام
تابع fopen که در ویژوال فاکس استفاده میشه مشابه عملکرد توابع مربوط به I/O در زبان C می باشد، بنابراین شما می توانید هر جریان ورودی را به این توابع ارسال نمایید مثلا در زبان C تحت لینوکس ورودی ترمینال را به عنوان یک جریان پاس میدیم بنابراین این جریان ورودی می تواند هم یک فایل ذخیره شده بر روی هارد دیسک باشد وهم می توانید جریان ورودی بایت ها از یک پورت سریال مثل COM باشد.ویا حتی می تواند جریان ورودی از یک سوکت TCP/IP باشد...
عملکرد برنامه شما هم ابتدا یک جریان داده از ورودی دریافت میشود در یک رشته بایت بعد قطعا برای استخراج صحیح بایت ها به یک MASK احتیاج هست که در اینجا در یک حلقه با استفاده از دستورات داخل حلقه بایت های دریافتی در یک آرایه ذخیره شده و بعد از حلقه ها هم که اطلاعات آرایه چون از نوع رشته های بایت ذخیره شده با استفاده از تابع VAL به مقدار عددی Cast شده است.
تفاوت این دوتا تکه کد هم در نوع داده های دریافتی از ورودی هست که در مثال اول 8 بایت داده دریافت شده در دومی 32 بایت داده دریافت شده یا حداقل در دستور fread اینگونه تعریف شده اند.
وبرای تبدیل به کد سی شارپ هم کافی که با استفاده از کلاس serialPort یک ارتباط برقرار کنید برای Extract Data Buffer هم کافی که از Bit Mask Vector ها به همراه عملگرهای بیتی استفاده کنید.