Пытаюсь работать с сабжем (модель Cipher 1021+) из второго фреймворка. Здесь же в форуме нашёл простенький класс для работы с ним http://www.rsdn.ru/Forum/?mid=1582313. Свиду всё элементарно. На загрузку формы создал объект класса Scanner, начал чтение. На закрытие формы чтение это прекратил. На событие от объекта Scanner повесил свой обработчик, принимающий строку из аргументов события. Пробллема в том, чтол после чтения данных сканером (он код распознал и довольно пискнул), с порта я так ничего прочитать и не могу. Вообще ничего, пустая строка только всё время на входе. Единственный раз, кога он хоть что-то возвращает — это при первом запуске программы, вообще первом. Он возвращает знак вопроса сразу же после открытия порта при перой же итерацией чтения. Чтоб снова получить этот знак вопроса нужно перезагрузить компьютер.
Подскажите пожалуйста какая может быть проблема, и что ещё можно попробовать? поиски в яндексе и гугле результатов не дали.
Re: сканнер штрихкодов для Com порта в .NET 2.0
От:
Аноним
Дата:
28.09.06 07:36
Оценка:
Здравствуйте, sleepw41ker, Вы писали:
S>Здравсвуй, глубокоуважаемая общественность.
S>Пытаюсь работать с сабжем (модель Cipher 1021+) из второго фреймворка. Здесь же в форуме нашёл простенький класс для работы с ним S>http://www.rsdn.ru/Forum/?mid=1582313. Свиду всё элементарно. На загрузку формы создал объект класса Scanner, начал чтение. На закрытие формы чтение это прекратил. На событие от объекта Scanner повесил свой обработчик, принимающий строку из аргументов события. Пробллема в том, чтол после чтения данных сканером (он код распознал и довольно пискнул), с порта я так ничего прочитать и не могу. Вообще ничего, пустая строка только всё время на входе. Единственный раз, кога он хоть что-то возвращает — это при первом запуске программы, вообще первом. Он возвращает знак вопроса сразу же после открытия порта при перой же итерацией чтения. Чтоб снова получить этот знак вопроса нужно перезагрузить компьютер.
S>Подскажите пожалуйста какая может быть проблема, и что ещё можно попробовать? поиски в яндексе и гугле результатов не дали.
Во-первых, надо проверить настройки com-порта у сканера, и у вас в программе, они должны быть идентичны. Судя по описанию проблемы у вас они не одинаковые, возможно скорость, или еще что-нибудь. Вы можете либо прогу под сканер настроить или сам сканер, что удобнее решать вам. Сканер обычно программится через специальные штрихкоды, в поставке идет книжка для программирования. Удачи.
Re[2]: сканнер штрихкодов для Com порта в .NET 2.0
Во-первых, надо проверить настройки com-порта у сканера, и у вас в программе, они должны быть идентичны. Судя по описанию проблемы у вас они не одинаковые, возможно скорость, или еще что-нибудь. Вы можете либо прогу под сканер настроить или сам сканер, что удобнее решать вам. Сканер обычно программится через специальные штрихкоды, в поставке идет книжка для программирования. Удачи.
настройки, по-моему, идентичны. у сканера всё сбросил в дефолт. и судя по тому, что в этой книжке написано — они у меня совпадают. и скорость (9600), и количество бит (8). и тд. Ком-порт у меня на машине вообще единственный. Пытался настроить кодировку code128. не уверен что всё удачно получилось. но пробовал работать и с заводскими настройками — результат одинаков.
Re[2]: сканнер штрихкодов для Com порта в .NET 2.0
Для начала надо брать программку типа старого-доброго Term95 или подобных. Убеждаешься, что у тебя вообще что-то работает. А потом уже идешь бороться с дотнетью.
How can men die better than facing fearful odds,
For the ashes of their fathers and the temples of their gods?
Здравствуйте, sleepw41ker, Вы писали:
S>Здравсвуй, глубокоуважаемая общественность.
S>Пытаюсь работать с сабжем (модель Cipher 1021+) из второго фреймворка. Здесь же в форуме нашёл простенький класс для работы с ним S>http://www.rsdn.ru/Forum/?mid=1582313. Свиду всё элементарно. На загрузку формы создал объект класса Scanner, начал чтение. На закрытие формы чтение это прекратил. На событие от объекта Scanner повесил свой обработчик, принимающий строку из аргументов события. Пробллема в том, чтол после чтения данных сканером (он код распознал и довольно пискнул), с порта я так ничего прочитать и не могу. Вообще ничего, пустая строка только всё время на входе. Единственный раз, кога он хоть что-то возвращает — это при первом запуске программы, вообще первом. Он возвращает знак вопроса сразу же после открытия порта при перой же итерацией чтения. Чтоб снова получить этот знак вопроса нужно перезагрузить компьютер.
S>Подскажите пожалуйста какая может быть проблема, и что ещё можно попробовать? поиски в яндексе и гугле результатов не дали.
Или действительно сканер не настроил, что происходит очень часто или неправильно с ним работаешь, тогда код в студию (ссылка у меня не открылась)
Re[2]: сканнер штрихкодов для Com порта в .NET 2.0
AD>Или действительно сканер не настроил, что происходит очень часто или неправильно с ним работаешь, тогда код в студию (ссылка у меня не открылась)
код класса из приведённой ссылки:
что я с ним делаю описано в первом сообщении
public class ScannerDataReceivedEventArgs : System.EventArgs
{
string barCode = string.Empty;
/// <summary>
/// конструктор
/// </summary>
/// <param name="barCode">штрих код</param>public ScannerDataReceivedEventArgs(string barCode)
{
this.barCode = barCode;
}
public string BarCode
{
get
{
return barCode;
}
}
}
public delegate void ScannerDataReceivedHandler(ScannerDataReceivedEventArgs e);
public class Scanner
{
#region Fields
string portName = "COM1";
int boundRate = 9600;
SerialPort port = null;
System.Threading.Thread listeningThread = null;
#endregion
#region Properties
#endregion
#region Constructors
public Scanner()
{
port = new SerialPort();
}
public Scanner(string portName):this()
{
this.portName = portName;
}
public Scanner(string portName, int boundRate):this(portName)
{
this.boundRate = boundRate;
}
#endregion
#region Events
public event ScannerDataReceivedHandler DataRaceived;
event EventHandler onThreadAbort;
#endregion
#region Properties
#endregion
#region Methods
void Listen()
{
string sendingStr = string.Empty;
while (true)
{
string s = port.ReadExisting().Trim();
if (s != string.Empty)
{
sendingStr += s;
//чтобы устройство успело отослать на порт следующую порцию данных
//делаем слип
System.Threading.Thread.Sleep(100);
}
else if (s == string.Empty && sendingStr != string.Empty)
{
if (null != DataRaceived)
DataRaceived(new ScannerDataReceivedEventArgs(sendingStr));
sendingStr = string.Empty;
}
}
}
public void StartListening()
{
port.PortName = portName;
port.BaudRate = boundRate;
port.StopBits = StopBits.One;
port.Open();
listeningThread = new System.Threading.Thread(new System.Threading.ThreadStart(this.Listen));
listeningThread.Start();
}
public void StopListening()
{
if (null != listeningThread)
{
port.Close();
listeningThread.Abort();
}
}
#endregion
}
Re[3]: сканнер штрихкодов для Com порта в .NET 2.0
От:
Аноним
Дата:
28.09.06 11:40
Оценка:
Здравствуйте, sleepw41ker, Вы писали:
S>Здравствуйте, AlexDav, Вы писали:
AD>>Или действительно сканер не настроил, что происходит очень часто или неправильно с ним работаешь, тогда код в студию (ссылка у меня не открылась)
S>код класса из приведённой ссылки: S>что я с ним делаю описано в первом сообщении
Я бы на твоем месте запрограммил сканер так, чтобы он в конце передавал какой-нибудь код символа, к примеру 13 (0x0D), и выставил свойство:
public string NewLine { get; set; }
в это значение.
serialPort.NewLine = ((char)13).ToString();
а потом подписался на событие:
public event SerialDataReceivedEventHandler DataReceived;
а там читал все сообщение (линию).
public string ReadLine();
Можно в цикле если их несколько, обращая внимание на: