ورود

View Full Version : سوال: مشكل با وصل شدن با Kylix SMS ActiveX Control از طريق GSM Modem



halabjaee
دوشنبه 06 دی 1389, 20:56 عصر
سلام بر شما دوستان
من يك نرم افزار دارم كه‌ با استفاده‌ از Kylix SMS ActiveX Control 5.0 تو VB.net ساخته‌ شده‌ است و اس ام اس گروهى ميفرسته‌.
الان يك GSM Modem خريدم ميخوام با اون وصل بشم به‌ نرم افزار ولی اين ارور ميده‌:
ERR_OPT_TIMEOUT

عكس ارور هم تو ضميمه هست
ممنون ميشم كمك كنيد تا مشكلمو حل كنم

مودم: EDGE
مدل: MBD-100EU

منتظر كمك شما هستم

halabjaee
دوشنبه 06 دی 1389, 21:59 عصر
دوستان لطفا جواب بدين
خيلى عجله دارممممممممم
ممنونم

mansourii
سه شنبه 07 دی 1389, 08:17 صبح
سلام/ مطمئنی!
منم قبلا از همین روش البته با PUB استفاده کردم که بتونیم اس ام اس فارسی بخونیم/ و هیچ مشکلی نداشت!

هم با مودم جی اس ام تاتونگ و هم مودم های دیگه تست کردیم و کار کرد/

چندین نوع برنامه نویسی دیدم که میتونه با همین روشی که گفتید پیام گروهی رو ارسال کنه.

mansourii
سه شنبه 07 دی 1389, 08:26 صبح
این عکس های Kylix

DoDoklak
سه شنبه 07 دی 1389, 08:32 صبح
الان يك GSM Modem خريدم ميخوام با اون وصل بشم به‌ نرم افزار ولی اين ارور ميده‌:


اسم مودم شما چیه؟
سرعت پورت و نوع پورت را درست انتخاب کرده اید؟

mansourii
سه شنبه 07 دی 1389, 08:33 صبح
از این به بعد عکس ها در اینترنت هم میتونید سرچ کنید.
اینها PUB ندارند خودتون باید بهش اضافه کنید (تا پیامک فارسی ارسال کنند)
ویرایش فارسی هم که دیگه کاری نداره!!

mansourii
سه شنبه 07 دی 1389, 08:36 صبح
اینم سورس PUB اگه خواستی پیام ها فارسی هم بتونی بفرستید


'



Namespace SMS1
Namespace Encoder
Public Class SMS1
#Region "Enums"
Public Enum ENUM_TP_VPF
Relative_Format = 16 'b4=1 b3=0
End Enum

Public Enum ENUM_TP_SRI
Request_SMS_Report = 32
No_SMS_Report = 0
End Enum

Public Enum ENUM_TP_DCS
DefaultAlphabet = 0
UCS2 = 8
End Enum

Public Enum ENUM_TP_VALID_PERIOD
OneHour = 11 '0 to 143:(TP-VP+1)*5Min
ThreeHours = 29
SixHours = 71
TwelveHours = 143
OneDay = 167
OneWeek = 196
Maximum = 255
End Enum
#End Region

#Region "Protected Data"
Protected SC_Number As String 'Note the plus!
Protected TP_MTI As Byte = 1
Protected TP_RD As Byte = 0
Protected TP_VPF As Byte = 16
Protected TP_UDHI As Byte
Protected TP_SRR As Byte
Protected TP_MR As Integer
Protected TP_DA As String
Protected TP_PID As Byte
Protected TP_DCS As Byte
Protected TP_VP As Byte
Protected TP_UDL As Integer
Protected TP_UD As String
#End Region

#Region "Properties"

Public Property ServiceCenterNumber() As String
Get
Return SC_Number
End Get
Set(ByVal Value As String)
'Convert an ServiceCenterNumber to PDU Code
If InStr(Value, "+") Then
SC_Number = "91"
Else
SC_Number = "81"
End If

Value = Mid(Value, 2)
Dim i As Integer
If (Value.Length Mod 2) = 1 Then
Value += "F"
End If
For i = 1 To Value.Length Step 2
SC_Number += Swap(Mid(Value, i, 2))
Next
SC_Number = ByteToHex((SC_Number.Length - 2) / 2 + 1) + SC_Number
End Set

End Property

Public Property TP_Status_Report_Request() As ENUM_TP_SRI
Get
Return TP_SRR
End Get
Set(ByVal Value As ENUM_TP_SRI)
TP_SRR = Value
End Set
End Property

Public Property TP_Message_Reference() As Integer
Get
Return TP_MR
End Get
Set(ByVal Value As Integer)
TP_MR = Value
End Set
End Property

Public Property TP_Destination_Address() As String
Get
Return TP_DA
End Get
Set(ByVal Value As String)
TP_DA = ""

If InStr(Value, "+") Then
TP_DA += "91"
Else
TP_DA += "81"
End If
Value = Value.Replace("+", "")
TP_DA = Format(Value.Length, "X2") + TP_DA
Dim i As Integer
If (Value.Length Mod 2) = 1 Then
Value += "F"
End If
For i = 1 To Value.Length Step 2
TP_DA += Swap(Mid(Value, i, 2))
Next
End Set
End Property


Public Property TP_Data_Coding_Scheme() As ENUM_TP_DCS
Get
Return TP_DCS
End Get
Set(ByVal Value As ENUM_TP_DCS)
TP_DCS = Value
End Set
End Property

Public Property TP_Validity_Period() As ENUM_TP_VALID_PERIOD
Get
Return TP_VP
End Get
Set(ByVal Value As ENUM_TP_VALID_PERIOD)
TP_VP = Value
End Set
End Property

Public Overridable Property TP_User_Data() As String
Get
Return TP_UD
End Get
Set(ByVal Value As String)
Select Case TP_DCS
Case Is = ENUM_TP_DCS.DefaultAlphabet
TP_UDL = Value.Length
TP_UD = Encode7Bit(Value)
Case Is = ENUM_TP_DCS.UCS2
TP_UDL = Value.Length * 2
TP_UD = EncodeUCS2(Value)
Case Else
TP_UD = Value
End Select
End Set
End Property
#End Region

#Region "Functions"
Public Shared Function CheckForEncoding(ByVal Content As String) As SMS1.ENUM_TP_DCS
Dim i As Integer
For i = 1 To Content.Length
If Asc(Mid(Content, i, 1)) < 0 Then
Return SMS1.ENUM_TP_DCS.UCS2
End If
Next
Return SMS1.ENUM_TP_DCS.DefaultAlphabet
End Function

Public Overridable Function GetSMSPDUCode() As String
Dim PDUCode As String
'Check User Data Length
If TP_DCS = ENUM_TP_DCS.DefaultAlphabet Then
If TP_UD.Length > 280 Then Throw New Exception("User Data is TOO LONG for SMS")
End If
If TP_DCS = ENUM_TP_DCS.UCS2 Then
If TP_UD.Length > 280 Then Throw New Exception("User Data is TOO LONG for SMS")
End If
'Make PDUCode
PDUCode = SC_Number
PDUCode += FirstOctet()
PDUCode += Format(TP_MR, "X2")
PDUCode += TP_DA
PDUCode += Format(TP_PID, "X2")
PDUCode += Format(TP_DCS, "X2")
PDUCode += Format(TP_VP, "X2")
PDUCode += Format(TP_UDL, "X2")
PDUCode += TP_UD
Return PDUCode
End Function

Public Overridable Function FirstOctet() As String
Return ByteToHex(TP_MTI + TP_VPF + TP_SRR + TP_UDHI)
End Function

Shared Function ByteToHex(ByVal aByte As Byte) As String
Dim result As String
result = Format(aByte, "X2")
Return result
End Function

#Region "Encode7Bit"
Shared Function Encode7Bit(ByVal Content As String) As String
'Prepare
Dim CharArray As Char() = Content.ToCharArray
Dim c As Char
Dim t As String = ""
For Each c In CharArray
t = CharTo7Bits(c) + t
Next
'Add "0"
Dim i As Integer
If (t.Length Mod 8) <> 0 Then
For i = 1 To 8 - (t.Length Mod 8)
t = "0" + t
Next
End If
'Split into 8bits
Dim result As String = ""
For i = t.Length - 8 To 0 Step -8
result = result + BitsToHex(Mid(t, i + 1, 8))
Next
Return result
End Function

Shared Function BitsToHex(ByVal Bits As String) As String
'Convert 8Bits to Hex String
Dim i, v As Integer
For i = 0 To Bits.Length - 1
v = v + Val(Mid(Bits, i + 1, 1)) * 2 ^ (7 - i)
Next
Dim result As String
result = Format(v, "X2")
Return result
End Function

Shared Function CharTo7Bits(ByVal c As Char) As String
If c = "@" Then Return "0000000"
Dim Result As String = ""
Dim i As Integer
For i = 0 To 6
If (Asc(c) And 2 ^ i) > 0 Then
Result = "1" + Result
Else
Result = "0" + Result
End If
Next
Return Result
End Function
#End Region

Shared Function EncodeUCS2(ByVal Content As String) As String
Dim i, v As Integer
Dim Result As String = ""
Dim t As String = ""
For i = 1 To Content.Length
v = AscW(Mid(Content, i, 4))
t = Format(v, "X4")
Result += t
Next
Return Result
End Function

