Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 23.12.2011, 15:32
Аватар для fofka
fofka fofka вне форума
Начинающий
 
Регистрация: 12.10.2008
Сообщения: 163
Репутация: -1588
Вопрос Ethernet модуль Jerome

Приобрел такую "игрушку". Не получается с ним работать. Как написано в описание к устройстве, управление осуществляется текстовыми командами ($KE). Ни как не выходит у меня отправить на устройство команду, получить ответ, или получить данные с АЦП. Если может кто подсказать, буду благодарен. Страница откуда узнал про устройство-http://www.kernelchip.ru/Jerome.php На этой странице пример кода на С+ - http://www.kernelchip.ru/articles/KA013.php А на этой странице передача команд через СОМ http://www.pcports.ru/articles/ke_usb7.php Есть огромное желание заставить его работать из под Delphi. Я так понимаю если есть возможность работы через СОМ порт то получится и через Ethernet.
Ответить с цитированием
  #2  
Старый 23.12.2011, 15:50
Аватар для Bargest
Bargest Bargest вне форума
Профессионал
 
Регистрация: 19.10.2010
Адрес: Москва
Сообщения: 2,390
Версия Delphi: XE3/VS12/FASM
Репутация: 14665
По умолчанию

Причем тут COM? Модуль сделан для работы через Ethernet, и судя по коду на си, через TCP/IP. COM никакого отношения к этому не имеет. Почему? Потому что COM (RS232) это дергание напряжения на проводке Tx для передачи команды "как есть", отправил байт - получил байт. TCP/IP же при отправке пакета (даже одного байта) оборачивает его большим количеством заголовоков и работает с IP адресами. Работа через COM возможно только при наличии переходника COM->Ethernet, что, имхо, является бредом.
__________________
jmp $ ; Happy End!
The Cake Is A Lie.
Ответить с цитированием
  #3  
Старый 23.12.2011, 15:57
Аватар для fofka
fofka fofka вне форума
Начинающий
 
Регистрация: 12.10.2008
Сообщения: 163
Репутация: -1588
По умолчанию

Да я СОМ для примера привел (типа как команды отправляются), прекрасно понимаю что разные протоколы передачи.
Ответить с цитированием
  #4  
Старый 23.12.2011, 15:59
Аватар для Bargest
Bargest Bargest вне форума
Профессионал
 
Регистрация: 19.10.2010
Адрес: Москва
Сообщения: 2,390
Версия Delphi: XE3/VS12/FASM
Репутация: 14665
По умолчанию

ИМХО проще всего было бы перевести код си на делфи, поменяв тамошние TCP/IP на какие-нибудь делфовые сокеты (или через WinSock).
__________________
jmp $ ; Happy End!
The Cake Is A Lie.
Ответить с цитированием
  #5  
Старый 23.12.2011, 16:15
Аватар для fofka
fofka fofka вне форума
Начинающий
 
Регистрация: 12.10.2008
Сообщения: 163
Репутация: -1588
По умолчанию

Пока у меня получилось к нему только подключится. Использовал TClientSocket.
Если верить выполнению этой процедуры
PHP код:
procedure TForm1.CS1Connect(SenderTObjectSocketTCustomWinSocket);
begin
  Shape1
.Brush.Color:=clLime;
  
Label1.Caption := 'Подключились';
  
BitBtn2.Enabled:=True;
  
logs('Подключен к Jerome');
end

Так пытаюсь отправить команду устройству
PHP код:
procedure TForm1.BitBtn2Click(SenderTObject);
begin
 CS1
.Socket.SendText(ComboBox1.Text);
end

В ComboBox1 у меня несколько команд типа такой - $KE
Ответить с цитированием
  #6  
Старый 23.12.2011, 16:40
Аватар для Bargest
Bargest Bargest вне форума
Профессионал
 
Регистрация: 19.10.2010
Адрес: Москва
Сообщения: 2,390
Версия Delphi: XE3/VS12/FASM
Репутация: 14665
По умолчанию

Вообще-то
Код:
ComboBox1.Items.Strings[i];
__________________
jmp $ ; Happy End!
The Cake Is A Lie.
Ответить с цитированием
  #7  
Старый 23.12.2011, 17:04
Аватар для fofka
fofka fofka вне форума
Начинающий
 
Регистрация: 12.10.2008
Сообщения: 163
Репутация: -1588
По умолчанию

Я из этого примера исходил.
PHP код:
procedure TForm1.Button2Click(SenderTObject);
var
  
line:  Shortint;
  
valueShortint;
  
validBoolean;
  
bufferstring;
  
CRbyteShortint;
  
LFbyteShortint;
  
NumberWritten DWORD
begin
  line  
:= StrToInt(Edit2.Text);
  
value := StrToInt(Edit3.Text);
  
valid := TRUE;

if ((
line 24) or (line 1)) then
begin
  MessageDlg
('Invalid Line Number'mtError, [mbOK], 0);
  
valid := FALSE;
end;

if ((
value 1) or (value 0)) then
begin
  MessageDlg
('Invalid Value'mtError, [mbOK], 0);
  
valid := FALSE;
end;

