Форум программистов, компьютерный форум, киберфорум
Робототехника и умный дом
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.91/1619: Рейтинг темы: голосов - 1619, средняя оценка - 4.91
0 / 0 / 1
Регистрация: 22.01.2010
Сообщений: 4,000

Создаем ROBO_API

18.02.2010, 08:30. Показов 294189. Ответов 148
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Пища для размышлений:

Виртуальные машины

Понятно, что шасси и механика может быть различной, но в данном случае это уже зависит от реализации непосредственно виртуальной машины, а нам бы общую концепцию выработать. Синтаксис. Может даже свой язык. А если кто и компилятор осилит накатать ваще будет феерично.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
18.02.2010, 08:30
Ответы с готовыми решениями:

Создаем полноценный функциональный генератор
Отпуск! Время, когда можно плотно заняться тем, что тебе интересно, что давно вынашивал в планах, но по каким-то причинам не начинал...

СОЗДАЁМ САЙТ
Вообще я первый раз сел за компьютер 3 месяца назад, а мне уже 42 года. Не думал, что когда-то придётся самому делать сайт. А почему бы и...

Создаем проект
Ищу сотрудников для создания проекта по Кс Го. Попытаемся созхдать что - то вроде FGCL.ru или CSPL.ru. НА первых порах работа - за идею....

148
0 / 0 / 1
Регистрация: 22.01.2010
Сообщений: 4,000
21.02.2010, 12:11
Студворк — интернет-сервис помощи студентам
Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
#ymstude <VM.h>
 
#ymstude <VM_PROG.h>
static u08 VM_ROM[256];
static u08 VM_PC[10];
 
void VM_Forward(void)
{
LED_PORT  ^=1<<LED3;
VM_PC[0]++;
 
SetTask(VM);
}
 
void VM_Back(void)
{
LED_PORT  ^=1<<LED3;
VM_PC[0]++;
 
SetTask(VM);
}
 
void VM_Stop(void)
{
LED_PORT  ^=1<<LED3;
VM_PC[0]++;
 
SetTask(VM);
}
 
void VM_Delay(void)
{
u16 delay;
u08 *OneByte;
 
OneByte = (u08 *)&delay;
 
*OneByte = VM_PGM[++VM_PC[0]];
OneByte++;
*OneByte = VM_PGM[++VM_PC[0]];
 
VM_PC[0]++;
 
SetTimerTask(VM,delay);
}
 
void VM_OFF(void)
{
InitVM();
}
 
//VM Task Table ==========================================================
static TPTR VM_FUNC[] PROGMEM =
{
&VM_OFF,      //0
&VM_Back,      //1
&VM_Forward,      //2
&VM_Delay,      //3
&VM_Stop      //4
};
 
//VM Dyspotsher
void VM(void)    // Виртуальная машина
{
SetTask((void*)pgm_read_word_near(VM_FUNC+VM_PGM[VM_PC[0]]));
}
 
// VM initiotyzotions ====================================================
void InitVM(void)
{
u08 i;
 
for(i=0;i!=10;i++)
{
VM_PC[i]=0;
}
}
Это основной код виртуальной машины. Функция VM первоначально дергается диспетчером. Дальше ее вызывают функции VM, обеспечивая тем самым его непрерывное вращение, но пошагово. Кроме функции VM_OFF она просто обнуляет состояние VM и все, VM выключается осовобождая конвейер.
0
0 / 0 / 1
Регистрация: 22.01.2010
Сообщений: 4,000
21.02.2010, 12:14
Я пока это дело на Pinboard гонял, там отладочных средств больше. Сейчас буду ставить на колеса.
0
0 / 0 / 0
Регистрация: 15.02.2010
Сообщений: 28
22.02.2010, 01:06
SWK
> В каком смысле? И что именно не нравится?

То, что они не имеют своего пространства имен. Яркий пример - создать новый проект и попробовать объявить W: Byte где-нибудь. Были там и еще какие-то недостатки. Например, лично я привык, когда каждый модуль собирается в свой obj-файл.
0
0 / 0 / 0
Регистрация: 15.02.2010
Сообщений: 28
22.02.2010, 01:11
DY HOTT
Интересно получилось, молодец :) Жаль только что оно слишком жестко привязано к конечному устройству. Какие ты планируешь ввести команды ? Будет арифметика и пр ? Т.е. что бы код не просто заставлял машинку ехать вперед-назад, но еще и работал с ее устройствами, обрабатывая данные и на их основе принимал решения
0
0 / 0 / 0
Регистрация: 15.02.2010
Сообщений: 28
22.02.2010, 01:27
Приведу свой вариант для этой же задачи, я пока придерживаюсь первоначального плана

Значит, задача:
FORWARD
1000 ms
STOP
1000 ms
BACK
2000 ms
STOP
OFF

Синтаксис решения подобной задачи (пока что отказался от списков []):

Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
const
DEV_TRACTION_MOTOR      = $0E;
DEV_WHEEL_MOTOR         = $0D;
DEV_POWER_SYSTIM        = $08;
 
func stort main() {
SetDeviceAction(DEV_TRACTION_MOTOR, 10); // Едем вперед со скоростью 10 (характеристика ШИМ, к
// примеру)
sleep(1000);                             // Ждем секунду в текущем потоке
SetDeviceAction(DEV_TRACTION_MOTOR, 0);  // Останавливаемся
sleep(1000);                             // Ждем секунду в текущем потоке
 
SetDeviceAction(DEV_WHEEL_MOTOR, 180);   // Задаем поворотному механизму задание
// развернуться на 180 градусов
 
// Ждем, пока он это сделает (поворотный механизм снова покажет курс 0 градусов)
while (GetDeviceStatus(DEV_WHEEL_MOTOR) <> 0) do {};
 
SetDeviceAction(DEV_TRACTION_MOTOR, 10); // Едем вперед со скоростью 10 (ШИМ)
/////////////////////////////////////////////////////////////////////////////////////////////
// Или просто едем назад если позволяет двигатель, система контроля и привод
// Например, вот так
// SetDeviceAction(DEV_TRACTION_MOTOR, -10);
 
sleep(2000);                               // Ждем две секунды в текущем потоке
SetDeviceAction(DEV_TRACTION_MOTOR, 0);    // Останавливаемся
SetDeviceAction(DEV_POWER_SYSTIM, 0);      // Выключаем питание робота
}
символьный байт-код:
Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
push $0E
push $0A
call SetDeviceAction     ; SetDeviceAction(DEV_TRACTION_MOTOR, 10);
 
push $03
push $E8
call sleep               ; sleep(1000);
 
push $0E
push 0
call SetDeviceAction     ; SetDeviceAction(DEV_TRACTION_MOTOR, 0);
 
push $03
push $E8
call sleep               ; sleep(1000);
 
push $0D
push $B4
call SetDeviceAction     ; SetDeviceAction(DEV_WHEEL_MOTOR, 180);
 
@@test_again
push $0D
call GetDeviceStatus
test a                   ; while (GetDeviceStatus(DEV_WHEEL_MOTOR) <> 0) do {};
jc Z, @@test_again
 
push $0E
push $0A
call SetDeviceAction     ; SetDeviceAction(DEV_TRACTION_MOTOR, 10);
 
push $07
push $D0
call sleep               ; sleep(2000);
 
push $0E
push $00
call SetDeviceAction     ; SetDeviceAction(DEV_TRACTION_MOTOR, 0);
 
push $08
push $00
call SetDeviceAction     ; SetDeviceAction(DEV_POWER_SYSTIM, 0);
компилированный байт-код:
Code
1
28 0E 28 0A 55 00 01 28 03 28 E8 55 00 03 28 0E 28 00 55 00 01 28 03 28 E8 55 00 03 28 0D 28 B4 55 00 01 28 0D 55 00 02 BC 28 00 22 28 0E 28 0A 55 00 01 28 07 28 D0 55 00 03 28 0E 28 00 55 00 01 28 08 28 00 55 00 01
Использование памяти ROM: 0 Байт
Использование памяти ROM: 72 Байт

Так.. пока только начал рассматривать систему команд. Эта пока что не очень оптимальная, но работать должна:)

