Управление из LinuxCNC через COM-порт (РЕШЕНО)

Обсуждение установки, настройки и использования LinuxCNC. Вопросы по Gкоду.
Аватара пользователя
Ворон226
Мастер
Сообщения: 1922
Зарегистрирован: 01 окт 2012, 18:14
Репутация: 181
Откуда: Солнечногорск Московской обл. - Борки Конаковского р-на - Скоморохово Фировского р-на
Контактная информация:

Re: Управление из LinuxCNC через COM-порт (РЕШЕНО)

Сообщение Ворон226 »

Вот так получилось, но не уверен... На питоне без linuxCNC не проверить...

Код: Выделить всё

!/usr/bin/python
import hal
import serial
import time
ser = serial.Serial(port='/dev/ttyS0', baudrate=19200, parity=serial.PARITY_ODD, stopbits=serial.STOPBITS_ONE, bytesize=serial.EIGHTBITS, timeout=1)
h=hal.component("comformin")
h.newpin("out1", hal.HAL_BIT, hal.HAL_OUT)
h.newpin("out2", hal.HAL_BIT, hal.HAL_OUT)
h.newpin("out3", hal.HAL_BIT, hal.HAL_OUT)
h.newpin("out4", hal.HAL_BIT, hal.HAL_OUT)
h.newpin("out5", hal.HAL_BIT, hal.HAL_OUT)
h.newpin("out6", hal.HAL_BIT, hal.HAL_OUT)
h.newpin("out7", hal.HAL_BIT, hal.HAL_OUT)
h.newpin("out8", hal.HAL_BIT, hal.HAL_OUT)
h.newpin("in", hal.HAL_INT, hal.HAL_IN)
h.ready()
try:
	while 1:
		ser.read(chr(v))
		h['in'] = v
		v = int(v)
		out1 = v & 1
		out2 = v & 2
		out3 = v & 4
		out4 = v & 8
		out5 = v & 16
		out6 = v & 32
		out7 = v & 64
		out8 = v & 128
		time.sleep(0.01)
except KeyboardInterrupt:
	raise SystemExit
Проверю опять только завтра...
Хочешь быть счастливым? Будь им!
Аватара пользователя
Ворон226
Мастер
Сообщения: 1922
Зарегистрирован: 01 окт 2012, 18:14
Репутация: 181
Откуда: Солнечногорск Московской обл. - Борки Конаковского р-на - Скоморохово Фировского р-на
Контактная информация:

Re: Управление из LinuxCNC через COM-порт (РЕШЕНО)

Сообщение Ворон226 »

На новой материнке с Debian на COM-порту ttyS0 идёт постоянный опрос (даже без запуска программы).
Как узнать кто пытается работать с этим портом?
Как запретить ему работать с портом?
Хочешь быть счастливым? Будь им!
Аватара пользователя
Ворон226
Мастер
Сообщения: 1922
Зарегистрирован: 01 окт 2012, 18:14
Репутация: 181
Откуда: Солнечногорск Московской обл. - Борки Конаковского р-на - Скоморохово Фировского р-на
Контактная информация:

Re: Управление из LinuxCNC через COM-порт (РЕШЕНО)

Сообщение Ворон226 »

При подаче команды в терминале:
lsof | grep /dev/ttyS
Вижу только программу на питоне, которая передаёт состояние выходов. Отключаю свою программу - по команде не показывает никаких других программ, использующих этот порт. Но порт продолжает щёлкать с периодичностью 10 секунд - по 5 раз
Хочешь быть счастливым? Будь им!
Аватара пользователя
Ворон226
Мастер
Сообщения: 1922
Зарегистрирован: 01 окт 2012, 18:14
Репутация: 181
Откуда: Солнечногорск Московской обл. - Борки Конаковского р-на - Скоморохово Фировского р-на
Контактная информация:

Re: Управление из LinuxCNC через COM-порт (РЕШЕНО)

Сообщение Ворон226 »

