View Full Version : سوال: مشكل با وصل شدن با Kylix SMS ActiveX Control  از طريق GSM Modem
  
halabjaee
دوشنبه 06 دی 1389, 21:56 عصر
سلام بر شما دوستان
من يك نرم افزار دارم كه با استفاده از Kylix SMS ActiveX Control 5.0 تو VB.net ساخته شده است و اس ام اس گروهى ميفرسته.
الان يك GSM Modem خريدم ميخوام با اون وصل بشم به نرم افزار ولی اين ارور ميده:
ERR_OPT_TIMEOUT
عكس ارور هم تو ضميمه هست
ممنون ميشم كمك كنيد تا مشكلمو حل كنم
مودم: EDGE
مدل: MBD-100EU
منتظر كمك شما هستم
halabjaee
دوشنبه 06 دی 1389, 22:59 عصر
دوستان لطفا جواب بدين
خيلى عجله دارممممممممم
ممنونم
mansourii
سه شنبه 07 دی 1389, 09:17 صبح
سلام/ مطمئنی!
منم قبلا از همین روش البته با PUB استفاده کردم که بتونیم اس ام اس فارسی بخونیم/ و هیچ مشکلی نداشت!
هم با مودم جی اس ام تاتونگ و هم مودم های دیگه تست کردیم و کار کرد/
چندین نوع برنامه نویسی دیدم که میتونه با همین روشی که گفتید پیام گروهی رو ارسال کنه.
mansourii
سه شنبه 07 دی 1389, 09:26 صبح
این عکس های Kylix
DoDoklak
سه شنبه 07 دی 1389, 09:32 صبح
الان يك GSM Modem خريدم ميخوام با اون وصل بشم به نرم افزار ولی اين ارور ميده:
 
اسم مودم شما چیه؟
سرعت پورت و نوع پورت را درست انتخاب کرده اید؟
mansourii
سه شنبه 07 دی 1389, 09:33 صبح
از این به بعد عکس ها در اینترنت هم میتونید سرچ کنید.
اینها PUB ندارند خودتون باید بهش اضافه کنید (تا پیامک فارسی ارسال کنند)
ویرایش فارسی هم که دیگه کاری نداره!!
mansourii
سه شنبه 07 دی 1389, 09: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, 09:42 صبح
همه عکس ها با سورس های VB.net نوشته شده اند / توی همین تالار اگه جستجو کنید پست های نابی گیرتون میاد
سعی کنید بیشتر در قسمت AT Command ها و برنامه نویسی موبایل برید/
mansourii
سه شنبه 07 دی 1389, 09:47 صبح
خطای شما احتمالا از پورتتونه / 
چون Kylix درسته و هم در موبایل و هم در مودم های ارسال اس ام اس بدرستی کار میکنه! (اینی که دارم میگم 100 درصد تست شده)
halabjaee
چهارشنبه 08 دی 1389, 11:27 صبح
دوستتان ممنونم وسه راهنمايتون
من مشكلم از وصل نشدن جی اس ام با نرم افزار است نه مشكل اس ام اس فارسی
 شماره پورت و سرعت هم درست ميدم
مدل جی اس ام  من: EDGE MBD-100EU
اين هم يك عكس از جی اس ام مودم:
64242
ممنونم ميشوم زود كمك كنيد
mansourii
چهارشنبه 08 دی 1389, 12:42 عصر
من مشكلم از وصل نشدن جی اس ام با نرم افزار است
دستورات AT Command رو درست مینویسد؟ 
اتصالات پورت USB رو چک کنید
اتصالات AT Command رو چک کنید
( اگه مشکلی ندارید دستورات AT تون رو بذارید تا متوجه بشیم مشکل از کجاست)
مدل جی اس ام  من: EDGE MBD-100EU (زیاد فرق نمیکنه از چه مودمی استفاده میکنید)
halabjaee
چهارشنبه 08 دی 1389, 13: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, 15:59 عصر
كسى جواب نميده
DoDoklak
چهارشنبه 08 دی 1389, 16: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, 18:52 عصر
من هم همچين مشكلي داشتم در divice manger  قسمت port روي پورتي كه جهت مودم ايجاد شده properties ميگيريم در port Settings قسمت bits per second را روي 115200 را بگذاريد
halabjaee
پنج شنبه 09 دی 1389, 23: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, 08:31 صبح
كسى نبوددددددددددددد
عجله دارم دوستان
mahdi.sagga
شنبه 23 بهمن 1389, 02:01 صبح
سلام دوستان منم با این خطا مواجه شدم و نیاز به کمک دارم  خطای من روی گوشی هم اتفاق میفته و پیغام تایم اوت میده تو لیست خطاهای سایت کایلیکسم گشتم چنین خطایی اونجاهم عنوان نشده برنامه رو با دلفی نوشتم شماره پورت و همه اطلاعاتم درست وارد میکنم با سرعت های مختلفم چک کردم همچنان تایم اوت میده .جالبه که بعد از کانکت شدن اطلاعات گوشی به درستی نمایش داده میشه ولی بعد از زدن دکمه ارسال تایم اوت میده .با چند گوشی دیگه هم تست کردم بازم همین طوره . لطفا اگه کسی چیزی از این خطا میدونه کمک کنه.
Reza_A7b
چهارشنبه 12 خرداد 1395, 23:39 عصر
سلام دوست عزیز
شما برو اطلاعات طریقه اتصال اون مودمی که استفاده میکنی رو از سایتش در بیار بعد وصل شو مگه نه مشکل خواصی نمی تونه داشته باشه
منظورم باد ریت بیشتر که دوستان بالا هم اشاره کردن بهش 9600 یا 115200 سری قدیم و جدید و از sample خود kylixsms استفاده کن. ایشالله جواب میگیری جواب نگرفتی شک نکن و مودم رو عوض کن
 
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.