الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

مشكلة في نظام تجميع بيانات

مغلق
بدأه المهندس نسر في 5 ديسمبر 2005 · 5 رد · 649 مشاهدة · في التحكم الصناعي وربط الحاسب بالعالم الخارجي
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

الأخوة الكرام

السلام عليكم ورحمة الله وبركاته

تعرفت على منتداكم الأغر قريبا وهو من أفيدها وأزخرها بالمعلومات وأرجو أن أجدا حلا لمشكلتي

مشروعي هو DAS-- Data Acquisition System وهو لجمع معلومات ذات صيغ مختلفة (analog,didgital, pulse) وتخزينها مؤقتا ثم إرسالها إلى الكمبيوتر خلال فترات زمنية معينة وهذا الكمبيوتر هو مستخدم (ويندوز) يرسل هذه المعلومات عبر الإنترنت إلى سيرفر (لينوكس) الذي يقوم بدوره بإعادة إرسالها إلى مجموعة من المستخدمين (ويندوز) عبر الإنترنت أيضا

قمنا بعمل الدائرة الكهربائية التي سيتم ربطها على منفذ الطابعة التي استخدمنا فيها PIC 18F452 المشكلة هي في أننا عندما نستلم المعلومات نريد أن نجعلها على صيغة ملف نصي (txt file) لإمكانية التعامل فيها من عدة أنظمة تشغيل ولصغر الحجم

ولا يمكن التحكم بذلك إلا عن طريق برنامج... فما هي لغة البرمجة يمكن أن تعمل تكوين (create) للملف النصي وتقوم بإرساله عبر الإنترنت إلى جهاز آخر ذو نظام تشغيل مختلف...

إضافة إلى أنني بحثت كثييييرا في لغات كثيرة والآن على وشك أن استقر على الجافا لكنني إلى هذه اللحظة لم أجد الكود الذي يخدمني في هذا المشروع

فماذا تنصحونني

وما هو رأيكم دام فضلكم؟؟؟

وجزاكم الله كل خير

#2

وعليكم السلام ورحمة الله وبركاته

مرحبا بك أخي نسر , ان شاء الله تستفيد من المنتدى وتفيد قدر استطاعتك

واضح من استفسارك انه بعيد تقريبا عن التحكم , الموضوع برمجي فقط

يمكنك عمل هذا الأمر بأي لغة برمجة تستطيع التعامل مع المنافذ , والملفات, والشبكات , يعني لغة السي تفي بالغرض , فيجوال بيسيك تمشي , سي شارب عادي , أسمبلي وماله :D

ملاحظة : لا يهم نوع نظام التشغيل المستقبل فجميع أنظمة التشغيل تدعم TCP/IP وتتعامل بنفس الاسلوب , وتستطيع ارسال أي بيانات من أي برنامج على اي جهاز الى برنامج آخر على جهاز آخر بنظام تشغيل مختلف ولا توجد مشكله في هذا

أنا افضل السي عن غيرها , و عموما الأمثلة في المنتدى لا حصر لها في جميع اللغات

بالتوفيق

#3

الله يجزيك كل خير وبارك الله فيك أخي Asm4all

طيب لنفرض أنني اخترت لغة الفيجوال بيسك ... من أين يمكن أن آتي بالكود الذي يخدمني في هذا الموضوع... هل من الـ MSDN أم أنه يوجد موقع معين يخدم... أنا المشكلة أن جميع مشاريعي كانت هاردوير فقط وهذا الأول الذي فيه برمجة مع شبكات

بارك الله فيك

ولا شلت يمينك

#4

جميل , اخترت لغة برمجه متوفرة المصادر و لن تحتاج للتجول خارج المنتدى :D ,

سلسلة دروس لشرح التعامل والتحكم بالparallel port

Winsock API Tutorial, شرح برمجة تطبيقات Client/Server

شرح التعامل مع الملفات

و لو احتجت اي شيء في الفيبي فقط استخدم خاصية البحث , وعلى ثقه انك سوف تجد ما تبحث عنه

#5

بالمرة , نفس القصة في السي

وبدل الويندوز خلينا نشوف لينوكس

للتعامل مع منفذ الطابعه :

Using I/O ports in C programs

مثال غير مجرب - تحتاج صلاحية الـ root :

#include <stdio.h>
#include <asm/io.h>
#include <unistd.h>

int main(int argc, char *argv[]) {
  unsigned char DataByte;
  ioperm(0x378, 3, 1);
  DataByte = inb(0x378); // input Byte from port 0x378 = 888
  printf("[*] We Got %d from 0x378\n", DataByte);
  outb(0x08, 0x378); // output Byte with value (8) to port 0x378
  printf("[*] We Sent 0x08 To 0x378\n");
}

للتعامل مع الشبكات :

Introduction to Socket Programming

مثال مجرب من قبل وبه تعامل مع الملفات :

//client.cpp
#include <stdio.h>
#include <sys/types.h>
#include <sys/fcntl.h>
#include <sys/socket.h>
#include <netdb.h>

#define BUF_SIZE 4096
int main(int argc, char *argv[]) {
  int soc,bytes;
  char buf[BUF_SIZE];
  struct hostent *host;
  struct sockaddr_in channel;
  if(argc != 4) {
    printf("Usage : client server-name server-port file-name");
    return 1;
  }
  host = gethostbyname(argv[1]);
  if(!host) {
    printf("Get host by name failed");
    return 1;
  }
  if((soc = socket(AF_INET, SOCK_STREAM, 0)) == -1) {
    printf("[-] trying ... socket failed");
    return 1;
  }
  memset(&channel,0,sizeof(channel)); /* fill channel with zero */
  channel.sin_family = AF_INET;
  memcpy(&channel.sin_addr.s_addr,host->h_addr,host->h_length);
  channel.sin_port = htons(atoi(argv[2]));
  printf("[*] Connecting to %s:%s ... ", argv[1], argv[2]);
  if(connect(soc, (struct sockaddr *) &channel, sizeof(channel)) == -1) {
    printf("\n[-] Sorry, cannot connect to %s:%s. Try again...\n", argv[1], argv[2]);
    return 1;
  }
  printf("OK\n");
  printf("-- %s --\n\n", argv[3]);
  send(soc, argv[3], strlen(argv[3])+1, 0);
  while(1) {
    bytes = recv(soc, buf, BUF_SIZE, 0);
    if(bytes <= 0) {
      printf("\n[*] ... Done\n");
      return 0;
    }
    write(1, buf, bytes);
  }
}

//server.cbb
#include <stdio.h>
#include <sys/types.h>
#include <sys/fcntl.h>
#include <sys/socket.h>
#include <netdb.h>

#define SERVER_PORT 12345
#define BUF_SIZE 4096
#define QUEUE_SIZE 10

int main(int argv, char *argc[]) {
 int lsnsoc,on=1,soc,hFile,bytes;
 char buf[BUF_SIZE]; /* buffer for outgoing file */
 struct sockaddr_in channel; /* holds IP address */ 
 memset(&channel,0,sizeof(channel)); /* fill channel with zero */
 channel.sin_family = AF_INET;
 channel.sin_addr.s_addr = htonl(INADDR_ANY);
 channel.sin_port = htons(SERVER_PORT);

  /* Passive open, Waite for connection */
  if((lsnsoc = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP)) == -1) {
    printf("[-] socket failed\n"); /* create socket */
    return 1;
  }
  setsockopt(lsnsoc, SOL_SOCKET, SO_REUSEADDR, (char *) &on,sizeof(on));
  if(bind(lsnsoc, (struct sockaddr *) &channel, sizeof(channel)) == -1) {
    printf("[-] bind failed\n");
    return 1;
  }
  if(listen(lsnsoc, QUEUE_SIZE) == -1) {
    printf("[-] listen failed\n");
    return 1;
  }
  /* Socket is now set up and bound, Wait for connection and process it */
  while(1) {
    if((soc = accept(lsnsoc, 0, 0)) == -1) {
      printf("[-] accept failed\n"); /* block (waite) for connection request */
      return 1;
    }
    recv(soc, buf, BUF_SIZE, 0) /* read file name from socket */ 
    /*Get and return the file */
    if((hFile = open(buf, O_RDONLY)) == -1) { /* open the file in read only mode to sent back */
      send(soc, "[-] open file failed\n", 21, 0);
      printf("[-] open file failed\n");
      return 1;
    }
    while(1) {
      bytes = read(hFile,buf,BUF_SIZE); /* read from file */
      if(bytes <= 0) break; /* check for end of file */
      send(soc, buf, bytes, 0); /* write bytes to socket */
    }
    close(hFile); /* close file handle */
    close(soc); /* close connection socket*/
    close(lsnsoc); /* close listen socket*/
  }
}
#6

الله أكبر عليك

جزاك الله خيرا وبوأك من الجنة مأوى

سنبدأ في الغد إن شاء الله

فرج الله همك وأزال كربك أخي الغالي Asm4all

هذا الموضوع مغلق.

مواضيع مشابهة

عدد الزوار حالياً

المتواجدون خلال آخر دقيقتين · يتحدّث كل ٣٠ ثانية

—الإجمالي—أعضاء مسجّلون—زوار بدون تسجيل

جارٍ التحقق من المتواجدين…