مشاهدة النسخة كاملة : كيف ارسل البيانات الى مخرج الطابعة عبر فيجوال بيسك


أبو عابد
15-08-2004, 10:24 PM
بسم الله


أرجو المساعدة....




كيف يمكنني ارسال بيانات إلى مخرج الطابعة عبر رنامج الفيجوال بيسك لتشغيل الأجهزة الكهربائية.




وشكراً

zklover
01-09-2004, 03:58 PM
لا ادري سامحني

mohamed
13-09-2004, 07:26 PM
أخي الكريم إليك الجواب على سؤالك وهو منقول من أحد المنتديات
واسم الكاتب غير معروف وهو ope

قبل البدء احب ان اذكر بعض الملاحظات التي سيواجهها البعض , و لتوفير وقت طرح اسئلة المشاكل التي قد تواجه البعض فاذكر النقطتين التاليتين:

1. اولا نحتاج الى مكتبة يستطيع من خلالها الفجول بيسك ان يتعامل مع منفذ الطابعة , هي عبارة عن ملف تستطيعون انزاله هو و ملفات المصدر الخاصة بة من الرابط التالي

http://www.logix4u.net/inpout32_source_and_bins.zip

ملاحظة هامة : الملف هذا يجب وضعه في مجلد العمل , يعني اول ما تفتح ملف جديد في الفجول بيسك , احفظه على طول و حطه في مجلد معين , و حط الملف ايضا في نفس المجلد, هذا كل مافي الامر!

2. لن تعمل المكتبة مع الوندوز 2000 او الوندوز اكس بي, ستعمل ان شاء الله في الوندوز ملنيوم و 98.



لنبدأ العمل بعون الله:

افتح ا لفجول بيسك و اختر standard EXE و اضغط على open

اضف الى الفورم الذي تراه امامك زرين امر (command buttons) وغير الcaption
الان يجب اضافة module و هو بالضغط باليمين على كلمة project في القائمة الموجودة على اليمين
الان نكتب التالي في داخل الmodule

Public Declare Sub Out Lib "inpout32.dll" Alias _
"Out32" (ByVal PortAddress As Integer, ByVal Value As Integer)


يفضل نسخ الجملة في الاعلى بل اطلب نسخة حتى لا تظهر مشاكل تعود لعدم كتابته بالطريقة الصحيحة. عموما الكود الخاص بالتحكم سيكون كالتالي
لنشرح الكود الآن:

الكوماند الاول هو زر ( شغل) و يحتوي على الكود التالي:

Out &H378, 1

out هو الامر الذي ينفذ اخراج الفولت و التحكم فيه ( كما ذكرنا صفر وواحد , يعني تشغيل و اغلاق فقط- حاليا)

&H378, هو العنوان المراد التحكم به, و هو عنوان منفذ الطابعة الديفولت في اغلب الاجهزة و الارقام هي بنظام السداسي العشري( الهكس)

1 , هو الرقم بالنظام العشري , وهنا هو بيت القصيد, هنا نغير الرقم بحسب حاجتنا, اذا اردنا تشغيل D1 فقط فنكتب 1 ,و اذا اردنا مثلا تشغيل D1 and D2 and D3 يعني بالعدد الثنائي 111 و بتحويلها الى النظام العشري نحصل على الرقم 7 , نضعه مكان الرقم 1 و ستعمل الابر الثلاث ان شاء الله

الكوماند الثاني هو لاغلاق جميع ما تم تشغيله من ابر, بالتصفير, لاحظوا هنا , اننا نغلق كل شي و ليس شيئا واحد او ابرة واحدة.

الامر الاخير هو امر ينفذ مع بداية تشغيل البرنامج , في اغلب الاحيان عند توصيل منفذ الطابعة و تشغيل الكمبيوتر تكون جميع المنافذ مشتغلة و تعطي 5 فولت بشكل افتراضي , فيجب تصفيرها في البداية حتى نتحكم بها بالشكل المطلوب.

اذا فرضنا اننا بعد تشغيل D1 and D2 and D3 اردنا ان نغلق D3 و نبقي على البقية يعملون , ماذا نفعل؟؟ هذا السؤال انتظر الاجابة عليه بعد قراءة الدرس لاعلم مدى استيعابكم.

اعتقد ان الامور اتضحت اكثر و اكثر الان, كل ماعلينا هو التأكد من ذلك بشكل عملي, و توصيل كيبل الى منفذ الطابعة و بعد الانتهاء من البرمجة او المثال المذكور, نوصل ال voltmeter بمنفذ الطابعة , وصلة نوصلها بالابرة الثانية و الوصلة الاخرى نوصلها بالابرة رقم 25 و نشغل البرنامج و نرى تغيير الفولت فيه. صورة للvoltmeter موجودة هنا:



يمكن توصيل LED الى الابر التي ذكرتها و عند تشغيل البرنامج بنجاح سيضيء الLED و عند الضغط على اغلاق سيطفأ الLED



