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

التحكم عن طريق المنفذ المتوازي باستخدام V.B

مغلق
بدأه saifudeen في 27 مايو 2004 · 4 رد · 3,469 مشاهدة · في التحكم الصناعي وربط الحاسب بالعالم الخارجي
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

بسم الله الرحمن الرحيم

في هذا المنتدى أرى الجميع يتحدثون عن استخدام VB للتحكم بمنفذ المتوازي (منفذ الطابعة) لكن في الفيجوال بيسك يوجد اوامر داخلية جاهزة للتحكم بالمنفذ المتسلسل

كنت قد قرأت عنها القليل هل من احد لديه فكرة؟؟؟ ليزودنا بها وبشرح كامل عن كيفية استخدامها جزاكم الله خيراً.

#2

استخدم المكتبة

أنشأ ملف برمجة Module  وضع به تعريف مكتبة dll  الخاصة بمنفذ الطابعة ، والتعريف هو :

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

الآن قمنا بتعريف المكتبة الضرورية للتحكم بمنفذ الطابعة ، إذاً قم بوضع زر أوامر Command  على النموذج Form1  ثم ضع الكود التالي في حدث Click  لزر الأوامر :

Out &H378, 4

إن الكود السابق يقوم بإرسال الرقم 4 إلى الدالة التي عرفناها والدالة بدورها تقوم بتحويل الرقم 4 إلى النظام الثنائي وترسله إلى منفذ الطابعة وتحديداً إلى فتحات الإخراج ، فإذا كنت قد وصلت ثنائي باعث للضوء على الفتحة الثالثة فسوف تراه متوهجاً ، ولكي تنهي توهج هذا الثنائي فعليك بإرسال الرقم 0 إلى دالة منفذ الطابعة كالتالي :

Out &H378, 0

المكتبة أعلاه حتى نحن استخدمناها في السي++ ,, فهي مكتبة ممتازة ,, لكن في السي يمكن استخدام تعليمات أسمبلي بشكل مباشر داخل كود السي ,, لكن سيعمل فقط في أنظمة ال 9x والدوز ,, ولن يعمل في عائلة ال NT ,, لأننا نحتاج الى امتيازات لايقدمها ال NT للمستخدم الا بالدخول للحلقة صفر وهي حلقة ال Kernel ,, ويتم ذلك بستخدم مايدعى بل Device Driver ,, والملف اعلاه مبرمج أصلا بالسي فكتابة ال Device Drivers تتم بالسي أيضا ,,

عموما خذ الرابط تحدثنا فيه سابقا كثيرا عن هذا الموضوع ولاأذكر في أي جزئية منه وصلنا للنتيجة ,, واعرف من أين حملنا المكتبة واستعملها في الفيجوال بيسك مباشرة ,,

/index.php?showtopic=36111

banner_60_468.gif

NOTHING IS IMPOSSIBLE

#3

بارك الله فيك يا أخي ولكن سؤالي عن المنقذ التسلسلي Serial Port يوجد أوامر جاهزة عنه في الفيجوال بيسك ولكني لا أعرف كيف أتعامل معها افيدوني بارك الله فيكم.

#4
Private Sub ComA_INI()
    LengthOfReply(1) = 7
    LengthOfReply(2) = 6
    LengthOfReply(3) = 20
    LengthOfReply(4) = 12
    LengthOfReply(5) = 6
    LengthOfReply(6) = 6
    LengthOfReply(7) = 4
    LengthOfReply(8) = 4
    LengthOfReply(9) = 4
    LengthOfReply(10) = 4
    LengthOfReply(11) = 33
    LengthOfReply(12) = 4
    LengthOfReply(13) = 4
    LengthOfReply(14) = 68
    LengthOfReply(15) = 4
    LengthOfReply(16) = 0
    LengthOfReply(17) = 10
    LengthOfReply(18) = 4
    LengthOfReply(19) = 4
    LengthOfReply(20) = 4
    LengthOfReply(21) = 4
    LengthOfReply(22) = 5
    LengthOfReply(23) = 44
    LengthOfReply(24) = 8
    LengthOfReply(25) = 4
    LengthOfReply(26) = 4
    LengthOfReply(27) = 4
    LengthOfReply(28) = 4
    LengthOfReply(29) = 4
    LengthOfReply(30) = 4
    LengthOfReply(31) = 4
    ComA_Status = 0: ComAStatusUpdate
    ComA_BaudRate = 9600
    ComA_StopBits = 1
    ComA_Bits = 8
    ComA_Parity = "M"
    ComA.CommPort = 2
    ComA.RThreshold = 1
    ComA_Settings_Make
    ComA.PortOpen = True
    Cx2Cx_MaxTime = (240000) / ComA_BaudRate 'character to character maximum time
    ComA_MaxTimeToRespond = 100  'milli Second CAN BE 10
    ComASpeed$ = ""
    Do
        I = I + 1
        ComASpeed$ = ComASpeed$ + Mid$(ComA.Settings, I, 1)
    Loop While Mid$(ComA.Settings, I + 1, 1) <> ","
    Frame_Rcv = ""
    Frame_Snd = ""
End Sub
Sub ComA_Settings_Make()
    AAA = Mid$(Str(ComA_BaudRate), 2, Len(Str(ComA_BaudRate)) - 1)
    BBB = Mid$(Str(ComA_Bits), 2, Len(Str(ComA_Bits)) - 1)
    CCC = Mid$(Str(ComA_StopBits), 2, Len(Str(ComA_StopBits)) - 1)
    ComA_Settings = AAA + "," + ComA_Parity + "," + BBB + "," + CCC '"19200,N,8,2"
    ComA.Settings = ComA_Settings
End Sub
Private Sub Form_Load()
    ComA_INI
    Timer1.Interval = Cx2Cx_MaxTime
    Timer2.Interval = ComA_MaxTimeToRespond
End Sub
Private Sub ComA_OnComm()
    Dim Buffer As Variant
    Dim ARR() As Byte
'    If ComA.CommEvent > 2 Then MsgBox ComA.CommEvent
    Select Case ComA.CommEvent
        Case 1
            'TRANSMIT INTURRUPT
'            For UUU = 1 To 100000: Next 'IMAD
            If ComA_Status = 2 Then 'END OF TRANSMITION
                Timer2.Enabled = True
                ComA_Status = 3: ComAStatusUpdate
            End If
            If ComA_Status = 1 Then 'LOAD REST OF COMMAND TO TRANSMIT
                ComA_Parity = "S"
                ComA_Settings_Make
                ComA.Output = Mid$(Frame_Snd, 2, Len(Frame_Snd) - 1)
                ComA_Status = 2: ComAStatusUpdate
            End If
        Case 2
            'RECEIVE INTURRUPT
            ComA_Status = 4: ComAStatusUpdate
            Timer1.Enabled = False
            Timer2.Enabled = False
            Buffer = ComA.Input
            ARR() = Buffer
            For I = 0 To UBound(ARR())
                Frame_Rcv = Frame_Rcv + Chr$(ARR(I))
            Next
            ComA.RThreshold = 1
            Timer1.Enabled = True
   End Select
End Sub
Private Sub Timer1_Timer()
    'Maximum Time to receive an other character after last character received
    FrameRcv_Analyze
End Sub
Private Sub Timer2_Timer()
    'Maximum Time to respond
    Timer2.Enabled = False
    A = ComA.Input  'CLR INPUT BUFFER
    Frame_Rcv = ""
    ComA.RThreshold = 1
    Nw(Nw_Snd).Unit(Unit_Snd).UnitStatus = 0
    ComA_Status = 255: ComAStatusUpdate 'Error
End Sub

ربما يساعدك هذا الكود في شيئ، كتبته ايام الفيجول بيسك 4 في عام 1999 وهو للتعامل مع منفذ التسلسلي

39_22.gif

تزود من التقوى فإنك لا تدري *** إذا جن ليل هل تعيش إلى الفجر

فكم من فتى أمسى وأصبح ضاحكاً *** وقد نسجت أكفانه وهو لا يدري

لقراءة القرآن الكريم و سماعه و تفسيره ........

ماذا يعني انني مسلم سني؟

قصة غريبة

ConflictResolution.gif

#5

بارك الله فيك لكن أريد شرحاً وافياً وواضحاً لو سمحتم

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

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