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

Форум программистов: 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 сообщение ] 


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

Зарегистрированные пользователи: нет зарегистрированных пользователей


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

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