PDA

View Full Version : خواندن از باسكول و ثبت آن در هنگام ثابت شدن وزن



jafarpalideh
چهارشنبه 11 دی 1392, 10:50 صبح
با سلام .
من توسط برنامه اي در پايين ضميمه كردم اطلاعات رو از باسكول ميخونم .
حالا مشكلم اينه كه ميخوام هر وقت وزن ثابت شد ؛ وزن رو برام تويه فايل Text بريزه .
دوستان ميتونن راهنمايي كنن ؟

jafarpalideh
چهارشنبه 11 دی 1392, 14:27 عصر
دوستان کسی نمیتونه من روراهنمایی کنه ؟
مشکل من تو ثابت شدن وزنه که چطور با کدنویسی متوجه بشم که وزن ثابت شده ؟!!!
چون از همون اول که ماشین رویه باسکول میاد شروع میکنه که نشون دادن از صفر تا وزن اصلی

Abbas Naghdi
چهارشنبه 11 دی 1392, 16:22 عصر
خب 5 وزن آخر رو ذخیره کن و هر وقت برابر بودن و یا اختلاف خیلی خیلی کم داشتن اون وزن اصلی هست ...

jafarpalideh
شنبه 14 دی 1392, 06:31 صبح
میتونی بگی چطوری این کار رو بکنم ؟

ehsan2589040
شنبه 14 دی 1392, 11:49 صبح
با تایمر زمانبندی 1 ثانیه

mamadcity
شنبه 14 دی 1392, 14:45 عصر
شما می تونی با زمان بندی که دوستمون گفتن وزن رو هر لحظه آپدیت کنی بعد موقع آپدیت چک کنه که مقدار وزن ها برابره اگه برابر بود وزن نهایی رو ثبت کنه

jafarpalideh
سه شنبه 17 دی 1392, 15:54 عصر
با سلام مجدد به همه ي دوستان
دقيقا بگم كه من دقيقا حرف دوستان رو متوجه نشدم كه چي ميگن
و اگه دقيقا يه تيكه كد واسه راهنماييم بنويسن ممنون ميشم
من از كد پايين واسه گرفتن وزن از باسكول استفاده كردم
ولي اينكه كي بفهمم وزن ثابت شده و وقتي ثابت شد در يه فايل تكست تويه مثلا درايو C بريزه رو نميدونم

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.IO;

namespace serialtest
{
public partial class Form1 : Form
{
string StrRecieve;
public Form1()
{
InitializeComponent();
}

private void btnClose_Click(object sender, EventArgs e)
{
this.Close();
}
private void DisplayText(object sender, EventArgs e)
{
textBox2.AppendText(StrRecieve);
}
private void btnOpen_Click(object sender, EventArgs e)
{
serialPort1.DataBits = 8;
serialPort1.Parity = System.IO.Ports.Parity.None;
serialPort1.BaudRate = 9600;
serialPort1.PortName = "COM1";
serialPort1.Open();
btnOpen.Enabled = false;
btnClose.Enabled = true;
}

private void btnClosePort_Click(object sender, EventArgs e)
{
btnOpen.Enabled = true;
serialPort1.Close();
MessageBox.Show("PORT Closed", "OK", MessageBoxButtons.OK);
}

private void serialPort1_DataReceived(object sender, System.IO.Ports.SerialDataReceivedEventArgs e)
{
StrRecieve = serialPort1.ReadExisting();
this.Invoke(new EventHandler(DisplayText));
}

private void Form1_Load(object sender, EventArgs e)
{
btnClose.Enabled = false;
}
}
}


برنامه رو هم ميزارم
با 2008 نوشتم

arash_flag
سه شنبه 17 دی 1392, 16:44 عصر
سلام میشه بیشتر از برنامه ات بگی ، چهطوری از باسکول میخونه . باسکول به کجا وصل و..........

jafarpalideh
چهارشنبه 18 دی 1392, 07:00 صبح
با سلام
من این برنامه رو از روی پی دی افی که در زیر گذاشتم نوشتم
باسکول وصله به دستگاه نشان دهنده ی باسکول و من دستگاه نشان دهنده رو با کابل RS23 وصل کردم به به سیستم و الباقی هم که کدهست که به راحتی از باسکول میخونه
فقط مشکل من اینجاست که نمیدونم باید چیکار کنم که بفهمم وزن ثابته و همین که وزن ثابت شد بریزمش تویه یه فایل تکست
فقط وزن رو بریزه تویه فایل تکست و هر بار OverWrite بشه
یعنی در هر لحظه فقط یک وزن داخل فایل تکست باشه
دوستان منتظرم :چشمک:

http://s5.picofile.com/file/8107837318/SerialLearning.rar.html


یه جایه دیگه هم آپلود میکنم تا دوستان راحت تر باشن

http://Trainbit.com/files/3348969884/SerialLearning.rar

shahryari
چهارشنبه 18 دی 1392, 10:46 صبح
سلام
برای این کار من یک پیشنهاد دارم البته لازمه اش اینه که تست کنی
ابتدا یک آرایه از نوع عددی بعنوان بافر تعریف کن و هر لحظه عدد وارد شده رو بریز تو آرایه (این آرایه میتواند محدود یا بی نهایت باشد)
بعد توزین که تموم شده ، ماکزیمم عدد های وارد شده در این آرایه همون وزن اصلی شماست
موفق باشید

ابتدا یک تایمر با اینتر ول 1000 یا 500
سپس یک متغیر عمومی بعنوان ایندکس و یک آرایه عددی بعنوان بافر تعریف کن

استارت تایمر باید همزمان با شروع بکار باسکول آغاز شود

public int[] buffer = new int[255];
public static int i ;
private void timer1_Tick(object sender, EventArgs e)
{
if (i == 255)
{
i = 0;
}
buffer.SetValue(Int32.Parse(textBox1.Text), i);
i++;
}
سپس برای گرفتن وزن:

timer1.Enabled = false;
int maxVal = 0;
for (int j = 0; j < buffer.Length; j++)
{
int thisNum = buffer[j];
if ( thisNum > maxVal)
{
maxVal = thisNum;
}
}
MessageBox.Show(Convert.ToString( maxVal));

jafarpalideh
پنج شنبه 19 دی 1392, 06:59 صبح
مرسی عالی بود Shahryar عزیر.
فقط یک سوال .
من میخوام که اطلاعاتم رو درون یک فایل تکس بریزم .
کلا بزار بگم میخوام چیکار کنم .
میخوام که هرروز صبح کاربر نرم افزار رو اجرا کنه و نرم افزار اتوماتیک وزن رو بخونه و تویه یه فایل تکست بریزه . یعنی هر بار که ماشینی میاد رویه باسکول وزن رو رویه وزن قبلی OverWrite کنه .
کلا کارش این باشه که هر بار که ماشینی میاد رویه باسکول ، وزن رو بخونه و بریزه تویه فایل تکست .
شرمنده دارم اینقدر اذیتت میکنم

shahryari
پنج شنبه 19 دی 1392, 10:47 صبح
سلام
در قسمت دوم کدهای بالا ، وزن نهایی را با مسیج باکس نمایش میدهد برای ثبت آن در فایل از کدهای زیر استفاده کنید:
timer1.Enabled = false;
int maxVal = 0;
for (int j = 0; j < buffer.Length; j++)
{
int thisNum = buffer[j];
if ( thisNum > maxVal)
{
maxVal = thisNum;
}
}
string FileName = Application.StartupPath + "\\vazn.txt";
string finalVazn = Convert.ToString( maxVal);
System.IO.File.WriteAllText(FileName, finalVazn);

jafarpalideh
شنبه 21 دی 1392, 15:47 عصر
با سلام مجدد
من وقتي وزن رو ميخونم به اينصورت ميخونه
P+0000 P+0000 P+0000 P+0000 P+0000 P+0000 P+0000 P+0000البته الان چيزي روش قرار نداره و وزن رو صفر نشون ميده
و كد بالا عملا جواب نميده
Shahryar عزيز يا دوستان ديگه ميتونن من رو راهنمايي كن ؟
يه عكس هم ميزارم

patrick5053
شنبه 21 دی 1392, 21:42 عصر
سلام منظورت اینه که میخوای فقط عدد باشه و اون p رو نشون نشده؟

shahryari
یک شنبه 22 دی 1392, 09:35 صبح
سلام
کد اون قسمتی رو که داره وزن رو میخونه بذار

jafarpalideh
یک شنبه 22 دی 1392, 09:44 صبح
دقیقا کد کامل رو بالا گذاشتم

shahryari
یک شنبه 22 دی 1392, 10:37 صبح
سلام مجدد
با توجه به کدهای پست 7 این کدرو پیدا کنید و بشکل زیر اصلاح کنید
private void DisplayText(object sender, EventArgs e)
{
textBox2.Text = StrRecieve.Replace ("p+","").Trim();
}