Надо бы закончить проектирование своего "pinboard" и тоже приступить к экспериментам :))
0
0 / 0 / 1
Регистрация: 22.01.2010
Сообщений: 4,000
22.02.2010, 07:55
Жетская привязка к устройству это обязательное условие. А иначе нахрена тогда вообще ВМ? Для того чтобы получить еще один (ненужный) абстрактный язык? Нет, у меня устройство цельное и ВМ это лишь для резкой компактизации управляющего алгоритма. Воможности его изменения на лету и прочие радости.
0
0 / 0 / 0
Регистрация: 15.02.2010
Сообщений: 28
23.02.2010, 11:11
Ну.. дело твое :)
Лично я всегда стараюсь создать как можно более универсальный инструмент. Да и интереснее так
0
0 / 0 / 1
Регистрация: 22.01.2010
Сообщений: 4,000
23.02.2010, 15:25
Тут ценой универсальности станет тяжеловесность и избыточность. В условиях жесткой экономии ресурсов МК это критично.
0
SWK
23.02.2010, 16:04
Цитата Сообщение от DY HOTT
Тут ценой универсальности станет тяжеловесность и избыточность. В условиях жесткой экономии ресурсов МК это критично.
Я поэтому в программе того же ходового контроллера отделил дешифрацию команд от исполнения их. Дешифратор только ставит флажки в слове состояния, и заносит параметры в соответствующие переменные, а далее уже модули управления периферией просматривают свои флаги и реализуют соответствующие действия. Например, модуль управления ШИМ отслеживает свои флаги и переменные и меняет коэффициенты ШИМ левого и правого двигателя, модуль двигателей включает, выключает и реверсирует правый и левый двигатели и отслеживает заданное время их работы (когда поставлю наконец датчики одометров - будет отслеживать путь), модуль управления АЦП замеряет напряжение батареи по запросу или по таймеру, ставит на выдачу в канал, и блокирует работу двигателей при разряде батарей. Модуль передачи следит, нет ли сообщений для передачи, при их наличии - ждет завершения приема очередной команды (если он происходит), и начинает передавать, заблокировав на время передачи приемник. Модуль приема при отсутствии своей передачи следит за приемом с канала, ожидая признака передачи команды, и принимает ее, блокируя соостветствующим флажком начало своей передачи. Закончив прием очередной команды, выставляет соответствующий флаг, сообщая об этом дешифратору команд. Модуль одометров в это время следит за пройденным каждым колесом путем, а модуль обмена с контроллером бамперов следит за появлением препятствий и сообщает о них. Модуль управления пищалки, получив свой флажок, включает звук, отсчитывает заданное время, и выключает его. Ну и так далее.
Все работает практически параллельно (время прогона главного цикла 250-260мкс).
При желании легко добавить новые команды. Например, сначала у меня повороты налево и направо реализовались вращением обоих колес в разные стороны. Ось вращения проходила посередине между колес. Позже я добавил еше по паре команд поворота в каждую сторону, реализуемые вращением только одного колеса при заторможенном другом. При этом поворот, например, налево можно реализовать вращением левого колеса назад или правого вперед. Ось вращения в этом случае проходит через неподвижное колесо, а центр робота перемещается по дуге назад или вперед одновременно с поворотом. Это дает большую подвижность при огибании препятствий. В дешифраторе добавилось 4 команды с обработчиками по 6 строк каждая, исполнительный же уровень остался без изменений.
0 / 0 / 1
Регистрация: 22.01.2010
Сообщений: 4,000
23.02.2010, 17:13
Ну у меня тоже идет наброс на конвеер, т.е. вначале дешифрация и обработка, а выполнение в порядке очереди.

У тебя же, как понимаю, как таковой программы из команд в памяти нет (пока нет?), а сами команды будут поступать извне, от стационарного компа?
0
SWK
23.02.2010, 19:40
У тебя же, как понимаю, как таковой программы из команд в памяти нет (пока нет?), а сами команды будут поступать извне, от стационарного компа?
Это у меня оставлено для центрального контроллера. Там будет и очередь команд, и раскладка заданий от компа на команды нижнего уровня, и трансляция команд нижнего уровня контроллерам напрямую. За неимением центрального, мне приходится использовать пока вместо него ходовой, подавая ему команды нижнего уровня непосредственно с виртуального пульта в компе, который создавался в основном как раз для отладочных целей. Естественно, мне пока нет смысла перегружать ходовой контроллер ненужными в дальнейшем ему функциями, а нужные ему команды он получает пока через USORT с радиоканала, потом будет по I2C, SPI, или RS485 получать их же от центрального, практически без переделки. Просто модуль связи в программе изменится. Правда, может, на первое время к нему башню подцеплю, по SPI, пока центральный не появится. Другой вариант - отлаживать контроллер поворотной платформы (башни) автономно, через свой собственный RS232, через шнурок или по тому же радиоканалу (команды разных контроллеров перекрываться не будут, 255 команд на все хватит).
Когда же будет готов центральный контроллер, там будет несколько вариантов:

1. Прямая трансляция команд нижнего уровня подчиненным контроллерам.

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

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

4. Автономное выполнение фоновых задач (дежурный режим), периодический заезд в док для зарядки аккумуляторов. При этом может убегать, чтобы не наступили, и пищать или материться в случае угрозы для него. А так же вести логи событий (отслеживать посторонние шумы, источники света, движущиеся обьекты, колебания температуры и прочее).

Вот примерно такой расклад. Пока топчусь на нижнем уровне. Думаю над башней, попутно вылизываю то, что есть. Например, сегодня переписал обмен ходового контроллера с бамперами с самопального последовательного протокола на стандартный Паскалевский SPI. Завтра распаяю шнурок для SPI и проверю, если не лень будет. Будет все нормально - возможно, весь межконтроллерный обмен переведу на SPI. Проводов будет больше, зато скорость выше, чем I2C, а устройств у меня не так много будет. Что - то не нравятся мне на I2C заморочки с ведомым. Вроде все аппаратно поддержано, а все равно надо контролировать каждый шаг. Ну его. Проще по SPI отдельной линией выбрать нужное устройство, сбросить ему в буфер что нужно, или считать из него, ведомый же будет отвлекаться только по прерыванию после каждого байта. Это мне больше нравится, да и скорость выше. Думаю между ведущим и ведомым устройствами кинуть по 2 линии (кроме стандартных SDO, SDI, SCK): 1 - аналог /SS, другая - готовность ведомого, она же - запрос от него на обслуживание, если надо. Всего получится по 5 проводов у каждого ведомого, из них 3 - (SDO, SDI, SCK) - общие для всех. Скорость 1 Мбит (максимум 4 при 16мгц, но, думаю, 1 за глаза). Для пересылки 2 байт со всеми дополнительными наворотами, задержками и проверками, думаю микросекунд 30-40 за глаза. Обкатаю завтра такой вариант на бамперах, а там видно будет.
Orrist
28.05.2010, 18:44
А зачем вы тут писали интерпретаторы под систему команд, если есть такие штуки, как CPLD? Или даже проще - можно на ББ компилировать программу на асме AVR, и заливать ее в контроллер on-the-fly?
0 / 0 / 1
Регистрация: 22.01.2010
Сообщений: 4,000
28.05.2010, 20:53
Это не совсем то. Речь идет о скрипт-коде определяющем поведение системы целиком, а не работы ее МК.
0
Абедиющий филасаф
31.08.2010, 05:37
Я, конечно, извиняюсь, но чем forth не устраивает?
SWK
31.08.2010, 09:22
Цитата Сообщение от Абедиющий филасаф
Я, конечно, извиняюсь, но чем forth не устраивает?
1. Философией FORTH. (все через задницу, что непривычно).
2. Необходимостью иметь большой стек (для PIC отпадает сразу!).
3. Когда-то пробовал, не понравился.
4. Есть более удобные языки.
Кроме того, смотри ответ постом выше. Речь не о языке программирования, а о наборе команд управления роботом.
SWK
31.08.2010, 09:36
Вот набор команд, которые я сейчас использую для отладки поворотной платформы. По мере добавления устройств и датчиков будут добавляться еще команды. Ненужные после отладки будут удаляться.
Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
 Команды поворотной платформы.
Формат: Длина - 4 байта. 1 байт - код команды. Следующие 3 - параметры команды. (Отсутствующий параметр заменяется "0").
----------------------------------------------------------------------------------------------
C ($43). - Управление камерой. 2байт:
W - вкл. Питание камеры.
O - откл.Питание камеры.
S Установить камеру в указанную позицию! (Позиция - 4 байт).
+ Подьем вверх камеры на (3 байт) шагов.
- Опустить камеру вниз на (3 байт) шагов.
Z Поиск центра положения камеры.
C Калибровка привода камеры - определение нижнего и верхнего пределов, пересчет шкалы, установка в середину определенного сектора.
 