Плата PLA-001 (реле 8 штук на COM-порте) и плата PLA-002 (8 датчиков на COM-порте) не хотят работать... Плата реле периодически щёлкает всеми реле в хаотичном порядке, но выставляет передаваемую комбинацию. Плата датчиков просто часто моргает всеми светодиодами...
Хочешь быть счастливым? Будь им!
Kost_irk
Мастер
Сообщения: 995
Зарегистрирован: 19 июл 2018, 07:46
Репутация: 193
Откуда: Иркутск
Контактная информация:

Re: Управление из LinuxCNC через COM-порт (РЕШЕНО)

Сообщение Kost_irk »

попробуй sudo setserial /dev/ttyS0 uart none
это система там что-то хочет, где-то чинится, не помню
Аватара пользователя
Ворон226
Мастер
Сообщения: 1922
Зарегистрирован: 01 окт 2012, 18:14
Репутация: 181
Откуда: Солнечногорск Московской обл. - Борки Конаковского р-на - Скоморохово Фировского р-на
Контактная информация:

Re: Управление из LinuxCNC через COM-порт (РЕШЕНО)

Сообщение Ворон226 »

Kost_irk писал(а): 09 дек 2021, 18:35 попробуй sudo setserial /dev/ttyS0 uart none
это система там что-то хочет, где-то чинится, не помню
sudo: setserial: command not found
Хочешь быть счастливым? Будь им!
Аватара пользователя
Ворон226
Мастер
Сообщения: 1922
Зарегистрирован: 01 окт 2012, 18:14
Репутация: 181
Откуда: Солнечногорск Московской обл. - Борки Конаковского р-на - Скоморохово Фировского р-на
Контактная информация:

Re: Управление из LinuxCNC через COM-порт (РЕШЕНО)

Сообщение Ворон226 »

Кстати, установил CuteCom и через него установил параметры порта такие же как и в программе.
Потому код на плату реле передаётся правильно, но каждые 10 секунд реле начинают щёлкать...
Хочешь быть счастливым? Будь им!
Kost_irk
Мастер
Сообщения: 995
Зарегистрирован: 19 июл 2018, 07:46
Репутация: 193
Откуда: Иркутск
Контактная информация:

Re: Управление из LinuxCNC через COM-порт (РЕШЕНО)

Сообщение Kost_irk »

ну дык поставь если нету
sudo apt install setserial
Аватара пользователя
Ворон226
Мастер
Сообщения: 1922
Зарегистрирован: 01 окт 2012, 18:14
Репутация: 181
Откуда: Солнечногорск Московской обл. - Борки Конаковского р-на - Скоморохово Фировского р-на
Контактная информация:

Re: Управление из LinuxCNC через COM-порт (РЕШЕНО)

Сообщение Ворон226 »

Kost_irk писал(а): 09 дек 2021, 18:42 ну дык поставь если нету
sudo apt install setserial
После введённой команды реле перестали щёлкать...
Но и программа на питоне не может включиться)
Хочешь быть счастливым? Будь им!
Kost_irk
Мастер
Сообщения: 995
Зарегистрирован: 19 июл 2018, 07:46
Репутация: 193
Откуда: Иркутск
Контактная информация:

Re: Управление из LinuxCNC через COM-порт (РЕШЕНО)

Сообщение Kost_irk »

Ну если что, эффект сохраняется до перезагрузки. Значит система перестала его хотеть, а то там с питоном, это я хз.
Аватара пользователя
Ворон226
Мастер
Сообщения: 1922
Зарегистрирован: 01 окт 2012, 18:14
Репутация: 181
Откуда: Солнечногорск Московской обл. - Борки Конаковского р-на - Скоморохово Фировского р-на
Контактная информация:

Re: Управление из LinuxCNC через COM-порт (РЕШЕНО)

Сообщение Ворон226 »

Kost_irk писал(а): 09 дек 2021, 18:54 Ну если что, эффект сохраняется до перезагрузки. Значит система перестала его хотеть, а то там с питоном, это я хз.
Предложенная тобой команда запретила использовать этот порт - он и замолчал)))
Перегружусь...
Хочешь быть счастливым? Будь им!
Аватара пользователя
Ворон226
Мастер
Сообщения: 1922
Зарегистрирован: 01 окт 2012, 18:14
Репутация: 181
Откуда: Солнечногорск Московской обл. - Борки Конаковского р-на - Скоморохово Фировского р-на
Контактная информация:

