Board.KolibriOS.org

Официальный форум KolibriOS
Текущее время: Сб ноя 18, 2017 4:03 am

Часовой пояс: UTC+03:00




Начать новую тему  Ответить на тему  [ 194 сообщения ]  На страницу Пред. 19 10 11 12 13 След.
Автор Сообщение
 Заголовок сообщения: Re: KolibriOS на производстве
СообщениеДобавлено: Чт июн 06, 2013 4:42 pm 
Не в сети
Аватара пользователя

Зарегистрирован: Чт май 30, 2013 5:56 pm
Сообщения: 31
А как проверить ...

function chtenie_iz_porta(pdw:dword):byte;
var by:byte;
begin
pdw:=$80000000+pdw;
asm
mov eax,43
mov ecx,pdw
int $40
mov by,bl
end;
chtenie_iz_porta:=by;
end;

... наиболее простыми средствами, или
тут на 100% всё в порядке?


Последний раз редактировалось VitZ Сб июн 15, 2013 4:25 pm, всего редактировалось 1 раз.

Вернуться к началу
 Заголовок сообщения: Re: KolibriOS на производстве
СообщениеДобавлено: Чт июн 06, 2013 5:08 pm 
Не в сети
Kernel Developer

Зарегистрирован: Вс фев 10, 2013 12:37 pm
Сообщения: 2329
mov [by],bl

_________________
Всем чмоки в этом проекте! Засуньте эти 11 лет себе в жопу!


Вернуться к началу
 Заголовок сообщения: Re: KolibriOS на производстве
СообщениеДобавлено: Чт июн 06, 2013 5:14 pm 
Не в сети
Аватара пользователя

Зарегистрирован: Чт май 30, 2013 5:56 pm
Сообщения: 31
... thanks.


Вернуться к началу
 Заголовок сообщения: Re: KolibriOS на производстве
СообщениеДобавлено: Пт июн 07, 2013 11:07 am 
Не в сети
Аватара пользователя

Зарегистрирован: Чт май 30, 2013 5:56 pm
Сообщения: 31
procedure rc(var s:string);
Спойлер: Показать
Код:
procedure rc(var s:string);
var c:char; i,t:dword;
begin s:=''; i:=1; t:=0;
  repeat
    while (In1021 and 1)<>1 do begin
      t:=t+1;
      if (t>2000) then exit;
    end;
    c:=chr(In1016);
    if c=chr(13) then break;
    s[0]:=chr(i);
    s[i]:=c;
    i:=i+1;
    if (i>30) then break;
    t:=0;
  until false;
end;


Последний раз редактировалось VitZ Пт июл 12, 2013 4:46 pm, всего редактировалось 9 раз.

Вернуться к началу
 Заголовок сообщения: Re: KolibriOS на производстве
СообщениеДобавлено: Сб июн 08, 2013 8:07 am 
Не в сети
Аватара пользователя

Зарегистрирован: Чт май 30, 2013 5:56 pm
Сообщения: 31
... А гадкий LPT при включении компьютера посылает включающий сигнал на все свои выходы ...

ТБ - вот с чего должна была начаться эта тема !!!
(как, кстати, суметь потушить огнетушителем с электропроводящим
содержимым неотключённую от электросети производственную
электроустановку?)


Последний раз редактировалось VitZ Ср янв 29, 2014 8:28 pm, всего редактировалось 1 раз.

Вернуться к началу
 Заголовок сообщения: Re: KolibriOS на производстве
СообщениеДобавлено: Сб июн 08, 2013 12:27 pm 
Не в сети
Kernel Developer
Аватара пользователя

Зарегистрирован: Пт авг 14, 2009 1:46 am
Сообщения: 1291
Цитата:
... А гадкий LPT при включении компьютера посылает включающий сигнал на все свои выходы ...

Ну а ты куда смотрел?
Да, некоторые BIOSы играют сигналами на LPT-шине, по стандарту IEEE1284.
А Винда в течение первой минуты после начала загрузки периодически опрашивает отклик ECP-устройств по древнему PnP протоколу.

Прежде чем подключать железяку - проверь дефолтные состояния и игру сигналов при включении/выключении, это же азы!

_________________
Узкий специалист подобен флюсу: полнота его - односторонняя.
Козьма Прутков


Вернуться к началу
 Заголовок сообщения: Re: KolibriOS на производстве
СообщениеДобавлено: Вс июн 09, 2013 8:15 am 
Не в сети
Аватара пользователя

Зарегистрирован: Чт май 30, 2013 5:56 pm
Сообщения: 31
function In1016:byte;
var by:byte;
begin
asm
mov dx,1016
in al,dx
mov [by],al
end;
In1016:=by;
end;

k.writeNumber(5,125,$33F1F1F1,0,5,In1016) в 3-ем пункте k.waitForEvent'a
- даёт устойчивый приём последовательности одинаковых байтов,
приходящих из второго компа (DOS'a):

DOScom -> comKOS
4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, ... или
15, 15, 15, 15, 15, 15, 15, 15, 15, 15 ... и т. пр.


Последний раз редактировалось VitZ Пн авг 26, 2013 8:08 pm, всего редактировалось 4 раза.

Вернуться к началу
 Заголовок сообщения: Re: KolibriOS на производстве
СообщениеДобавлено: Пн июн 10, 2013 1:14 pm 
Не в сети
Аватара пользователя

Зарегистрирован: Чт май 30, 2013 5:56 pm
Сообщения: 31
function In1021:byte;
var by:byte;
begin
asm
mov dx,1021
in al,dx
mov [by],al
end;
In1021:=by;
end;

procedure open_com;
begin
{}
zapis_v_port(1019,$80);
zapis_v_port(1016, (1 and $FF) );
zapis_v_port(1017, ((1 and $FF00) shr 8 ) );
zapis_v_port(1019,3);
zapis_v_port(1017,0);
zapis_v_port(1018,7);
{}
zapis_v_port(1018,1);
end;

<< open_com; >> надо записать сразу после захвата портов
в основной части программы (между основными BEGIN и END)


Последний раз редактировалось VitZ Ср июн 12, 2013 1:19 pm, всего редактировалось 1 раз.

Вернуться к началу
 Заголовок сообщения: Re: KolibriOS на производстве
СообщениеДобавлено: Пн июн 10, 2013 5:09 pm 
Не в сети
Аватара пользователя

Зарегистрирован: Чт май 30, 2013 5:56 pm
Сообщения: 31
Всё; работает;
посылаю из компа запрос '$01M' с конечным байтом 13,
а приходит ответ '!017042' с конечным байтом 13
(<<i7042>> - это и есть имя устройства, висящего на адресе 1 ПЛ).


Последний раз редактировалось VitZ Ср сен 04, 2013 8:22 pm, всего редактировалось 3 раза.

Вернуться к началу
 Заголовок сообщения: Re: KolibriOS на производстве
СообщениеДобавлено: Пн июн 10, 2013 5:56 pm 
Не в сети

Зарегистрирован: Пн сен 24, 2007 11:11 am
Сообщения: 2814
Поздравляю. Теперь можете писать любые драйвера для устройств на EIA485 и EIA232? Думали про USB<->EIA485 и EIA232<->USB?


Вернуться к началу
 Заголовок сообщения: Re: KolibriOS на производстве
СообщениеДобавлено: Вт июн 11, 2013 9:19 am 
Не в сети
Аватара пользователя

Зарегистрирован: Чт май 30, 2013 5:56 pm
Сообщения: 31
PPro - это минидельфи в RTOS (KOS).
Следующим шагом подключим устройство i7017
и построим график (напряжения на [Vin0+ __ Vin0-]
его входе).
Спойлер: Показать
Код:
program hello96;    uses kolibri;    var k:TKolibri;
const header:string='HelloWorld test'#0;

procedure zapis_v_port(pdw:dword; b:byte);
begin asm
  mov eax,43
  mov bl,b
  mov ecx,pdw
  int $40
end; end;

procedure draw_window;
begin   k.BeginDraw;
   k.DefineWindow(10,40,350,350,$33FFFFFF,0,integer(@header[1]));
   k.DefineButton(5,5,65,25,7,7);
   k.EndDraw; end;

procedure zachvat_portov;
begin asm
  mov eax,46
  mov ebx,0
  mov ecx,1016
  mov edx,1023
  int $40
end; end;

procedure otdatj_porti;
begin asm
  mov eax,46
  mov ebx,1
  mov ecx,1016
  mov edx,1023
  int $40
end; end;

procedure open_com;
begin
  zapis_v_port(1019,$80);
  zapis_v_port(   1016,(1 and $FF)   );
  zapis_v_port(   1017,((1 and $FF00) shr 8)   );
  zapis_v_port(1019,3);
  zapis_v_port(1017,0);
  zapis_v_port(1018,7);
  zapis_v_port(1018,1);
end;

function In1016:byte;
var by:byte;
begin
  asm   
    mov dx,1016
    in  al,dx
    mov [by],al
  end;
  In1016:=by;
end;

function In1021:byte;
var by:byte;
begin
  asm
    mov dx,1021
    in al,dx
    mov [by],al
  end;
  In1021:=by;
end;

procedure sc(s:string);
var i,t:dword;
begin     i:=1;    t:=0;
  if (   (length(s)<1)   or   (length(s)>30)   ) then exit;
  while (i<>length(s)+1) do begin
    while (In1021 and $20)=0 do begin
      {t:=t+1;
      if (t>200000000) then exit;}
    end;
    zapis_v_port(1016,ord(s[i]));
    i:=i+1;  t:=0;
  end;
  while (In1021 and $20)=0 do begin
    {t:=t+1;
    if (t>200000000) then exit;}
  end;
  zapis_v_port(1016,13);     
end;

procedure rc(var s:string);
var  c: char;   i,t:dword;
begin     s:='';  i:=1;  t:=0;
  repeat
    while (In1021 and 1)<>1 do begin
      {t:=t+1;
      if (t>200000000) then exit;}
    end;
    c:=chr(In1016);         
    if c=chr(13) then break;
    s[0]:=chr(i);
    s[i]:=c;
    i:=i+1;
    if (i>30) then break;
    t:=0;
  until false;
end;

var  s1,s2:string;   key,j:dword;
BEGIN   draw_window;   j:=1;
  zachvat_portov;
  open_com;
  s1:='$02M';
  while true do case k.waitforevent of
    1:draw_window;
    2:k.getkey(key);
    3:begin
      if j=1 then begin
        j:=2;
        sc(s1);
        rc(s2);
        k.writeText(5,125,0,0,s2);
      end;      
    end;
  end;   
  otdatj_porti; 
END.

При запуске этой программы и нажатии на кнопку в окне
должна появиться строка (чуть ниже в окне) -
!027017
- а это значит: устройство многоканального АЦП
подключено к ПЛ (115200) и имеет адрес 02.


Последний раз редактировалось VitZ Пн авг 26, 2013 8:06 pm, всего редактировалось 3 раза.

Вернуться к началу
 Заголовок сообщения: Re: KolibriOS на производстве
СообщениеДобавлено: Пт июн 14, 2013 2:50 pm 
Не в сети
Аватара пользователя

Зарегистрирован: Чт май 30, 2013 5:56 pm
Сообщения: 31
График будем рисовать прямоугольничками (DrawBar(x,y,width,height,color)):
каждые 3 секунды надо
посылать строковый запрос устройству i7017: <<каково напряжение на твоём нулевом входе?>>,
принимать ответ (в строку s2),
вышифровывать из s2 пришедшее число вольтов (0 .. 10В) в переменную chislo_voltov_1 (integer),
масштабировать его по оси <<- y>> на наш график (chislo_voltov_2: integer)
(при повторении этого алгоритма через следующие 3 с - надо отступить вправо на 10 пикселей).
[Снаружи - необходим реостатик, задающий напряжение - по известной схеме].
Процесс этот желательно как-то закончить при <<дохождении>>
прямоугольничками самописца до правого края окна.


Последний раз редактировалось VitZ Пн авг 26, 2013 8:03 pm, всего редактировалось 4 раза.

Вернуться к началу
 Заголовок сообщения: Re: KolibriOS на производстве
СообщениеДобавлено: Вс июн 16, 2013 10:25 am 
Не в сети
Аватара пользователя

Зарегистрирован: Чт май 30, 2013 5:56 pm
Сообщения: 31
function sch_vr:dword;
var t:dword;
begin
asm
mov eax,26
mov ebx,9
int $40
mov [t],eax
end;
sch_vr:=t;
end;

...
sch_vr_2:=sch_vr;
if (sch_vr_2 > (sch_vr_1+299)) then {прошло 3 секунды} begin sch_vr_1:=sch_vr_2; Alg1; end;
...


Последний раз редактировалось VitZ Чт июн 20, 2013 2:04 pm, всего редактировалось 1 раз.

Вернуться к началу
 Заголовок сообщения: Re: KolibriOS на производстве
СообщениеДобавлено: Вс июн 16, 2013 2:48 pm 
Не в сети
Kernel Developer
Аватара пользователя

Зарегистрирован: Пт авг 14, 2009 1:46 am
Сообщения: 1291
Кроме "прямоугольничков" график можно рисовать любыми ASCII-маркерами
Код:
☼  ►  ¤  ◄  ▲  ▼ ♥ ♦ ♣ ♠ • ○ Ж W o 

с помощью 4-й функции (ecx=0x00RRGGBB, esi = 1)


Вернуться к началу
 Заголовок сообщения: Re: KolibriOS на производстве
СообщениеДобавлено: Вс июн 16, 2013 5:32 pm 
Не в сети
Аватара пользователя

Зарегистрирован: Чт май 30, 2013 5:56 pm
Сообщения: 31
... http://www.icpdas.com/download/7000/manual.htm - страница с документацией по i7, некоторые файлы перепутаны местами ...

(В случае управления мотором ПК лишь посылает <<число_угловых_градусов_в_секунду>>,
а одно из устройств серии i7000 (контроллер) выполняет <<шимовую>>
функцию - для пущей реальности времени.
Хотя, поначалу управление техпроцессом лучше осуществлять
контроллерами, и по месту, так, чтобы крах системы был невозможен
из-за отказа сервера сбора инфы (колибри) - при отказе сервера (колибри)
потеряется только инфа (при этом управление сохранится по месту)
).

На запрос '#020' устройство i7017 ответит '>+001.23'.
(То есть на нулевом входе устройства АЦП сейчас 1,23 В и
коль оно пришло в комп - его можно как-то визуализировать на экран.)
Chislo_voltov_1:=str5_to_num(s2[3]+s2[4]+s2[5]+s2[7]+s2[8]).


Последний раз редактировалось VitZ Вс ноя 02, 2014 4:10 pm, всего редактировалось 22 раза.

Вернуться к началу
Показать сообщения за:  Поле сортировки  
Начать новую тему  Ответить на тему  [ 194 сообщения ]  На страницу Пред. 19 10 11 12 13 След.

Часовой пояс: UTC+03:00


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

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 1 гость


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

Найти:
Перейти:  
Создано на основе phpBB® Forum Software © phpBB Limited
Русская поддержка phpBB