By using this site, you agree to our updated Privacy Policy and our Terms of Use. Manage your Cookies Settings.
424,842 Members | 2,186 Online
Bytes IT Community
+ Ask a Question
Need help? Post your question and get tips & solutions from a community of 424,842 IT Pros & Developers. It's quick & easy.

Connection between two GSM Modems using RS232

P: 4
I'm a rookie with C# and VB programming languages, but I need to make a connection of two GSM Modems for Remote Monitoring. I've done some web research and i've found a C# code to make the two modems dialing. I converted that code to VB but something's wrong... When i run the program, there's an error and i can't find it's origins. Could someone help me?

Code in VB:

Imports System
Imports System.Windows
Imports System.Threading 'Para elaboração da função OnComm
Imports System.Diagnostics 'Para utilização da função para contar o nº de 'elementos de um array


Public Class Form1

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

End Sub

Private Sub InitComPort()

Me.AxMSComm1.CommPort = 1 'Porta de comunicações a alterar

If Me.AxMSComm1.PortOpen = True Then 'Caso a porta de 'comunicações esteja aberta, procede-se ao seu fecho

Me.AxMSComm1.PortOpen = False

End If

Me.AxMSComm1.RThreshold = 1 'Abre-se a porta de comunicações 'sempre que se recebem dados

Me.AxMSComm1.Settings = "9600, n, 8, 1"

'Me.AxMSComm1.DTREnable = true 'Usa-se quando se pretende manter o modem em espera

Me.AxMSComm1.RTSEnable = True '????

Me.AxMSComm1.Handshaking = MSCommLib.HandshakeConstants.comNone 'Não é utilizado o handshaking - 'garantia de não perder dados

Me.AxMSComm1.InputMode = MSCommLib.InputModeConstants.comInputModeText 'Usa-se a linha de 'comunicações para entradas de arrays de bytes

Me.AxMSComm1.InputLen = 0 'Procede-se à leitura de todos os dados 'que se encontram em espera quando ocorre entrada de dados através da porta 'de comunicações

Me.AxMSComm1.NullDiscard = False 'Garante que os bytes nulos não 'são desprezados

'************************************************* **********
'* 'com.OnComm += new System.EventHandler(this.OnComm)
'* 'QUAL O OBJECTIVO DESTA LINHA DE COMANDOS???
'************************************************* **********
Me.AxMSComm1.PortOpen = True

End Sub

'************************************************* ********************************
'* !!!!!!FUNÇÃO OnComm!!!!!!
'************************************************* ********************************

Private Sub OnComm(ByVal sender As System.Object, ByVal e As System.EventArgs)

Thread.Sleep(200)

If Me.AxMSComm1.InBufferCount > 0 Then

Try

'Caso se pretenda receber os dados em modo binário, devem-se 'tirar de comentário as duas linhas abaixo e colocar em comentário as linhas 'para processamento em modo de texto

'Dim b1 As Byte = Convert.ToByte(Me.AxMSComm1.Input)
'ProcessResponseBinary(b1)

Dim response As String = Convert.ToString(Me.AxMSComm1.Input) 'Processa-se os dados em modo de 'texto
ProcessResponseText(response)

Catch ex As Exception

MessageBox.Show(ex.Message, "Falha no processamento dos 'dados recebidos!", MessageBoxButtons.OK, MessageBoxIcon.Information)

End Try

End If

End Sub

Private Sub ProcessResponseBinary(ByVal response() As Byte) 'Função 'para apresentação dos dados recebidos na caixa de texto

Dim i As Integer

For i = 0 To (response.Length - 1) 'Percorre-se o array de bytes 'elemento a elemento

RichTextBox1.AppendText(Convert.ToString(response( i)) + " ")

Next

RichTextBox1.AppendText("\n")

End Sub

Private Sub ProcessResponseText(ByVal input As String) 'Processamento 'de dados recebidos em modo de texto

If input.Trim() = "RING" Then

RichTextBox1.Clear()
RichTextBox1.Text = "Ring..."

ElseIf input.Trim() = "CONNECT 9600" Then

MessageBox.Show(input.Trim(), "Ligação conseguida!", MessageBoxButtons.OK, MessageBoxIcon.Information)

Else

MessageBox.Show(input.Trim(), "Falha na ligação!", MessageBoxButtons.OK, MessageBoxIcon.Information)
RichTextBox1.Text = input.Trim()

End If

RichTextBox1.AppendText(input + "\n")

End Sub

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

If TextBox1.Text.Trim() = "" Then 'Caso não se tenha introduzido o nº 'GSM

MessageBox.Show("Especifique o nº GSM!", "", MessageBoxButtons.OK, MessageBoxIcon.Information)

TextBox1.Focus()

Return

End If

If Not Me.AxMSComm1.PortOpen Then 'Caso a porta de 'comunicações não esteja aberta

Me.AxMSComm1.PortOpen = True 'Abre-se

End If

Dim gsm_command As String = "ATD" 'ATD - Attention Dial
Dim phone_number As String = TextBox1.Text.Trim()
Dim command1 As String = gsm_command + phone_number + "\n"
Dim command_to_dial() As Byte = System.Text.ASCIIEncoding.Default.GetBytes(command 1)

Me.AxMSComm1.Output = command_to_dial

RichTextBox1.Clear()
RichTextBox1.Text = "Dialing..."

End Sub



Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click

If Me.AxMSComm1.PortOpen Then 'Caso a porta de comunicações 'esteja aberta

Me.AxMSComm1.PortOpen = False 'Fecha-se

MessageBox.Show("Disconnected...", "", MessageBoxButtons.OK, MessageBoxIcon.Information)

RichTextBox1.Clear()

End If

End Sub



Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click

Dim msg As String = ""

If TextBox2.Text.Trim() = "" Then 'Caso não se esteja a enviar 'qualquer mensagem

MessageBox.Show("Please specify command!", "", MessageBoxButtons.OK, MessageBoxIcon.Information)
TextBox2.Focus()

Return

End If

If Not Me.AxMSComm1.PortOpen Then 'Caso a porta de comunicações 'esteja fechada

Me.AxMSComm1.PortOpen = True 'Abre-se

End If

msg = TextBox2.Text.Trim() + "\n"

Me.AxMSComm1.Output = System.Text.ASCIIEncoding.Default.GetBytes(msg)

RichTextBox1.Clear()
RichTextBox1.Text = "Message Sent..."

End Sub

End Class



Best Regards.
Oct 15 '08 #1
Share this question for a faster answer!
Share on Google+

Post your reply

Sign in to post your reply or Sign up for a free account.