→ Для вступления в общество новичков и профессионалов программирования, пожалуйста нажмите здесь ...

Форум программистов: C++, Basic, Delphi, Pascal, JavaScript
Логин: Пароль:
Запомнить?  
@Mail.ru



Начать новую тему Ответить на тему  [ 1 сообщение ] 
Работа с COM-портом в С# 
Автор Сообщение
Начинающий

Регистрация: 25.05.2009
Сообщения: 1

Репутация: 0 [ ? ]
Сообщение Работа с COM-портом в С#
Добриы день
может кто сталкивался и поможет решить следующую задачу на C#

суть задачи состоит в том что бы написать программу прозвонки сигнализации
програма должна звонить по определенным номерам телефонов
где на другом конце стоит автоответчик который при входящем звонке генерит в линию сигнал частотой 700Гц и длительностью 4-5 сек.
вот его то и нужно определить

через COM посылаю модему(Zyxel U-1496) команду набора номера
все нормально модем номер набирает, при поднятии трубки автоответчиком на другой стороне
на LPT-порт подается сигнал(за счет переплюсовки в линии) и с етого момента нужно как бы начать слушать что приходит на модем и определить есть ли сигнал сигнализации

есть определенные нароботки
[syntax=cdies]using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.IO;
using System.IO.Ports;
using System.Runtime.InteropServices;
using System.Timers;
using System.Threading;

namespace AUTORING_ATS
{
public partial class Form1 : Form
{
bool timer = true;
System.Timers.Timer tm;
System.IO.Ports.SerialPort port = new System.IO.Ports.SerialPort();
int port_time = 0; // время на ответ модема
int out_time = 0; //время до поднятия трубки
int num;

public Form1()
{
InitializeComponent();
IniFileClass a = new IniFileClass(@"c:\settings.ini");

port.PortName = a.ReadString("portconfig", "PortName", "COM1");
port.BaudRate = a.ReadInt("portconfig", "PortSpeed", 38400);
port.WriteTimeout = 500;
port.ReadTimeout = 500;
port.Parity = Parity.None;
port.DataBits = 8;
port.StopBits = StopBits.One;
port.Handshake = Handshake.RequestToSend;
port.DtrEnable = true;
port.RtsEnable = true;
port.NewLine = System.Environment.NewLine;
port_time = a.ReadInt("portconfig", "PortTime", 40);
out_time = a.ReadInt("portconfig", "OutTime", 15);

}
private void button1_Click(object sender, EventArgs e)
{
//tm = new System.Timers.Timer();
//tm.Interval = 6000;
//tm.Enabled = true;
//tm.Elapsed += new ElapsedEventHandler(OnTimedEvent);
Reset_LTP();
string cache = "";
port.Open();
port.WriteLine("AT+FCLASS=8+VIT=60+VVT=1+VSM=30+VDH=1+VRA=0+VRN=57");
Thread.Sleep(1000);
port.WriteLine("ATDT35199");
Thread.Sleep(2000); // ОЖИДАЕМ СИГНАЛА ПОДНЯТИЯ ТРУБКИ ЕСЛИ ПОЯВИЛСЯ ТО НАЧИНАЕМ
//tm.Start(); //ЗАПИСЬ
port.WriteLine("AT+VRX");
Thread.Sleep(100);
while (port.ReadLine() == "CONNECT")
{
Thread.Sleep(100);
}
MessageBox.Show("START RECORDING");
while (port.BytesToRead > 0)
{
try
{
cache += port.ReadLine();
}
catch{ }
//MessageBox.Show(cache);
}
//tm.Stop();
port.WriteLine("AT+VLS=0");
port.Close();
MessageBox.Show("КОНЕЦ");
MessageBox.Show("-" + cache + "-");
}
public void OnTimedEvent(object source, ElapsedEventArgs e)
{
timer = false;
}

private void Form1_Load(object sender, EventArgs e)
{
}
public void Reset_LTP()
{
LPTPort.OutputLPT(889, 127);
}
}
//================================================================================
========
//======================= КЛАС ИНИЦИАЛИЗАЦИИ ПАРАМЕТРОВ ==================================
//================================================================================
========
public class LPTPort
{
[DllImport("inpout32.dll", EntryPoint = "Inp32")]
public static extern int InputLPT(int adress);

[DllImport("inpout32.dll", EntryPoint = "Out32")]
public static extern void OutputLPT(int adress, int value);
}

//================================================================================
========
//======================= КЛАС ИНИЦИАЛИЗАЦИИ ПАРАМЕТРОВ ==================================
//================================================================================
========
public class IniFileClass
{
private String IniFile = "";

[DllImport("kernel32")]
private static extern long WritePrivateProfileInt(String Section, String Key, int Value, String FilePath);
[DllImport("kernel32")]
private static extern long WritePrivateProfileString(String Section, String Key, String Value, String FilePath);
[DllImport("kernel32")]
private static extern int GetPrivateProfileInt(String Section, String Key, int Default, String FilePath);
[DllImport("kernel32")]
private static extern int GetPrivateProfileString(String Section, String Key, String Default, StringBuilder retVal, int Size, String FilePath);

public IniFileClass(String IniFile)
{
this.IniFile = IniFile;
}

public String ReadString(String Section, String Key, String Default)
{
StringBuilder StrBu = new StringBuilder(255);
GetPrivateProfileString(Section, Key, Default, StrBu, 255, IniFile);
return StrBu.ToString();
}

public int ReadInt(String Section, String Key, int Default)
{
return GetPrivateProfileInt(Section, Key, Default, IniFile);
}

public void WriteString(String Section, String Key, String Value)
{
WritePrivateProfileString(Section, Key, Value, IniFile);
}

public void WriteInt(String Section, String Key, int Value)
{
WritePrivateProfileInt(Section, Key, Value, IniFile);
}
}
}[/syntax]

проблема здесь
[syntax=cdies]port.WriteLine("AT+VRX");
Thread.Sleep(100);
while (port.ReadLine() == "CONNECT")
{
Thread.Sleep(100);
}
MessageBox.Show("START RECORDING");
while (port.BytesToRead > 0)
{
try
{
cache += port.ReadLine();
}
catch{ }
//MessageBox.Show(cache);
}[/syntax]

я получаю ответ что запись началась но на порту нету ничего,
хотя когда использую HyperTerminal данные с порта поступают как положенно

набор команд которые я посылаю модему один и тот же
почему же я ничего не могу снять с порта? может не правильно что-то

ребята ПОМОГИТЕ, может кто сталкивался с работой с COM-портом
бьюсь над етим вопросом уже 2 месяц

всем заранее спасибо


25.05.2009 16:36
Профиль
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ 1 сообщение ] 


Кто сейчас на конференции

Зарегистрированные пользователи: Google [Bot]


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Перейти:  
cron
© 2013 «Форум программистов Украины»