**** الاخوة المبتدئين لا تقرأوا هذه الفقرة لانكم لن تحتاجونها و يمكن تزيد التعقيد ان وجد****

وحتى لا نظلم اصحاب الانظمة الاخرى مثل اللنكس , فاني وجدت كود للغة السي ( لم اجرب الطريقة لكنني وجدتها في احد المواقع)



#include
#include
#include
#include

#define base 0x378 /* printer port base address */
#define value 255 /* numeric value to send to printer port */

main(int argc, char **argv)
**
if (ioperm(base,1,1))
fprintf(stderr, "Couldn't get the port at %xn", base), exit(1);

outb(value, base);
}


الان احفظ الملف باي اسم و ليكن lpt_test.c ثم نفذ الامر التالي:



gcc -O lpt_test.c -o lpt_test

تكد من انك الرووت, و نفذ الامر التالي:

chmod +s lpt_test

و شغل البرنامج و ان شاء الله سيعمل معك , مع العلم ان الرقم 255 هو الرقم العشري بمعنى ان كل الابر ستعمل وقتها , غير القيمة الى اي قيمة تريدها حتى تملك التحكم الاكبر.

============================================
و يقسم منفذ الطابعة إلي ثلاثة أقسام

قسم البينات
Data

قسم الحالة
Status

قسم التحكم
control

و كل قسم (منفذ) من هذة المنافذ لة عنوان

فمثلاً العنوان الذي قمت بذكرة هو عنوان البيانات

و يمثل البينات كهارد ووير 8 بنات في المنفذ المتوازي (منفذ الطابعة)
الصورة رقم 1 في المرفقات

يعني أحنا دلوقتي معنا الأتي :

1 - 8 بنات خرج توصلهم عن طريق منفذ البيانات
2 - 5 بنات دخل و احد منهم معكوسة(سوف أوضح معني ذلك ل تقلق) توصلهم عن طريق منفذ الحالة
3 - 4بنات خرج توصلهم عن طريق منفذ الحالة

و الثمانية بنات المتبقية بقية ال25 هم بمثابة أرضي مقابل 8 بنات بيانات

و يتم الوصول سواء أن تخرج أشارة أو تستقبل أشارة في الفيجوال بيسيك عن طريق مكتبات ربط ديناميكية من اللي أستخدمها الأخ
Obe

فمثلاً أننا وصلنا ثمانية موحدات مشعة علي الثماني بنات الخاصين بالبيانات و نريد أنارتهم

نقوم بأرسال هذا البايت

'11111111'

إلي عنوان منفذ البيانات و هو 378

و تكون التعليمة هي

Out &H378, 1

نعم
1
الواحد في الفيجوال بيسيك عشري النظام يعني الكلمة المكونة من ثماني بتات و المنسوب

إليها واحد بمثابة ثماني وحايد في النظام الثنائي

فأنت تتعامل مع كمبيوتر يعني صفر و واحد

الصورة رقم 2 في المرفقات

كما تري 8 ثنائيات مضيئة و موصل مع كل ثنائي مضئ مقاومة علي التوالي علشان الثنائي لا يتلف

و موصلين جميعاً بالأرضي و هم ثماني بنات

ahmad_smart
28-02-2006, 02:46 PM
أنا مبتدىء فى الفيجو بيسك و عايز أعرف أدخل وأخرج data من وألى الكمبيوتر عن طريق ال vb

engn boy
03-12-2006, 09:23 AM
شكرا جزيلا اخي

Ahmed Waheed
21-04-2007, 02:32 AM
راسلنى على البريد الالكترونى وانا هابعتللك OCX عملتها يمكن استخدامها فى اى لغة برمجة بكل سهولة ويسر وعلى اى نسخة ويندوز .
ah.waheed@gmail.com

أوس علي المياح
02-04-2008, 12:03 AM
الاخ العزيز محمد
شكراً جزيلاً للشرح
شرحك كان وافي وكافي
لكن أحب أزيد عليه أن هذا الDLL , وكذلك الOCX اللذان يوجدان داخل الرابط الذي وضعته مخصصان للعمل على أنظمة التشغيل كلها تقريباً, رغم أني لم أجربهما على الفيستا, إلا أني أستخدم INPOUT32.DLL على VB6 بالوندوز XP وليست لدي أي مشكله, ولا أستخدم الدالة للإخراج فقط, بل وحتى لإدخال البيانات, وليس لمنفذ الطابعة فقط, بل لكل المنافذ, حيث أن المشكلة الوحيدة في الفيجوال بيسك رغم بساطتها هي ضعفها في التعامل مع البورتات, تقبل مني فائق أحترامي وتقديري وأمتناني


ملاحظة: -
لمن يريد أن يتعلم لغة تغنيه عن الكثير من استدعاءات الدوال المكتبية فعليه بالVisual C أو ++