Shared Function Swap(ByRef TwoBitStr As String) As String
'Swap two bit like "EF" TO "FE"
Dim c() As Char = TwoBitStr.ToCharArray
Dim t As Char
t = c(0)
c(0) = c(1)
c(1) = t
Return (c(0) + c(1)).ToString
End Function
#End Region
End Class

Public Class ConcatenatedShortMessage
Inherits SMS1
Private TotalMessages As Integer

Public Function GetEMSPDUCode() As String()
Select Case TP_DCS
Case ENUM_TP_DCS.UCS2
TotalMessages = (TP_UD.Length / 4) \ 66 + ((TP_UD.Length / 4 Mod 66) = 0)
Case ENUM_TP_DCS.DefaultAlphabet
TotalMessages = (TP_UD.Length \ 266) - ((TP_UD.Length Mod 266) = 0)
End Select

Dim Result(TotalMessages) As String
Dim tmpTP_UD As String = ""
Dim i As Integer
TP_UDHI = 2 ^ 6
Dim Reference As Integer = Rnd(1) * 65536 '16bit Reference Number 'See 3GPP Document
For i = 0 To TotalMessages
Select Case TP_DCS
Case ENUM_TP_DCS.UCS2
tmpTP_UD = Mid(TP_UD, i * 66 * 4 + 1, 66 * 4)
'When TP_UDL is odd, the max length of an Unicode string in PDU code is 66 Charactor.See [3GPP TS 23.040 V6.5.0 (2004-09] 9.2.3.24.1
Case ENUM_TP_DCS.DefaultAlphabet
tmpTP_UD = Mid(TP_UD, i * 133 * 2 + 1, 133 * 2)
End Select
Result(i) = SC_Number
Result(i) += FirstOctet()
Result(i) += Format(TP_MR, "X2")
'Next segement TP_MR must be increased
'TP_MR += 1
Result(i) += TP_DA
Result(i) += Format(TP_PID, "X2")
Result(i) += Format(TP_DCS, "X2")
Result(i) += Format(TP_VP, "X2")
If TP_DCS = ENUM_TP_DCS.UCS2 Then
TP_UDL = tmpTP_UD.Length / 2 + 6 + 1 '6:IE
End If
If TP_DCS = ENUM_TP_DCS.DefaultAlphabet Then
TP_UDL = Fix((tmpTP_UD.Length + 7 * 2) * 4 / 7) '6:length of IE

End If
Result(i) += Format(TP_UDL, "X2")
Result(i) += "060804" 'TP_UDHL and some of Concatenated message
Result(i) += Format(Reference, "X4")
Result(i) += Format(TotalMessages + 1, "X2")
Result(i) += Format(i + 1, "X2")
Result(i) += tmpTP_UD
Next
Return Result
End Function

Public Overrides Function FirstOctet() As String
Return ByteToHex(TP_MTI + TP_VPF + TP_SRR + TP_UDHI)
End Function
End Class
End Namespace
End Namespace

mansourii
سه شنبه 07 دی 1389, 08:42 صبح
همه عکس ها با سورس های VB.net نوشته شده اند / توی همین تالار اگه جستجو کنید پست های نابی گیرتون میاد

سعی کنید بیشتر در قسمت AT Command ها و برنامه نویسی موبایل برید/

mansourii
سه شنبه 07 دی 1389, 08:47 صبح
خطای شما احتمالا از پورتتونه /
چون Kylix درسته و هم در موبایل و هم در مودم های ارسال اس ام اس بدرستی کار میکنه! (اینی که دارم میگم 100 درصد تست شده)

halabjaee
چهارشنبه 08 دی 1389, 10:27 صبح
دوستتان ممنونم وسه‌ راهنمايتون
من مشكلم از وصل نشدن جی اس ام با نرم افزار است نه‌ مشكل اس ام اس فارسی
شماره‌ پورت و سرعت هم درست ميدم
مدل جی اس ام من: EDGE MBD-100EU
اين هم يك عكس از جی اس ام مودم:
64242

ممنونم ميشوم زود كمك كنيد

mansourii
چهارشنبه 08 دی 1389, 11:42 صبح
من مشكلم از وصل نشدن جی اس ام با نرم افزار است
دستورات AT Command رو درست مینویسد؟
اتصالات پورت USB رو چک کنید
اتصالات AT Command رو چک کنید
( اگه مشکلی ندارید دستورات AT تون رو بذارید تا متوجه بشیم مشکل از کجاست)

مدل جی اس ام من: EDGE MBD-100EU (زیاد فرق نمیکنه از چه مودمی استفاده میکنید)

