Проблема опроса ЛИР-915

Модератор: Денис Кашин

Ответить
Mag (Михаил)

Проблема опроса ЛИР-915

Сообщение Mag (Михаил) »

Здраствуйте.

Я приобрел ЛИР-915, ЛИР-14 и ЛИР-967 RS485-USB. Собранный комплект устройств оказался работоспособным, но только в программе "Скиф", т.к. попытка опросить модуль ЛИР-915, используя класс CSerial и ваш пример кода, с целью получения относительной координаты, оказалась безрезультатной.

Опрос производился в формате ASCII на скорости 19200, при этом в порт запрос уходит, а ответ приходит пустым. Код следующий (C++ Builder 6.0):

void __fastcall TForm1::Button1Click(TObject *Sender)
{

setlocale(LC_ALL, "russian");

const LPCTSTR portName = "COM3";
if(CSerial::CheckPort(portName) == CSerial::EPortAvailable)
{
Form1->Label1->Caption = "NO_ERROR";
}

UCHAR address = 1;

if(port.Open(portName) == NO_ERROR)
{
Form1->Label2->Caption = "NO_ERROR";
}

if(port.Setup(CSerial::EBaud19200, CSerial::EData8, CSerial::EParNone, CSerial::EStop1) == ERROR_SUCCESS)Form1->Label7->Caption = "NO_ERROR";
if(port.SetupHandshaking(CSerial::EHandshakeHardware) == ERROR_SUCCESS)Form1->Label8->Caption = "NO_ERROR";

if(port.Purge() == ERROR_SUCCESS)Form1->Label9->Caption = "NO_ERROR";

UCHAR relCmd[] = { 35, address, 111 };
UCHAR answer[ASCII_ANSWER_MAX_LENGTH];

int coord = NO_POINT;

if (port.Write(relCmd, ASCII_COMMAND_LENGTH) == ERROR_SUCCESS)
{
Sleep(50);
if(port.Read(answer, ASCII_ANSWER_MAX_LENGTH) == ERROR_SUCCESS)
{
coord = GetCoordinate(answer);
}
Form1->Label3->Caption = coord;
}

if(port.Close() == ERROR_SUCCESS) Form1->Label10->Caption = "NO_ERROR";
}

Какая здесь ошибка?
Михаил Поляков
СКБИС
СКБИС
Сообщения: 79
Зарегистрирован: 06 фев 2008, 16:10

Сообщение Михаил Поляков »

Выполнил Ваш код под консолью используя Visual c++. К сожалению Builder-а нет. Все работает. Проверьте вытащили ли вы заглушку и выключите/включите питание.

Ниже приведен код, который точно работает. Вывод на форму заменен выводом на консоль, COM3 на COM1.
в строке:

Код: Выделить всё

const LPCTSTR portName = L"COM1";"  
добавил символ L перед строкой COM1

полный код:

Код: Выделить всё

	CSerial port;
	const LPCTSTR portName = L"COM1";
if(CSerial::CheckPort(portName) == CSerial::EPortAvailable)
{
 printf("NO_ERROR");
}

UCHAR address = 1;

if(port.Open(portName) == NO_ERROR)
{
printf("NO_ERROR");

}

if(port.Setup(CSerial::EBaud19200, CSerial::EData8, CSerial::EParNone, CSerial::EStop1) == ERROR_SUCCESS)
printf("NO_ERROR");
if(port.SetupHandshaking(CSerial::EHandshakeHardware) == ERROR_SUCCESS)
printf("NO_ERROR");

if(port.Purge() == ERROR_SUCCESS)
printf("NO_ERROR\n");

UCHAR relCmd[] = { 35, address, 111 };
UCHAR answer[ASCII_ANSWER_MAX_LENGTH];

int coord = NO_POINT;

if (port.Write(relCmd, ASCII_COMMAND_LENGTH) == ERROR_SUCCESS)
{
Sleep(50);
if(port.Read(answer, ASCII_ANSWER_MAX_LENGTH) == ERROR_SUCCESS)
{
coord = GetCoordinate(answer);
}
std::cout<<coord<<std::endl;
}

if(port.Close() == ERROR_SUCCESS) 
printf("NO_ERROR"); 

  return 0;
Ответить