سلام خوب هستيد
korosh_majd عزيز
شما ايا از توابعي كه معرفي كردم استفاده كرديد .منظورم فانكشن هاي كه معرفي كردم ؟
بدون تغيير نوع ورودي فقط كافي از اين دستور استفاده كنيد
کد:
Private Sub Send_data()
Dim myNum As Double
myNum = 94562
SendStr = cInt2Str(myNum)
mscomm1.output=SendStr
End Sub
و براي دريافت هم از تابع زير
کد:
Private Sub MSComm1_OnComm()
Dim sData As String ' Holds our incoming data
Dim myNum As Double ' Holds our numbric data
If MSComm1.CommEvent = comEvReceive Then
sData = MSComm1.Input
mynum = CStr2Int(sData)
End If
End Sub
و توي قسمت لود فرم هم اين ها بايد ست بشن
کد:
Private Sub Form_Load()
MSComm1.Settings = "2400,N,8,1"
MSComm1.DTREnable = False
MSComm1.CommPort = 1
MSComm1.PortOpen = True
End Sub
همچنين دوتا تابعي كه قبلا نوشتم هم بايد به كدها اضافه بشن
يعني كل كد ميشه
کد:
Private Sub Form_Load()
MSComm1.Settings = "2400,N,8,1"
MSComm1.DTREnable = False
MSComm1.CommPort = 1
MSComm1.PortOpen = True
End Sub
Private Sub MSComm1_OnComm()
Dim sData As String ' Holds our incoming data
Dim myNum As Double ' Holds our numbric data
If MSComm1.CommEvent = comEvReceive Then
sData = MSComm1.Input
mynum = CStr2Int(sData)
End If
End Sub
Private Sub Send_data()
Dim myNum As Double
myNum = 94562
SendStr = cInt2Str(myNum)
mscomm1.output=SendStr
End Sub
Function cInt2Str(myNum As Double) As String
Dim r As Double
Dim i As Double
Dim j As Double
Dim TempStr As String
i = 1
r = Int(myNum / 256)
While r > 0
i = i + 1
DoEvents
r = r / 256
Wend
TempStr = ""
For j = 1 To i
TempStr = TempStr & Chr(myNum Mod 256)
myNum = Int(myNum / 256)
Next
cInt2Str = TempStr
End Function
Function CStr2Int(TempStr As String) As Double
Dim r As Double
Dim i As Double
Dim j As Double
i = Len(TempStr)
If i = 0 Then Exit Function
r = 0
For j = i To 1 Step -1
r = r * 256 + Asc(Mid(TempStr, j, 1))
Next
CStr2Int = r
End Function
از MSComm1_OnComm براي گرفتن اطلاعات و از Send_data هم براي فرستادن اطلاعات استفاده ميشه
--------------------------------
ببنيد استرينگ در واقعه خودش يك ارايه باينريه كه در انتها ان بيت 0 قرار داره
شما وقتي يك استرينگ رو به تابعي ارسال مي كنيد فقط اسم ارايه را ميدهيد و بقيه كار ها رو وي بي در پشت زمينه انجام ميدهد .
پس براي ارسال يك ارايه از هر چيز شما فقط بايداسم ارايه را ارسال كنيد . خود وي بي بقيه كارها را انجام ميدهد .
البته در بعضي از توابع شما بايد با اضافه كردن يك () به اخر اسم ارايه به وي بي بگيد كه اين ارايه است . مثل زمان كار كردن با بعضي از api ها
-----------------
از توضيحات shockley هم ممنون
کنترل Mscomm از پروتکل RS-232c استفاده میکنه و نوع فریمی که در این استاندارد تعریف شده 5 تا 8 بیت دیتای باینری به اضافه ی یک بیت توان و یک بیت شروع و پایانه، پس Mscomm هم باید داده ی باینری رو پشتیبانی بکنه که میکنه!
اینجا رو مطالعه کنید: MSDN میگه که برای ارسال باینری یه بافر UART پورت سریال باید از آرایه ی بایتی استفاده کنید.