Как я могу получить данные с АТС после того, как меня к ней подключат? - PullRequest
1 голос
/ 06 февраля 2012

Здравствуйте, я недавно столкнулся с проблемой и искал более двух месяцев, но пока не нашел решения. Мне нужно написать программу / приложение (которое я уже запустил в VB.NET 2010), которое подключается через УАТС Panasonic KX-TEM824 через порт RS232 (кабель уже подключен: COM15 / 16 в зависимости от USB-подключения), и пока он подключен к анализировать (получать) данные с самой УАТС, данные с идентификатором вызывающего абонента, время начала и окончания вызова, длительность вызова и т. д. В Интернете я уже нашел какое-то приложение, которое работает, но они могут попробовать бесплатно через некоторое время требуется купить или перезапустить приложение еще раз. Но я предполагаю, что на стороне кода не так много возможностей для реализации. Пожалуйста, мне действительно нужна помощь. Я публикую код ниже. Постскриптум это для учебной цели.

Imports System 
Imports System.ComponentModel 
Imports System.Threading 
Imports System.IO.Ports 
Public Class frmMain 
Dim myPort As Array 'COM Ports detected on the system will be stored here 
Delegate Sub SetTextCallback(ByVal [text] As String) 'Added to prevent threading errors during receiveing of data 

Private Sub frmMain_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load 
'When our form loads, auto detect all serial ports in the system and populate the cmbPort Combo box. 
myPort = IO.Ports.SerialPort.GetPortNames() 'Get all com ports available 
cmbBaud.Items.Add(9600) 'Populate the cmbBaud Combo box to common baud rates used 
cmbBaud.Items.Add(19200) 
cmbBaud.Items.Add(38400) 
cmbBaud.Items.Add(57600) 
cmbBaud.Items.Add(115200) 

For i = 0 To UBound(myPort) 
cmbPort.Items.Add(myPort(i)) 
Next 
cmbPort.Text = cmbPort.Items.Item(0) 'Set cmbPort text to the first COM port detected 
cmbBaud.Text = cmbBaud.Items.Item(0) 'Set cmbBaud text to the first Baud rate on the list 

btnDisconnect.Enabled = False 'Initially Disconnect Button is Disabled 

End Sub 

Private Sub btnConnect_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnConnect.Click 
SerialPort1.PortName = cmbPort.Text 'Set SerialPort1 to the selected COM port at startup 
SerialPort1.BaudRate = cmbBaud.Text 'Set Baud rate to the selected value on 

'Other Serial Port Property 
SerialPort1.Parity = IO.Ports.Parity.None 
SerialPort1.StopBits = IO.Ports.StopBits.One 
SerialPort1.DataBits = 8 'Open our serial port 
SerialPort1.Open() 

btnConnect.Enabled = False 'Disable Connect button 
btnDisconnect.Enabled = True 'and Enable Disconnect button 

End Sub 

Private Sub btnDisconnect_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnDisconnect.Click 
SerialPort1.Close() 'Close our Serial Port 

btnConnect.Enabled = True 
btnDisconnect.Enabled = False 
End Sub 

Private Sub btnSend_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnSend.Click 
SerialPort1.Write(txtTransmit.Text & vbCr) 'The text contained in the txtText will be sent to the serial port as ascii 
'plus the carriage return (Enter Key) the carriage return can be ommitted if the other end does not need it 
End Sub 

Private Sub SerialPort1_DataReceived(ByVal sender As Object, ByVal e As System.IO.Ports.SerialDataReceivedEventArgs) Handles SerialPort1.DataReceived 
ReceivedText(SerialPort1.ReadExisting()) 'Automatically called every time a data is received at the serialPort 
End Sub 
Private Sub ReceivedText(ByVal [text] As String) 
'compares the ID of the creating Thread to the ID of the calling Thread 
If Me.rtbReceived.InvokeRequired Then 
Dim x As New SetTextCallback(AddressOf ReceivedText) 
Me.Invoke(x, New Object() {(text)}) 
Else 
Me.rtbReceived.Text &= [text] 
End If 
End Sub 

Private Sub cmbPort_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmbPort.SelectedIndexChanged 
If SerialPort1.IsOpen = False Then 
SerialPort1.PortName = cmbPort.Text 'pop a message box to user if he is changing ports 
Else 'without disconnecting first. 
MsgBox("Valid only if port is Closed", vbCritical) 
End If 
End Sub 

Private Sub cmbBaud_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmbBaud.SelectedIndexChanged 
If SerialPort1.IsOpen = False Then 
SerialPort1.BaudRate = cmbBaud.Text 'pop a message box to user if he is changing baud rate 
Else 'without disconnecting first. 
MsgBox("Valid only if port is Closed", vbCritical) 
End If 
End Sub 
End Class

1 Ответ

0 голосов
/ 07 февраля 2012

У меня также есть этот модуль УАТС, поэтому мне интересно, но я не могу проверить его, пока я не вернусь на работу завтра.

Этот код выглядит как пример кода MSDN и не был настроен в любомспособ применения АТС.Возможно, вам следует поступить так, как предложил Ханс, и сначала настроить его на работу с терминальной программой, а затем настроить приложение, используя только правильные биты, четность и стоп-биты.IIRC panasonic использует фиксированные настройки, поэтому предоставление опций только усложнит проблему.

...