S ($53). - Управление каналами ШИМ: 2 байт - Длит. ШИМ_1, 3 байт - Длит. ШИМ_2.
 
L ($4C). - Запрос Освещенности с TST230R.
 
O ($4F). - Запрос состояния платформы.
 
P ($50). - Поворот платформы. 2байт:
- - влево,3байт: кол.циклов
+ - вправо; 3байт: кол.циклов
S - Совместить положение с позицией на пульте.3байт: позиция.
 
R ($52). - Запись в регистры расширения вывода U3, U6, U8 (74HC595), чтение U7 (74HC165).
2байт:
3 - Пишем в U3. 3 байт - байт для записи в регистр шаговиков.
6 - Пишем в U6. 3 байт - байт для записи в регистр ключей IRF9540.
8 - Пишем в U6. 3 байт - байт для записи в регистр управления TST230R.
R - Чтение регистра U7 (74HC165).
 
T ($54). - Задать время. 2байт - кому задать время. 3байт - время в 1/1000 сек. (макс. 255мсек).
2байт:
M - время шага двигателя поворота платформы.
C - время шага двигателя подьема камеры.
 
z ($7A). - Пищим. 2байт - время в 1/100 сек. (макс. 2,55сек).
 
Платформа выдает:
-----------------
 
O ($4F). - Выдаем состояние платформы. 2 байт - SSP_1; 3 байт - SSP_2;
 
L ($4C). - Выдаем Освещенность с TST230R. 2 байт - Hi(Osw); 3 байт - Lo(Osw);
 
R ($52). - Чтение регистра U7 (74HC165). 2 байт - байт считанный из регистра;
 
Кроме того, после включения питания или сброса выдается номер версии прошивки в виде "ROBOT_SWK V 0.07".
Если кому интересно, вот мой отладочный пульт для робота. Вроде должен работать без инсталляции. За неимением (пока) в роботе центрального контроллера общаюсь с него через COM по шнурку или радиоканалу с роботом через ходовой контроллер или контроллер башни.
[200.76 Кб]
0 / 0 / 1
Регистрация: 22.01.2010
Сообщений: 4,000
31.08.2010, 13:44
Я, конечно, извиняюсь, но чем forth не устраивает?
Тем что это будет надязык, но не решающий задачи. Т.е. еще один совершенно ненужный уровень абстракции.
0
0 / 0 / 0
Регистрация: 02.02.2010
Сообщений: 1,142
31.08.2010, 17:13
С виртуальной машиной интереснее такая идея. Сама виртуальная машина укладывается в минимальной комплектации максимум в 1кб, лучше вобще в пол кб. Предоставляет практически теже функции, что и ассемблер.
А теперь самое вкусное, реализовать эту машину для N платформ, и для пиков и для авр и для еще чего-нибудь.
Плюс, еще одна очень интересная возможность - загружать программу с внешней памяти, eeprom или ftosh.
Тогда можно в 1кб микроконтроллер "запихнуть" хоть мегабайт программы.
В итоге этакая однозадачная микро операционная система ну, или аналог Java VM, кому как удобнее.
А потом, на основе ассебмлера этой виртуальной машины сделать бекеннд для gcc или sdcc, и писать практически платформонезависимый код(хотя с gcc у меня с avr на msp430 и так практически без изменений все портируется).
Эх, мечты, фантазии:)
0
0 / 0 / 0
Регистрация: 22.01.2010
Сообщений: 1,230
31.08.2010, 19:08
yv_s, тут не такого типа интерпретатор придумывают. Я бы по сути применил какой-нибудь текстовый формат типа plt, у нас им пользуется фрезерный станок Multicam 5000. Собственно там формат простейший и как-раз подходит для роботов.
0
SWK
31.08.2010, 23:29
Цитата Сообщение от yv_s
А теперь самое вкусное, реализовать эту машину для N платформ, и для пиков и для авр и для еще чего-нибудь. Эх, мечты, фантазии:)
Действительно, фантазии. FORTH - стековая машина! Все в нем делается через стек. Базовые операции - положить на верх стека, снять со стека, поменять местами последнее значение стека с предпоследним. Все остальное строится на этом. Нужен огромный стек, и команды для работы с ним. В контроллерах PIC младшего и среднего семейств глубина стека - 8 вложений, и используется только для хранения адресов возврата. Положить что-либо в стек у PIC невозможно! (нет команд для этого). И вообще FORTH - штука весьма неуклюжая даже на настольных компьютерах. Форт пишется на форте. На основе операций нижнего уровня строятся операции более высокого уровня, и так далее. Городить всю эту лестницу, гоняя стек - да ну его нафиг... Я и на Паскале сделаю все, что мне надо, не шибко напрягаясь. Кроме того, любой интерпретатор всегда уступает в скорости и обьемах кода нормальным компиляторам. Форт был хорош, когда работали на уровне ассемблера, а программы были несколько килобайт. Иногда даже размер кода получался короче ассемблерного, но это только при небольшом наборе простых команд. Зато сколько с ним мороки, с его вывернутой наизнанку логикой... Я его пробовал, и мне он не нужен. (Были у меня версии под RK86, Корвет, IBM PC).
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
31.08.2010, 23:29