if (
valid TRUEthen
begin
  CRbyte 
:= 13// HEX 0x0D
  
LFbyte := 10// HEX 0x0A
  
buffer := '$KE,WR,' Edit2.Text ',' Edit3.Text Char(CRbyte) +
            
Char(LFbyte);
  
WriteFile(CommHandlePChar(buffer)^, Length(buffer), NumberWrittennil);  
end;    
end

Хотя конечно ни к месту. Это к USB подключается, и определяется как СОМ. В вопросе ссылка есть. А хочется разобраться.
Ответить с цитированием
  #8  
Старый 23.12.2011, 22:53
Аватар для NumLock
NumLock NumLock вне форума
Let Me Show You
 
Регистрация: 30.04.2010
Адрес: Северодвинск
Сообщения: 5,426
Версия Delphi: 7, XE5
Репутация: 59586
По умолчанию

тут на форуме уже как то спрашивали про работу с именно этим устройством. там смысл в том, что нужно напрямую слать ему команды, например:
Код:
ClientSocket1.Socket.SendText('$KE');
на OnRead соотв. принимать ответы.
__________________
Пишу программы за еду.
__________________
Ответить с цитированием
  #9  
Старый 24.12.2011, 11:03
Аватар для fofka
fofka fofka вне форума
Начинающий
 
Регистрация: 12.10.2008
Сообщения: 163
Репутация: -1588
По умолчанию

Пробовал найти информацию по управлению и связью с модулем, не отыскал. Потому и обратился к спецам

Пробую отправить пароль модулю, как пишут в мануале, без ввода пароля он не будет реагировать на команды.
PHP код:
procedure TForm1.BitBtn3Click(SenderTObject);
begin
 CS1
.Socket.SendText('$KE,PSW,SET,Jerome');
end
Получаю ошибку (в приложении).
От модуля не могу ни чего получить, получаю так
PHP код:
procedure TForm1.CS1Read(SenderTObject;SocketTCustomWinSocket);
begin
  LabeledEdit3
.Text:= Socket.ReceiveText;
end
Вот такой результат в логе
PHP код:
24.12.2011    10:54:32    Программа запущена
24.12.2011    10
:54:37    Команда на подключение к хосту
24.12.2011    10
:54:37    Подключение установлено
24.12.2011    10
:54:44    Ошибка №10057
24.12.2011    10
:54:44    Связь разорвана
24.12.2011    10
:55:00    Ошибка №10038
24.12.2011    10
:55:12    Программа закрыта 
Изображения
Тип файла: jpg Ошибка.jpg (18.4 Кбайт, 6 просмотров)
Ответить с цитированием
  #10  
Старый 24.12.2011, 11:26
Аватар для NumLock
NumLock NumLock вне форума
Let Me Show You
 
Регистрация: 30.04.2010
Адрес: Северодвинск
Сообщения: 5,426
Версия Delphi: 7, XE5
Репутация: 59586
По умолчанию

вся информация тут: http://www.kernelchip.ru/download/Je...mandsGuide.pdf команда $KE работает без пароля.
алгоритм такой:
-кидаешь на форму TClientSocket. Address = '192.168.0.101', Port = 2424
-назначаешь OnConnect и OnRead
-на OnConnect просто выводишь сообщение, что подключился
-на OnRead что-то типа:
Код:
Memo1.Text:=Socket.ReceiveText;
-кидаешь кнопку. обработчик:
Код:
ClientSocket1.Socket.SendText('$KE'#13#10);
-жать после подключения и смотреть в Memo ответ
__________________
Пишу программы за еду.
__________________
Ответить с цитированием
Этот пользователь сказал Спасибо NumLock за это полезное сообщение:
fofka (24.12.2011)
  #11  
Старый 24.12.2011, 16:21
Аватар для fofka
fofka fofka вне форума
Начинающий
 
Регистрация: 12.10.2008
Сообщения: 163
Репутация: -1588
По умолчанию

NumLock благодарю за совет. Все получилось. Я забыл про перевод строки. Все получилось. По крайней мере команды на включение и выключение каналов работают. Теперь буду пробовать получить с АЦП информацию.
Еще раз спасибо за помощь
Ответить с цитированием
  #12  
Старый 24.12.2011, 17:34
Аватар для fofka
fofka fofka вне форума
Начинающий
 
Регистрация: 12.10.2008
Сообщения: 163
Репутация: -1588
По умолчанию

Не так просто оказалось получить данные с АЦП.
Если отправить запрос на получение данных
PHP код:
CS1.Socket.SendText('$KE,ADC,1'#13#10) 
Я в Мемо получаю результат. А хочется в отдельный едит вывести.
Решение отыскал, но опять все на СОМ порт написано. Помогите разобраться
http://www.pcports.ru/articles/ke_usb13.php
Выделение данных от АЦП из потока
Ответить с цитированием
  #13  
Старый 24.12.2011, 19:18
Аватар для NumLock
NumLock NumLock вне форума
Let Me Show You
 
Регистрация: 30.04.2010
Адрес: Северодвинск
Сообщения: 5,426
Версия Delphi: 7, XE5
Репутация: 59586
По умолчанию

ну так в OnRead обрабатывай ответ. если он начинается с "#ADC", то значит это данных АЦП и их нужно записать в Edit.
__________________
Пишу программы за еду.
__________________
Ответить с цитированием
  #14  
Старый 03.01.2012, 20:02
Аватар для fofka
fofka fofka вне форума
Начинающий
 
Регистрация: 12.10.2008
Сообщения: 163
Репутация: -1588
Радость

В общем разобрался с этим устройством. Все в проекте. Сделал по минимуму. Подключение, отправка тестового запроса, отправка пароля устройства (без пароля ни чего не управляется). Управление тремя каналами (подача лог 1 или 0). Получение данных с АЦП1 как через таймер так и через кнопку "Проверить". Как пример может кому еще и пригодится.
P.S. Оформление кода так себе, все таки тестовая версия.
Всем спасибо за помощь.
Вложения
Тип файла: rar Jerome.rar (182.0 Кбайт, 62 просмотров)

Последний раз редактировалось fofka, 03.01.2012 в 20:07.
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 00:19.


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2025