Re: Управление из LinuxCNC через COM-порт (РЕШЕНО)

Сообщение Ворон226 »

Перегрузился. Реле опять защёлками с периодичностью в 10 секунд. А на фоне этого щёлканья я устанавливаю выходное состояние реле...
Хочешь быть счастливым? Будь им!
alex_sar
Мастер
Сообщения: 1672
Зарегистрирован: 28 авг 2018, 17:13
Репутация: 278
Настоящее имя: Алексей
Контактная информация:

Re: Управление из LinuxCNC через COM-порт (РЕШЕНО)

Сообщение alex_sar »

Kost_irk писал(а): 09 дек 2021, 18:35 попробуй sudo setserial /dev/ttyS0 uart none
это система там что-то хочет, где-то чинится, не помню
известно что хочет. древние юникса через серийный порт управлялись запросто - то есть там такое же приглашение логина может быть как и на обычном мониторе.

в freebsd процесс назывался getty / xgetty и где-то там настраивались порты. в линуксе не знаю...
Аватара пользователя
Ворон226
Мастер
Сообщения: 1922
Зарегистрирован: 01 окт 2012, 18:14
Репутация: 181
Откуда: Солнечногорск Московской обл. - Борки Конаковского р-на - Скоморохово Фировского р-на
Контактная информация:

Re: Управление из LinuxCNC через COM-порт (РЕШЕНО)

Сообщение Ворон226 »

Установил программы CuteCom и minicom. В обоих выставил параметры порта: скорость обмена 19200
Но при команде в терминале:
sudo dmesg | grep ttyS
[ 2.074577] 00:02: ttyS0 at I/O 0x3f8 (irq = 4, base_baud = 115200) is a 16550A
[ 2.095614] 00:03: ttyS1 at I/O 0x2f8 (irq = 3, base_baud = 115200) is a 16550A
Т.е. у порта скорость осталась 115200??? Почему?

Также:

setserial /dev/ttyS0 -a
/dev/ttyS0, Line 0, UART: 16550A, Port: 0x03f8, IRQ: 4
Baud_base: 115200, close_delay: 50, divisor: 0
closing_wait: 3000
Flags: spd_normal skip_test
Хочешь быть счастливым? Будь им!
Аватара пользователя
Сергей Саныч
Мастер
Сообщения: 9116
Зарегистрирован: 30 май 2012, 14:20
Репутация: 2857
Откуда: Тюмень
Контактная информация:

Re: Управление из LinuxCNC через COM-порт (РЕШЕНО)

Сообщение Сергей Саныч »

Посмотри осциллографом, что творится на выходах порта.
Чудес не бывает. Бывают фокусы.
Аватара пользователя
Ворон226
Мастер
Сообщения: 1922
Зарегистрирован: 01 окт 2012, 18:14
Репутация: 181
Откуда: Солнечногорск Московской обл. - Борки Конаковского р-на - Скоморохово Фировского р-на
Контактная информация:

Re: Управление из LinuxCNC через COM-порт (РЕШЕНО)

Сообщение Ворон226 »

Сергей Саныч писал(а): 09 дек 2021, 19:26 Посмотри осциллографом, что творится на выходах порта.
На TxD периодически проскакивают импульсы.
На RxD - тишина
Хочешь быть счастливым? Будь им!
Аватара пользователя
Ворон226
Мастер
Сообщения: 1922
Зарегистрирован: 01 окт 2012, 18:14
Репутация: 181
Откуда: Солнечногорск Московской обл. - Борки Конаковского р-на - Скоморохово Фировского р-на
Контактная информация:

Re: Управление из LinuxCNC через COM-порт (РЕШЕНО)

Сообщение Ворон226 »

stty -F /dev/ttyS0 19200

и тут же

sudo dmesg | grep ttyS
[ 2.074577] 00:02: ttyS0 at I/O 0x3f8 (irq = 4, base_baud = 115200) is a 16550A
[ 2.095614] 00:03: ttyS1 at I/O 0x2f8 (irq = 3, base_baud = 115200) is a 16550A
Хочешь быть счастливым? Будь им!
Аватара пользователя
Ворон226
Мастер
Сообщения: 1922
Зарегистрирован: 01 окт 2012, 18:14
Репутация: 181
Откуда: Солнечногорск Московской обл. - Борки Конаковского р-на - Скоморохово Фировского р-на
Контактная информация:

Re: Управление из LinuxCNC через COM-порт (РЕШЕНО)

Сообщение Ворон226 »

Через stty установил параметры COM-порта:

stty 19200 -cstopb -echo cs8 parenb parodd -F /dev/ttyS0

что означает
19200 - скорость обмена
-cstopb - выключить два стопбита (значит один по умолчанию)
-echo - выключить повторение полученных символов обратно отправителю
cs8 - включить (установить) число бит данных соответственно в 8
parenb - включить проверку четности
parodd - включить проверку на нечетность

Теперь при команде:

stty -a -F /dev/ttyS0
speed 19200 baud; rows 0; columns 0; line = 0;
intr = ^C; quit = ^\; erase = ^?; kill = ^U; eof = ^D; eol = <undef>; eol2 = <undef>; swtch = <undef>;
start = ^Q; stop = ^S; susp = ^Z; rprnt = ^R; werase = ^W; lnext = ^V; discard = ^O;
min = 0; time = 0;
parenb parodd -cmspar cs8 hupcl -cstopb cread clocal -crtscts
-ignbrk -brkint -ignpar -parmrk -inpck -istrip -inlcr -igncr -icrnl -ixon -ixoff -iuclc -ixany
-imaxbel -iutf8
-opost -olcuc -ocrnl -onlcr -onocr -onlret -ofill -ofdel nl0 cr0 tab0 bs0 vt0 ff0
-isig -icanon -iexten -echo -echoe -echok -echonl -noflsh -xcase -tostop -echoprt -echoctl -echoke
-flusho -extproc

Но это не решило проблемы щёлканья реле на плате PLA001

Я изменяю состояние реле, но это состояние периодически перебивается щёлканьем... И опять встаёт в нужное (заданное) состояние...
Хочешь быть счастливым? Будь им!
Kost_irk
Мастер
Сообщения: 995
Зарегистрирован: 19 июл 2018, 07:46
Репутация: 193
Откуда: Иркутск
Контактная информация:

Re: Управление из LinuxCNC через COM-порт (РЕШЕНО)

Сообщение Kost_irk »

alex_sar писал(а): известно что хочет. древние юникса через серийный порт управлялись запросто - то есть там такое же приглашение логина может быть как и на обычном мониторе.
Да я как бы в курсе, и посейчас всякие девайсы имеют железный терминал. Только это не объясняет, почему туда периодически данные валятся. Если бы это было приглашение, оно бы выпало и все. Есть предположение, что система там модем ищет.
Посмотрел про setserial, как раз этой командой я отцеплял порт от системных хотелок и он тогда прекрасно открывался в linuxcnc, но там свой драйвер похоже, системный не используется.
http://linuxcnc.org/docs/html/man/man9/serport.9.html
Если нет нормального осциллографа с записью, может подцепить туда другой ком-порт, хоть посмотреть, что конкретно с него вываливается.
Kost_irk
Мастер
Сообщения: 995
Зарегистрирован: 19 июл 2018, 07:46
Репутация: 193
Откуда: Иркутск
Контактная информация:

Re: Управление из LinuxCNC через COM-порт (РЕШЕНО)

Сообщение Kost_irk »

А вообще я в пихоне не спец, но вы похоже используете это:
https://pyserial.readthedocs.io/en/late ... l_api.html
Может стоит открывать порт с опцией exclusive, чтобы пока ваша программа работает, туда никто не нагадил.
Ответить

Вернуться в «LinuxCNC»