20.01.2019, 22:25 | #381 |
Старший Пользователь
Регистрация: 01.01.2014
Возраст: 38
Город: Новосибирск
Регион: 54
Машина: РРС, Форд
Сообщений: 954
|
Лучше бы кусок кода скинул, как там это все определяется.
Какой толк рассуждать теоретически. Теоретически да, можно, а на практике проще купить путевой хаб.
__________________
Тесла по-русски |
20.01.2019, 22:33 | #382 |
Гуру
Регистрация: 01.06.2013
Возраст: 58
Регион: Украина
Машина: Toyota Fortuner 4.0 / Chevrolet Bolt EV
Сообщений: 2,006
|
И действительно, зачем мозг напрягать...
|
21.01.2019, 02:04 | #383 |
Старший Пользователь
Регистрация: 08.02.2006
Возраст: 39
Город: Москва
Регион: 77, 97, 99, 177
Машина: mazda3
Сообщений: 309
|
спасибо за ответы!
ситуация такая, например возьмем гироскоп, он с достаточно бешеной скоростью шлет данные для плавного вращения изображения, также шлются данные оборотов и скорости, и если представить скетч ардуино, и при тестировании все было на одной меге, то получаем следующее 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 проводков, пневмоподвеска и датчики высоты - в багажнике, климат и свет отдельная ардуина, движок и кан шина, отдельная ардуина, гироскоп - еще одна, и ще под капотом - читает аналоговые датчики датчик темп, турбины, охл жидкости и тд.. только так это адекватно заработало, ну и с проводами если все в одно место свести то нереально подсоединить |
21.01.2019, 02:13 | #384 |
Старший Пользователь
Регистрация: 08.02.2006
Возраст: 39
Город: Москва
Регион: 77, 97, 99, 177
Машина: mazda3
Сообщений: 309
|
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.. но если режим возвращения из сна то прога встает при перетыкании юсбишников |
21.01.2019, 02:21 | #385 |
Старший Пользователь
Регистрация: 08.02.2006
Возраст: 39
Город: Москва
Регион: 77, 97, 99, 177
Машина: mazda3
Сообщений: 309
|
/ --------- КОМПОРТ 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 |
21.01.2019, 21:38 | #386 |
Старший Пользователь
Регистрация: 01.01.2014
Возраст: 38
Город: Новосибирск
Регион: 54
Машина: РРС, Форд
Сообщений: 954
|
Это как раз тот случай, когда думать головой-вытекает в крупные неприятности и проблемы
Как бы проблема не та, за которую стоит так напрягаться, за неё уже сложили мозг производители качественных хабов.
__________________
Тесла по-русски |
21.01.2019, 21:43 | #387 |
Гуру
Регистрация: 19.09.2009
Возраст: 46
Город: Мелитополь
Регион: Украина
Сообщений: 2,022
|
Делай все через один компорт...во первых проще и надежней. Если сыпет много данных, до сделай фифо буфер для команд на базе того же TStringList. Причем некоторые старые данные в списке обновляй, так как нужны только последние значения(например обороты двигла, состояние дверей и тд), а некоторые просто добавляй, которые обновляются редко. В список команды добавляй в функции приема с компорта, а чтение команды из списка,удаление ее и реакцию на нее(отображение) осуществляй либо по таймеру (например с интревалом 50мс) либо перекрой функцию Application.Idle, если память не подводит. Или в отдельном потоке TThread.
|
26.01.2019, 03:00 | #388 |
Старший Пользователь
Регистрация: 08.02.2006
Возраст: 39
Город: Москва
Регион: 77, 97, 99, 177
Машина: mazda3
Сообщений: 309
|
да наверно надо все в один stringlist сыпать,
но попробую сначала этой штуковиной, может проблема в том что было 2 хаба по 4, может решиться.. |
26.01.2019, 03:10 | #389 |
Старший Пользователь
Регистрация: 08.02.2006
Возраст: 39
Город: Москва
Регион: 77, 97, 99, 177
Машина: mazda3
Сообщений: 309
|
чето смотрю я на концепты.. отстаем..
надо попробовать.. для этого понадобится 2 матрицы типа LTA149B780F ну и видюха на 4 канала |
26.01.2019, 13:29 | #390 |
Бывалый писикарщик
Регистрация: 27.09.2008
Город: Собянинск
Регион: 77, 97, 99, 177
Машина: шкода а5
Сообщений: 5,443
|
БОМБА!
__________________
То win 10х64, то win 8.1x64 Видео регистрация на web. камеру:http://www.youtube.com/watch?v=1hPPLRBBIqc |
Метки |
mazda 3, mazda3, мазда 3 |
Здесь присутствуют: 3 (пользователей: 0 , гостей: 3) | |
|
|