نقل قول: تحلیل و تبدیل دو قطعه کد
سلام
تا اونجایی من میدونم FOPEN برای باز کردن فایله نه خواندن از پورت com!امیدوارم اساتید راهنمایی کنند.
نقل قول: تحلیل و تبدیل دو قطعه کد
نقل قول:
نوشته شده توسط
gh_khajehzade
سلام
تا اونجایی من میدونم FOPEN برای باز کردن فایله نه خواندن از پورت com!امیدوارم اساتید راهنمایی کنند.
این کد ها در حال حاضر به خوبی دارن کار میکنن
نقل قول: تحلیل و تبدیل دو قطعه کد
نقل قول:
نوشته شده توسط
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 ها به همراه عملگرهای بیتی استفاده کنید.
1 ضمیمه
نقل قول: تحلیل و تبدیل دو قطعه کد
ممنون و سپاسگذارم از پاسخ کامل شما این کد برای ترازوهای قدیمی بود من یه عکس از ارسال دیتا ترازوهای جدیدی به پیوست فرستادم آیا میشه با همین کد و یه تغییراتی این اطلاعات رو خوند ممنون میشم قدیما ترازوها به صورت هگز میفرستادن ولی الان عیناً عدد وزن رو ارسال میکنن ممنون میشم راهنمایی بفرمایید
اعداد ارسالی بعداز مساوی 3 رقم اعداد صحیح دات و سه رقم اعداد اعشاری
نقل قول: تحلیل و تبدیل دو قطعه کد
نقل قول:
نوشته شده توسط
nima_8m
ممنون و سپاسگذارم از پاسخ کامل شما این کد برای ترازوهای قدیمی بود من یه عکس از ارسال دیتا ترازوهای جدیدی به پیوست فرستادم آیا میشه با همین کد و یه تغییراتی این اطلاعات رو خوند ممنون میشم قدیما ترازوها به صورت هگز میفرستادن ولی الان عیناً عدد وزن رو ارسال میکنن ممنون میشم راهنمایی بفرمایید
اعداد ارسالی بعداز مساوی 3 رقم اعداد صحیح دات و سه رقم اعداد اعشاری
خواهش میکنم دوست عزیز!
لطفا نمونه بافر بایتی که از ترازو های جدید میگیرید را در اینجا قرار بدید واینکه عینا که نمی تونه عدد دسیمال باشه به هرحال سخت افزار یک کد باینری تولید میکنه که تبدیل به یک هگز میکنه به عنوان یک ورودی تحول برنامه میده یعنی به هرحال یک مبدل داره! به همین ترتیب بافر دیتایی که از ترازو گرفتید را نمونه اش را ارسال کنید امیدوارم منظورم را درست بیان کرده باشم.
1 ضمیمه
نقل قول: تحلیل و تبدیل دو قطعه کد
نقل قول:
نوشته شده توسط
farhad_shiri_ex
خواهش میکنم دوست عزیز!
لطفا نمونه بافر بایتی که از ترازو های جدید میگیرید را در اینجا قرار بدید واینکه عینا که نمی تونه عدد دسیمال باشه به هرحال سخت افزار یک کد باینری تولید میکنه که تبدیل به یک هگز میکنه به عنوان یک ورودی تحول برنامه میده یعنی به هرحال یک مبدل داره! به همین ترتیب بافر دیتایی که از ترازو گرفتید را نمونه اش را ارسال کنید امیدوارم منظورم را درست بیان کرده باشم.
ممنونم از پاسخ های کامل شما من یه عکس به پیوست فرستادم کامل توضیح داده که وزن ها به صورت AASCII ارسال میشه ترازوهای قدیمی به صورت باینری میفرستادن امیدوارم کمک کنه
نقل قول: تحلیل و تبدیل دو قطعه کد
نقل قول:
نوشته شده توسط
nima_8m
ممنونم از پاسخ های کامل شما من یه عکس به پیوست فرستادم کامل توضیح داده که وزن ها به صورت AASCII ارسال میشه ترازوهای قدیمی به صورت باینری میفرستادن امیدوارم کمک کنه
ببنید این تکه برنامه کارتون راه میندازه!(البته که تست نکردم زحمت تست اش با خودتون)
using System;
using System.IO.Ports;
using System.Threading;
public class PortChat
{
static bool _continue;
static SerialPort _serialPort;
public static void Main()
{
string name;
string data;
Thread readThread = new Thread(Read);
_serialPort = new SerialPort("COM1", 19200, Parity.None, 8, StopBits.One);
_serialPort.Handshake = Handshake.None;
_serialPort.ReadTimeout = 500;
_serialPort.WriteTimeout = 500;
_serialPort.DataReceived += new SerialDataReceivedEventHandler(sp_DataReceived)
try
{
if(!(_serialPort.IsOpen)){
_serialPort.Open();
readThread.Start();
}
}
catch (Exception ex)
{
MessageBox.Show("Error opening/writing to serial port :: " + ex.Message, "Error!");
}
readThread.Join();
_serialPort.Close();
}
void sp_DataReceived(object sender, SerialDataReceivedEventArgs e)
{
Thread.Sleep(500);
_continue = false;
}
public static void Read()
{
while (_continue)
{
try
{
data = _serialPort.ReadLine();
Console.WriteLine(data);
}
catch (TimeoutException) { }
}
}
int getWeight(){
int weight =0 , i =0;
string tmp ;
foreach (string buf in data) {
i++;
tmp += buf.Substring(buf.IndexOf("+") + i , 1) ;
}
weight = Convert.ToInt32(buf.Trim(), 16) / 1000;
}
الان ین برنامه تبدیل شده برنامه وی فاکس هست که قرار داده بودید.
امیدوارم موفق باشید.
نقل قول: تحلیل و تبدیل دو قطعه کد
سلام به اساتید گرامی خصوصا جناب شیری که همیشه به ما لطف دارن
تو پست شماره 5 خروجی ترازو روی هایپرترمینال نمایش داده شده که به اینصورت هست (پست شماره 5 )
=015.120(kg)
کاملا واضح است که سه رقم اول از سمت چپ عدد صحیح و سه رقم بعد از دات رقم اعشاری است و نمایش نماد کیلوگرم
من یه کد میخوام که عدد صحیح با سه رقم اعشاری رو از پورت بخونه و نمایش بده یعنی مساوی و صفر قبل عدد و نماد کیلوگرم حذف بشه
کدی که من درحال حاضر دارم استفاده میکنم تو پست شماره یک هست
نقل قول: تحلیل و تبدیل دو قطعه کد
نقل قول:
نوشته شده توسط
nima_8m
سلام به اساتید گرامی خصوصا جناب شیری که همیشه به ما لطف دارن
تو پست شماره 5 خروجی ترازو روی هایپرترمینال نمایش داده شده که به اینصورت هست (پست شماره 5 )
=015.120(kg)
کاملا واضح است که سه رقم اول از سمت چپ عدد صحیح و سه رقم بعد از دات رقم اعشاری است و نمایش نماد کیلوگرم
من یه کد میخوام که عدد صحیح با سه رقم اعشاری رو از پورت بخونه و نمایش بده یعنی مساوی و صفر قبل عدد و نماد کیلوگرم حذف بشه
کدی که من درحال حاضر دارم استفاده میکنم تو پست شماره یک هست
سلام خواهش میکنم دوست گرامی!
ببنید این کد جواب میده! فقط به جای ورودی تابع مقدار fread را پاس بدید
*wight_tar = FOPEN('COM1', 12)
*wight_c = FREAD(wight_tar, 8)
*FCLOSE(wight_tar)
*!* if unsigned number
wight_c = "015.120(kg)"
*21.510
?getWeight(wight_c)
*!* if signed number
wight_c ="015.12-(kg)"
*-21.510
?getWeight(wight_c)
FUNCTION getWeight
PARAMETERS wight_c
PUBLIC bufStr[7] as byte,result as double
str_weight = ""
FOR i=1 TO LEN(wight_c)-5
bufStr[i] = SUBSTR(wight_c, AT("(kg)",wight_c)-i, 1)
str_weight = str_weight +bufStr[i]
ENDFOR
result = VAL(str_weight)
RETURN result
ENDFUNC