halabjaee
چهارشنبه 08 دی 1389, 12:35 عصر
KylixSMS.PINCode = ""
KylixSMS.ConnectionMode =1
KylixSMS.ConnectionProtocol =1
KylixSMS.ConnectionParameter = "COM8, 9600"
If KylixSMS.Connect < 1 Then
KylixSMS.GetLastError 1 ' اين قسمت هميشه اجرا ميشه و تايم اوت ميگيره
Else
msgbox "connect !"
End If
دوستان از اين کد براي برقراري ارتباط استفاده ميکنم وقتي ميخوام به گوشي موبايل خودم ارتباط برقرار کنم بدون هيچ مشکلي ارتباط برقرار ميشه و اس ام اس فارسي و اينگليسي به راحتي ارسال ميشه گوشي من نوکيا 6630 هست ولي جديدا يه مودم گرفتم که اسمشو و عکسشو تويه پست هاي قبلي گفتم اين مدم وقتي سيم کارت همراه اول رو توش ميزارم برنامه خودش بعد از اين که ميفهمه سيم کارت همراه اول هست براي خودش بسته ميشه ولي اگه سم کارت ايران سل باشه بسته نميشه و به مودم يو اس پي خيلي راحت اس ام اس فارسي و انگليسي ميده بدون هيچ مشکلي ولي هيچ رقمه من نميتونم از طريق کد بالا به مودم متصل بشم و هميشه تايم اوت ميگيره به جاي 9600 اعداد ديگه هم گزاشتم ولي متاسفانه جواب نميده تويه ويندوز اکس پي و ويستا و سون هم تست شده ولي همه مثله هم بوده خوب الان من براي برقراري ارتباط بايد چه کار کنم ؟

halabjaee
چهارشنبه 08 دی 1389, 14:59 عصر
كسى جواب نميده

DoDoklak
چهارشنبه 08 دی 1389, 15:32 عصر
در سایت خود شرکت Kylix مودهای زیر را به هنوان بهترین گزینه معرفی کرده
WAVECOM, SIEMENS, ERICSSON, MOTOROLA

منبع
http://www.kylixsoft.com/support_activex.htm#1._How_to_choose_GSM_Device_fo r_Kylix_SMS_ActiveX_Control

البته من خودم به شخصه با مودم EDGE کار کردم و هیچ مشکلی نداشتم
مطمئن هستید که شماره پورت را درست انتخاب کرده اید(در بخش DeviceManager بررسی کنید)

غلامرضا شریفی
چهارشنبه 08 دی 1389, 17:52 عصر
من هم همچين مشكلي داشتم در divice manger قسمت port روي پورتي كه جهت مودم ايجاد شده properties ميگيريم در port Settings قسمت bits per second را روي 115200 را بگذاريد

halabjaee
پنج شنبه 09 دی 1389, 22:05 عصر
جناب اقای DoDoklak (http://barnamenevis.org/member.php?43259-DoDoklak) ممنونم وسه‌ راهنمايتون
مطمئن هستم كه‌ پورت را درست انتخاب كردم

غلامرضا شریفی (http://barnamenevis.org/member.php?24597-%D8%BA%D9%84%D8%A7%D9%85%D8%B1%D8%B6%D8%A7-%D8%B4%D8%B1%DB%8C%D9%81%DB%8C) جان
تست كردم نشود و تايم اوت ميگيره‌


لطفا كمككككككككككككككككككككك

halabjaee
جمعه 10 دی 1389, 07:31 صبح
كسى نبوددددددددددددد
عجله دارم دوستان

mahdi.sagga
شنبه 23 بهمن 1389, 01:01 صبح
سلام دوستان منم با این خطا مواجه شدم و نیاز به کمک دارم خطای من روی گوشی هم اتفاق میفته و پیغام تایم اوت میده تو لیست خطاهای سایت کایلیکسم گشتم چنین خطایی اونجاهم عنوان نشده برنامه رو با دلفی نوشتم شماره پورت و همه اطلاعاتم درست وارد میکنم با سرعت های مختلفم چک کردم همچنان تایم اوت میده .جالبه که بعد از کانکت شدن اطلاعات گوشی به درستی نمایش داده میشه ولی بعد از زدن دکمه ارسال تایم اوت میده .با چند گوشی دیگه هم تست کردم بازم همین طوره . لطفا اگه کسی چیزی از این خطا میدونه کمک کنه.

Reza_A7b
چهارشنبه 12 خرداد 1395, 22:39 عصر
سلام دوست عزیز
شما برو اطلاعات طریقه اتصال اون مودمی که استفاده میکنی رو از سایتش در بیار بعد وصل شو مگه نه مشکل خواصی نمی تونه داشته باشه
منظورم باد ریت بیشتر که دوستان بالا هم اشاره کردن بهش 9600 یا 115200 سری قدیم و جدید و از sample خود kylixsms استفاده کن. ایشالله جواب میگیری جواب نگرفتی شک نکن و مودم رو عوض کن