PCCar.ru - Ваш автомобильный компьютер

PCCar.ru - Ваш автомобильный компьютер (http://pccar.ru/index.php)
-   Мегастройки (http://pccar.ru/forumdisplay.php?f=99)
-   -   MAZDA3 pccar (http://pccar.ru/showthread.php?t=26753)

НСО154 20.01.2019 22:25

Лучше бы кусок кода скинул, как там это все определяется.
Какой толк рассуждать теоретически.
Теоретически да, можно, а на практике проще купить путевой хаб.

YAM1966 20.01.2019 22:33

И действительно, зачем мозг напрягать...

sheyker 21.01.2019 02:04

спасибо за ответы!
ситуация такая, например возьмем гироскоп, он с достаточно бешеной скоростью шлет данные для плавного вращения изображения, также шлются данные оборотов и скорости, и если представить скетч ардуино, и при тестировании все было на одной меге, то получаем следующее

ypr 173.2 012.3 013.2
dav 8 .3
ypr 172.3 012.6 013.1
ypr 170.2 013.2 014.6
dav 8 .3
clim22.0 4 2 3 4 0 1
**** -345.0 0.00 0.0 0000
door 0 0 0 1 0
light 0 0 1 0 1
light1 off
door 0 0 0 0 0
**** -345.0 0.00 0.0 0000
light1 on
light 0 0 0 0 1
ypr 176.2 011.1 022.1

тут видим что ардуино достаточно не многозадачная и если во время приема мы посылали туда много данных,
то между строками ypr (гироскоп) появляется промежуток, тоесть ткнули многораз в тач много чего переключили и получаем баг, стрелка (имадж) дернулась

и в дельфи получаем стоп - Out of bounds..

далее понижал скорость передачи данных, не особо спасло, т.к. все стало не адекватно, потом стеклоподьемники - ардуина в двери 16 проводков,
пневмоподвеска и датчики высоты - в багажнике, климат и свет отдельная ардуина, движок и кан шина, отдельная ардуина, гироскоп - еще одна, и ще под капотом - читает аналоговые датчики датчик темп, турбины, охл жидкости и тд.. только так это адекватно заработало, ну и с проводами если все в одно место свести то нереально подсоединить

sheyker 21.01.2019 02:13

procedure TMainForm.FormCreate(Sender: TObject);
var
height: Integer;
begin

Form8.Show;
//Form16.Show;

height := Screen.WorkAreaHeight;
height := height div 3 - 90;
MainForm.Show;
MainForm.height := height;
MainForm.SetFocus;


ComPort1.Port :='\\.\Com4'; //климат
ComPort1.BaudRate :=(br9600);
ComPort1.Open;
if ComPort1.Open then
begin
Memo1.Lines.Add('Connected'); //высвечиваем на 3 сек
PlaySound('C:\вав\приветствие полное.wav', 0, SND_ASYNC);
Form9.Show;
Form2.Show;

ComPort2.Port := '\\.\Com3'; //гироскоп
ComPort2.BaudRate := (br115200);
ComPort2.Open;
ComPort3.Port :='\\.\Com5'; //окна
ComPort3.BaudRate :=(br9600);
ComPort3.Open;
ComPort4.Port :='\\.\Com6'; //двигатель
ComPort4.BaudRate :=(br115200);
ComPort4.Open;
ComPort5.Port :='\\.\Com7'; //пневма
ComPort5.BaudRate :=(br115200);
ComPort5.Open;

end;

если проверять каждую, да можно заставить ее посылать какойто идентификатор и програмно прописать если пришло например 5 то стань ComPort5, а как быть с button например ComPort1.WriteStr('A');
и в каждой кнопке и тд придется кучу условий прописывать и фиг че найдешь..

или с этим как их читать.. они же жестко прописаны..

ComPort2.ReadStr(S, Count);

вот и загвоздка, пока придумал решение ардуино нано к которой подпаяно допустим семь ключей и при запуске она ждет чуток потом по очереди врубает питание ардуино 1 ардуино 2.. пояляются сом1 сом2..
но если режим возвращения из сна то прога встает при перетыкании юсбишников

sheyker 21.01.2019 02:21

/ --------- КОМПОРТ Com6 115200 CAN -------------

procedure TMainForm.ComPort4RxChar(Sender: TObject; Count: Integer);
// компорт 6, кан шина
var
S: String;
sl1: TStringList;
L1 : boolean;
begin
S := '';
ComPort4.ReadStr(S, Count); // S := S + #13;
sl1 := TStringList.Create;

// --------- ОТКРЫТИЕ ДВЕРЕЙ, БАГАЖНИКА -------------
if (Pos('door', S) <> 0) then // условие срабатывает на door > 0 // 0 0 0 0 // 0 1 0 0
begin
Delete(S, 1, 4);
sl1.Delimiter := ' ';
sl1.DelimitedText := S;


if (sl1[0] = '0') and not (Image39.Visible) then // передняя левая
begin
Image39.Visible := False;
PlaySound('C:\вав\звук вызова.wav', 0, SND_ASYNC);
end
else
begin
Image39.Visible := true;
PlaySound('C:\вав\климат\открыта левая дверь.wav', 0, SND_ASYNC);
end;

if (sl1[1] = '0') and not (Image22.Visible) then // передняя правая
begin
Image22.Visible := False;
PlaySound('C:\вав\звук вызова.wav', 0, SND_ASYNC);
end
else
begin
Image22.Visible := true;
PlaySound('C:\вав\климат\открыта правая дверь.wav', 0, SND_ASYNC);
end;
if (sl1[2] = '0') and not(Image73.Visible)then // Left Front
begin
Image73.Visible := False;
PlaySound('C:\вав\звук вызова.wav', 0, SND_ASYNC);
end
else
begin
Image73.Visible := true;
PlaySound('C:\вав\климат\открыта левая дверь.wav', 0, SND_ASYNC);
end;

if (sl1[3] = '0') and not (Image24.Visible) then // Left Front
begin
Image24.Visible := False;
PlaySound('C:\вав\звук вызова.wav', 0, SND_ASYNC);
end
else
begin
Image24.Visible := true;
PlaySound('C:\вав\климат\открыта правая дверь.wav', 0, SND_ASYNC);
end;

sl1.Free;
end
// --------- Бортовой компьютер -------------
else if (Pos('curr', S) <> 0) then...

вот например получаем данные с большой скоростью но если ардуино в этот же ком порт кричит еще много данных то неизбежно прога встает out of bounds... и вращения стрелок подтормаживают, в режиме отладки видно что в лэйбл где жестко прописано условие, попали другие данные, когда разделил задачи между ардуинами, все стало гуд и без сбоев, но вылезла проблема с хаотичным присвоением компортов при запуске win

НСО154 21.01.2019 21:38

Цитата:

Сообщение от YAM1966 (Сообщение 408081)
И действительно, зачем мозг напрягать...

Это как раз тот случай, когда думать головой-вытекает в крупные неприятности и проблемы:)
Как бы проблема не та, за которую стоит так напрягаться, за неё уже сложили мозг производители качественных хабов.

awtoap 21.01.2019 21:43

Делай все через один компорт...во первых проще и надежней. Если сыпет много данных, до сделай фифо буфер для команд на базе того же TStringList. Причем некоторые старые данные в списке обновляй, так как нужны только последние значения(например обороты двигла, состояние дверей и тд), а некоторые просто добавляй, которые обновляются редко. В список команды добавляй в функции приема с компорта, а чтение команды из списка,удаление ее и реакцию на нее(отображение) осуществляй либо по таймеру (например с интревалом 50мс) либо перекрой функцию Application.Idle, если память не подводит. Или в отдельном потоке TThread.

sheyker 26.01.2019 03:00

да наверно надо все в один stringlist сыпать,
но попробую сначала этой штуковиной, может проблема в том что было 2 хаба по 4, может решиться..

https://a.radikal.ru/a31/1901/f6/d7e0ed918bd5.jpg

sheyker 26.01.2019 03:10

чето смотрю я на концепты.. отстаем..

https://a.radikal.ru/a15/1901/09/7be126b5e86a.jpg

https://d.radikal.ru/d01/1901/48/791a4347a6a7.jpg

https://d.radikal.ru/d02/1901/9b/389d3225d902.jpg

https://c.radikal.ru/c34/1901/01/ab55d1f83897.jpg

надо попробовать..

https://b.radikal.ru/b20/1901/e0/e2a7f7bc48a4.jpg

https://a.radikal.ru/a13/1901/ff/80d7b2c9776f.jpg

https://d.radikal.ru/d30/1901/07/a731b4ecd8cb.jpg

https://d.radikal.ru/d24/1901/b4/033c19d8eea5.jpg

https://d.radikal.ru/d08/1901/07/672dcc7736fd.jpg

для этого понадобится 2 матрицы типа LTA149B780F

https://a.radikal.ru/a14/1901/38/0cec4fc590c1.jpg

ну и видюха на 4 канала

https://c.radikal.ru/c06/1901/b6/137f5751e95f.jpg

https://c.radikal.ru/c08/1901/d5/a06a33e07668.jpg

sirota 26.01.2019 13:29

БОМБА!


Часовой пояс GMT +4, время: 02:57.

Работает на vBulletin® версия 3.8.4.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot