Это старая версия документа.
Warning: "continue" targeting switch is equivalent to "break". Did you mean to use "continue 2"? in /home/users/p/prom-auto/domains/prom-auto.ru/wiki/inc/parser/handler.php on line 1458
Warning: Declaration of syntax_plugin_tablecalc::handle($match, $state, $pos, &$handler) should be compatible with DokuWiki_Syntax_Plugin::handle($match, $state, $pos, Doku_Handler $handler) in /home/users/p/prom-auto/domains/prom-auto.ru/wiki/lib/plugins/tablecalc/syntax.php on line 41
Warning: Declaration of syntax_plugin_tablecalc::render($mode, &$renderer, $data) should be compatible with DokuWiki_Syntax_Plugin::render($format, Doku_Renderer $renderer, $data) in /home/users/p/prom-auto/domains/prom-auto.ru/wiki/lib/plugins/tablecalc/syntax.php on line 72
Warning: Declaration of syntax_plugin_offline::handle($match, $state, $pos, &$handler) should be compatible with DokuWiki_Syntax_Plugin::handle($match, $state, $pos, Doku_Handler $handler) in /home/users/p/prom-auto/domains/prom-auto.ru/wiki/lib/plugins/offline/syntax.php on line 60
Warning: Declaration of syntax_plugin_offline::render($format, &$renderer, $data) should be compatible with DokuWiki_Syntax_Plugin::render($format, Doku_Renderer $renderer, $data) in /home/users/p/prom-auto/domains/prom-auto.ru/wiki/lib/plugins/offline/syntax.php on line 67
Warning: preg_match(): Compilation failed: invalid range in character class at offset 3416 in /home/users/p/prom-auto/domains/prom-auto.ru/wiki/inc/parser/lexer.php on line 118
====== Подготовка ПЛК на базе компьютера Raspberry Pi ====== Проверено на оборудовании: * Raspberry Pi 2 Model B * Raspberry Pi 3 Model B ===== комплектующие ===== * Корпус * https://tmelectronics.ru/product/IT-25.0410000.RP3/ * https://tmelectronics.ru/product/IT-25.0410000.RP4/ * Часы * поиск на ali: **''rtc ds3231 raspberry pi''** * Порт rs-232 * поиск на ali: **''max3232 rs232 db9''** (китайские провода не брать!) ===== power ===== {{:doc:jroboplc:microusb_pinout.jpg?direct&100|}} ===== sdcard ===== Скачать образ Raspbian Lite https://www.raspberrypi.org/downloads/raspbian/ df -h sudo umount /dev/sdb1 sudo umount /dev/sdb2 sudo dd bs=4M if=2016-09-23-raspbian-jessie-lite.img of=/dev/sdb conv=fsync sync ===== raspi-config ===== user: pi pass: raspberry sudo raspi-config * Change User Password / jradmin * Network Options / Hostname / jrobo * Boot Options / Wait for Network at Boot / No * Localization Options * Change Locale / Select: * en_US.UTF-8 UTF-8 (default) * ru_RU.UTF-8 UTF-8 * Change Timezone/ Asia-Barnaul * Change Keyboard Layout/ American US * Interfaciong Options * SSH / Yes * I2C / Yes * Serial - NO - login over serial disabled - Yes - serial port enabled Для дистрибутива stretch (апрель 2019) также требуется отключить блютус и поиграть с частотами в /boot/config.txt - говенное решение пользовать последовательный порт на raspberry, также последовательные порты мапятся на /dev/serial0, и /dev/serial1 - добро пожаловать к танцу с бубном Алексей, сделай своё решение, раз тебе это говенное. sudo apt-get install mc telnet sudo mcedit /etc/default/keyboard XKBLAYOUT="us" sudo mcedit /etc/ssh/sshd_config UseDNS no ===== static ip ===== ''sudo mcedit /etc/dhcpcd.conf'' interface eth0 static ip_address=192.168.2.210/24 static routers=192.168.2.1 static domain_name_servers=192.168.2.1 [[https://pi-hole.net/faq/how-do-i-set-a-static-ip-address-in-raspbian-jessie-using-etcdhcpcd-conf/|src]] <html> <!-- ===== partitions ===== Выключить rpi, извлечь карту памяти и вставить ее в свой ubuntu-комп. Используя "GParted Partition Editor" (в примере используется карта размером 16Gb): * /dev/sdb2 - resize - ~5000Mb * unallocated - new - ~10000Mb Primary Ext4, label=promauto (/dev/sdb3) Eject, вставить карту в rpi, загрузиться. --> </html> ===== serial port ===== {{:doc:jroboplc:rs232_ttl_max3232_2.jpg?200|}} {{:doc:jroboplc:rpi_pinout.jpg?200|}} Подключение адаптера RS-232 ^ Raspberry Pi ^ Адаптер ^ |4: +5V |VCC | |6: GND |GND | |8: TXD |RXD | |10: RXD |TXD | У адаптера микросхема с ножками: 11 - RX 12 - TX обычно порядок такой: VCC TXD RXD GND {{:doc:jroboplc:rpi-comport.jpg?400|}} ===== rtc ds3231 ===== {{:doc:jroboplc:ds3231_module.jpg?400|}} sudo apt-get install python-smbus i2c-tools sudo apt-get purge fake-hwclock ntp sudo apt-get install ntpdate Add at the end: sudo mcedit /boot/config.txt dtoverlay=i2c-rtc,ds3231 Add the line (above “exit 0”): sudo mcedit /etc/rc.local /sbin/hwclock -s Change: sudo mcedit /etc/init.d/hwclock.sh HWCLOCKACCESS=no reboot sudo date -s "10 OCTOBER 2016 10:00:00" sudo hwclock -w <html> <!-- ==== readonly root (optional) ==== <code bash> sudo su apt-get remove --purge triggerhappy logrotate dbus dphys-swapfile apt-get autoremove --purge apt-get install busybox-syslogd dpkg --purge rsyslog rm -rf /var/lib/dhcp/ /var/run /var/spool /var/lock /var/lib/systemd/random-seed ln -s /tmp /var/lib/dhcp; ln -s /tmp /var/run; ln -s /tmp /var/spool; ln -s /tmp /var/lock; ln -s /tmp/random-seed /var/lib/systemd/random-seed </code> ''/boot/cmdline.txt'' добавить в конец строки: noswap ro ''/etc/systemd/system/dhcpcd5'' исправить: PIDFile=/var/run/dhcpcd.pid ''/lib/systemd/system/systemd-random-seed.service'' добавить строку в секцию ''[Service]'': ExecStartPre=/bin/echo "" >/tmp/random-seed <code bash> systemctl daemon-reload insserv -r bootlogs; insserv -r console-setup mkdir /data;chmod 777 /data touch /bin/rw;echo 'mount -o remount,rw /'>/bin/rw;chmod 777 /bin/rw touch /bin/ro;echo 'mount -o remount,ro /'>/bin/ro;chmod 777 /bin/ro </code> ''fstab'': proc /proc proc defaults 0 0 /dev/mmcblk0p1 /boot vfat defaults,ro 0 2 /dev/mmcblk0p2 / ext4 defaults,noatime,nodiratime,ro 0 1 /dev/mmcblk0p3 /data ext4 defaults,noatime,nodiratime,rw 0 1 tmpfs /tmp tmpfs nosuid,nodev 0 0 tmpfs /var/log tmpfs nosuid,nodev 0 0 tmpfs /var/tmp tmpfs nosuid,nodev 0 0 reboot Для откл и вкл readonly режима соответственно: sudo rw sudo ro ==== softshut ==== Cоздать файл [[doc:jroboplc:raspberry:softshut|/home/pi/softshut/softshut.py]] ''/etc/rc.local'': <code bash> # add this line before "exit 0" python /home/pi/softshut/softshut.py & </code> Установить адаптер, как показано на картинке:\\ {{:doc:jroboplc:adapter_raspberry_install.png?direct&100|}} {{:doc:jroboplc:adapter_raspberry.png?direct&100|}} {{:doc:jroboplc:cam00680.jpg?direct&100|}} {{:doc:jroboplc:cam00681.jpg?direct&100|}} {{:doc:jroboplc:cam00682.jpg?direct&100|}} Для того, чтобы ПЛК определял, что БП работает от батареи, сигнал AC_OK блока питания заводится на вход GPIO адаптера по схеме: {{:doc:jroboplc:gpio_acok.png?direct&100|}} ===== type ups 2 ===== Вариант настройки для работы с встроенным модулем ИБП PIco HV 3.0A. ==== pico daemon ==== Исходное состояние - PIco не установлен на плату RPi. Включить I2C через raspi-config: sudo raspi-config sudo apt-get update sudo apt-get dist-upgrade sudo apt-get -y install python-rpi.gpio git python-dev python-serial python-smbus python-jinja2 python-xmltodict python-psutil python-pip sudo git clone https://github.com/modmypi/PiModules.git cd PiModules/code/python/package sudo python setup.py install cd ../upspico/picofssd sudo python setup.py install sudo systemctl enable picofssd.service Выключить pi, установить pico, включить. Управление сервисом: sudo systemctl start picofssd.service sudo systemctl stop picofssd.service ==== pico rtc ==== sudo apt-get -y install i2c-tools ''sudo mcedit /etc/modules'' i2c-bcm2708 i2c-dev rtc-ds1307 ''sudo mcedit /boot/config.txt'' дописать в конце: enable_uart=1 dtoverlay=i2c-rtc,ds1307 reboot sudo apt-get -y remove fake-hwclock && sudo update-rc.d -f fake-hwclock remove ''sudo mcedit /lib/udev/hwclock-set'' закомментировать: #if [ -e /run/systemd/system ] ; then # exit 0 #fi sudo date -s "04 MAY 2017 13:31:00" sudo hwclock -w sudo hwclock -r --> </html> ===== java ===== Скачать JDK 8 (Linux ARM v6/v7 Hard Float ABI) [[http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html|здесь]] и скопировать в ''/data''. Номер версии (101) заменить на нужный. sudo su mkdir /usr/lib/jvm mv /data/jdk-8u101-linux-arm32-vfp-hflt.tar.gz /usr/lib/jvm cd /usr/lib/jvm tar xzvf jdk-8u101-linux-arm32-vfp-hflt.tar.gz rm jdk-8u101-linux-arm32-vfp-hflt.tar.gz ln -s jdk1.8.0_101 java-8-oracle ===== temperature ===== <file bash temperature.sh> #!/bin/bash cpuTemp0=$(cat /sys/class/thermal/thermal_zone0/temp) cpuTemp1=$(($cpuTemp0/1000)) cpuTemp2=$(($cpuTemp0/100)) cpuTempM=$(($cpuTemp2 % $cpuTemp1)) echo CPU temp"="$cpuTemp1"."$cpuTempM"'C" echo GPU $(/opt/vc/bin/vcgencmd measure_temp) </file>