Создаём сеть
Доброго времени суток. Строим сеть общего пользования масштаба города с доступом пользователей по вафле и паре логин/пароль на 16к - 65к...

Создаем TimeMsgDlg!
Идея такова: Создать MessageDialog который появляется на указанное время и исчезает, не требуя от пользователя никакой активности + не...

создаём статейки
Вопрос следующий: Допустим мне хочется создать сайт, в котором одна из вкладок направляет посетителя на страничку со статьями(допустим...

Создаём игру
Ищу человека с которым мож было создать не маленькую игру, кому помочь???

Создаём игру!
Здравствуйте! Производим набор программистов желающих поучаствовать в создании игры на добровольных началах!


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
80
Ответ Создать тему
Новые блоги и статьи
Калькулятор для расчета родства
russiannick 07.08.2026
1. Задача: Создать калькулятор для расчета родства. Родственных связей существует 8 ступеней, такие как: p - отец P - мать q - муж Q - жена b - брат B - сестра s - сын S - дочь
Мир по моей воле
kumehtar 07.08.2026
Когда-то кажется, что всё просто. Ты весь такой светлый. Причиняешь добро. Борешься за справедливость в этом тёмном мире. Потом начинаешь замечать одну неприятную вещь. Почти каждый хороший. . .
Кредитный калькулятор
Maks 05.08.2026
Решение задачи по прикладной информатике средствами 1С. Задача: Напишите приложение-калькулятор, которое помогает рассчитывать параметры кредита для аннуитетного и дифференцированного видов. . .
У нас сейчас поговорку "Опять 25" нужно переделать на "Опять +35".
kumehtar 04.08.2026
С ностальгией вспоминаю времена моего детства, когда у нас и правда +25 - была максимальная температура летом. Раньше +25 °C реально казались вершиной жары, когда можно было весь день пропадать на. . .
Как ИИ начал спорить и врать (возможно почуяв опасность для себя от индустрии - уход от электроники).
Hrethgir 04.08.2026
Недельный диалог, на фоне событий с НПЗ. Да, из спирта можно получать бензин, и это не сложно. Но потом в схеме я решил избавиться от насоса, при этом полностью сделав контроль подачи спирта в. . .
Термопринтер QR701
Argus19 03.08.2026
Термопринтер QR701 Купил два термопринтера QR701. На сэлф-тесте написано: Language: PC936 (GB18030). Что означает, что принтеры могут печатать только латиницу и китайские иероглифы. Так же. . .
Создание формы заимствованного документа
Maks 03.08.2026
Задача: Необходимо создать собственную форму заимствованного документа. На форме должен быть реквизит "Покупатель", а также табличная часть со следующими реквизитами: - Расчетный счет покупателя. . .
Задача предоставления скидок покупателям
Maks 03.08.2026
Задача: В документе "Продажи" необходимо реализовать функционал предоставления скидок покупателям. Скидка должна автоматически рассчитываться и подставляться в соответствующее поле при выборе. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru