А hex() это разве не преобразование 16-ричного числа в строке в целое?nkp писал(а):в питоне в кавычках - строка...
Управление из LinuxCNC через COM-порт (РЕШЕНО)
- Сергей Саныч
- Мастер
- Сообщения: 9116
- Зарегистрирован: 30 май 2012, 14:20
- Репутация: 2857
- Откуда: Тюмень
- Контактная информация:
Re: Управление из LinuxCNC через COM-порт
Последний раз редактировалось Сергей Саныч 19 май 2013, 20:21, всего редактировалось 1 раз.
Чудес не бывает. Бывают фокусы.
-
- Мастер
- Сообщения: 8340
- Зарегистрирован: 28 ноя 2011, 00:25
- Репутация: 1589
- Контактная информация:
Re: Управление из LinuxCNC через COM-порт
у меня заработало!!!nkp писал(а):надо пробовать:chr(1)chr(0)
-
- Мастер
- Сообщения: 8340
- Зарегистрирован: 28 ноя 2011, 00:25
- Репутация: 1589
- Контактная информация:
Re: Управление из LinuxCNC через COM-порт
http://docs.python.org/2/library/functions.htmlSerg-tmn писал(а):А hex() это разве не преобразование 16-ричной числа в строке в целое?
- Ворон226
- Мастер
- Сообщения: 1922
- Зарегистрирован: 01 окт 2012, 18:14
- Репутация: 181
- Откуда: Солнечногорск Московской обл. - Борки Конаковского р-на - Скоморохово Фировского р-на
- Контактная информация:
Re: Управление из LinuxCNC через COM-порт
УРА! И у меня переключает!
Получается, что теперь мы знаем ЧТО прописывать в компоненте на питоне для включения СОМ-порта и передачи байта?
Получается, что теперь мы знаем ЧТО прописывать в компоненте на питоне для включения СОМ-порта и передачи байта?
Хочешь быть счастливым? Будь им!
- Сергей Саныч
- Мастер
- Сообщения: 9116
- Зарегистрирован: 30 май 2012, 14:20
- Репутация: 2857
- Откуда: Тюмень
- Контактная информация:
Re: Управление из LinuxCNC через COM-порт
Понял. Строго наоборотnkp писал(а):http://docs.python.org/2/library/functions.htmlSerg-tmn писал(а):А hex() это разве не преобразование 16-ричной числа в строке в целое?
Чудес не бывает. Бывают фокусы.
-
- Мастер
- Сообщения: 8340
- Зарегистрирован: 28 ноя 2011, 00:25
- Репутация: 1589
- Контактная информация:
Re: Управление из LinuxCNC через COM-порт
да - но теперь стоит задача написать красивый алгоритм для суммированияВорон226 писал(а):Получается, что теперь мы знаем ЧТО прописывать в компоненте на питоне для включения СОМ-порта и передачи байта?
то есть:
если pin1 в хал есть True - то он равен 1, если False - то 0
если pin2 в хал есть True - то он равен 2, если False - то 0
....................
если pin8 в хал есть True - то он равен 128, если False - то 0
sum=pin1 + pin2 +... +pin8
- Ворон226
- Мастер
- Сообщения: 1922
- Зарегистрирован: 01 окт 2012, 18:14
- Репутация: 181
- Откуда: Солнечногорск Московской обл. - Борки Конаковского р-на - Скоморохово Фировского р-на
- Контактная информация:
Re: Управление из LinuxCNC через COM-порт
А если не переобозначать переменные, а сразу задать 16 переменных и затем
если in1 в хал есть True, то pin1=1, если False, то pin1=0...
И суммировать не входные халовские inN, а внутренние переменные pinN.
А?
если in1 в хал есть True, то pin1=1, если False, то pin1=0...
И суммировать не входные халовские inN, а внутренние переменные pinN.
А?
Хочешь быть счастливым? Будь им!
-
- Мастер
- Сообщения: 8340
- Зарегистрирован: 28 ноя 2011, 00:25
- Репутация: 1589
- Контактная информация:
Re: Управление из LinuxCNC через COM-порт
а так и будет - по другому просто нельзя...
ведь у нас наши абстрактные "пины" имеют и логическое значение(True или False) и численное(1,2,4,...128)
я думаю можно создать два массива - один с пинами,другой с их "весом"
потом проверять в цикле и суммировать...
ведь у нас наши абстрактные "пины" имеют и логическое значение(True или False) и численное(1,2,4,...128)
я думаю можно создать два массива - один с пинами,другой с их "весом"
потом проверять в цикле и суммировать...
- Ворон226
- Мастер
- Сообщения: 1922
- Зарегистрирован: 01 окт 2012, 18:14
- Репутация: 181
- Откуда: Солнечногорск Московской обл. - Борки Конаковского р-на - Скоморохово Фировского р-на
- Контактная информация:
Re: Управление из LinuxCNC через COM-порт
Пробую набросать пользовательский компонент на питоне:
Чую, что не определил переменные в питоне (pin1...pin8), также не правильно написал суммирование... Да и с командой записи в СОМ-порт тоже, наверняка, перепутал...
И ведь где-то нужно закрыть порт при выходе из программы?
Код: Выделить всё
#!/usr/bin/python
import hal
import serial
h=hal.component("comform")
ser = serial.Serial(port='/dev/ttyS0', baudrate=19200, parity=serial.PARITY_ODD, stopbits=serial.STOPBITS_ONE, bytesize=serial.EIGHTBITS, timeout=1)
h.newpin("in1", hal.HAL_BIT, hal.HAL_IN)
h.newpin("in2", hal.HAL_BIT, hal.HAL_IN)
h.newpin("in3", hal.HAL_BIT, hal.HAL_IN)
h.newpin("in4", hal.HAL_BIT, hal.HAL_IN)
h.newpin("in5", hal.HAL_BIT, hal.HAL_IN)
h.newpin("in6", hal.HAL_BIT, hal.HAL_IN)
h.newpin("in7", hal.HAL_BIT, hal.HAL_IN)
h.newpin("in8", hal.HAL_BIT, hal.HAL_IN)
h.ready()
try:
while 1:
if h['in1']==True:
h['pin1']=1
else:
h['pin1']=0
while 2:
if h['in2']==True:
h['pin2']=1
else:
h['pin2']=0
while 3:
if h['in3']==True:
h['pin3']=1
else:
h['pin3']=0
while 4:
if h['in4']==True:
h['pin4']=1
else:
h['pin4']=0
while 5:
if h['in5']==True:
h['pin5']=1
else:
h['pin5']=0
while 6:
if h['in6']==True:
h['pin6']=1
else:
h['pin6']=0
while 7:
if h['in7']==True:
h['pin7']=1
else:
h['pin7']=0
while 8:
if h['in8']==True:
h['pin8']=1
else:
h['pin8']=0
v=h['pin1'] + h['pin2'] + h['pin3'] + h['pin4'] + h['pin5'] + h['pin6'] + h['pin7'] + h['pin8']
ser.write(chr(v))
except KeyboardInterrupt:
raise SystemExit
И ведь где-то нужно закрыть порт при выходе из программы?
Хочешь быть счастливым? Будь им!
-
- Мастер
- Сообщения: 8340
- Зарегистрирован: 28 ноя 2011, 00:25
- Репутация: 1589
- Контактная информация:
Re: Управление из LinuxCNC через COM-порт
с этим решаемо - перед закрытием емс можно прописать обязательное выполнение любого скриптаВорон226 писал(а):И ведь где-то нужно закрыть порт при выходе из программы?
вот там и прописать закрытие порта
-------
-
- Мастер
- Сообщения: 8340
- Зарегистрирован: 28 ноя 2011, 00:25
- Репутация: 1589
- Контактная информация:
Re: Управление из LinuxCNC через COM-порт
дописать до конца....
ну и отступы потом поправить...
ну и отступы потом поправить...
-
- Мастер
- Сообщения: 8340
- Зарегистрирован: 28 ноя 2011, 00:25
- Репутация: 1589
- Контактная информация:
Re: Управление из LinuxCNC через COM-порт
Код: Выделить всё
#!/usr/bin/python
import hal
import serial
h=hal.component("comform")
ser = serial.Serial(port='/dev/ttyS0', baudrate=19200, parity=serial.PARITY_ODD, stopbits=serial.STOPBITS_ONE, bytesize=serial.EIGHTBITS, timeout=1)
h.newpin("in1", hal.HAL_BIT, hal.HAL_IN)
h.newpin("in2", hal.HAL_BIT, hal.HAL_IN)
h.newpin("in3", hal.HAL_BIT, hal.HAL_IN)
h.newpin("in4", hal.HAL_BIT, hal.HAL_IN)
h.newpin("in5", hal.HAL_BIT, hal.HAL_IN)
h.newpin("in6", hal.HAL_BIT, hal.HAL_IN)
h.newpin("in7", hal.HAL_BIT, hal.HAL_IN)
h.newpin("in8", hal.HAL_BIT, hal.HAL_IN)
h.ready()
try:
while 1:
if h['in1']==True:
pin1=1
else:
pin1=0
if h['in2']==True:
pin2=2
else:
pin2=0
if h['in3']==True:
pin3=4
else:
pin3=0
if h['in4']==True:
pin4=8
else:
pin4=0
if h['in5']==True:
pin5=16
else:
pin5=0
if h['in6']==True:
pin6=32
else:
pin6=0
if h['in7']==True:
pin7=64
else:
pin7=0
if h['in8']==True:
pin8=128
else:
pin8=0
v = pin1 + pin2 + pin3 + pin4 + pin5 + pin6 + pin7 + pin8
ser.write(chr(v))
except KeyboardInterrupt:
raise SystemExit
- Ворон226
- Мастер
- Сообщения: 1922
- Зарегистрирован: 01 окт 2012, 18:14
- Репутация: 181
- Откуда: Солнечногорск Московской обл. - Борки Конаковского р-на - Скоморохово Фировского р-на
- Контактная информация:
Re: Управление из LinuxCNC через COM-порт
Вот что получилось...
Про выключение.
Я так понимаю есть два варианта или оба?
1. В .ini
В файле shutdown.hal
2. При выключении станка при помощи пользовательского G-кода (M102):
Код: Выделить всё
#!/usr/bin/python
import hal
import serial
ser = serial.Serial(port='/dev/ttyS0', baudrate=19200, parity=serial.PARITY_ODD, stopbits=serial.STOPBITS_ONE, bytesize=serial.EIGHTBITS, timeout=1)
h=hal.component("comform")
h.newpin("in1", hal.HAL_BIT, hal.HAL_IN)
h.newpin("in2", hal.HAL_BIT, hal.HAL_IN)
h.newpin("in3", hal.HAL_BIT, hal.HAL_IN)
h.newpin("in4", hal.HAL_BIT, hal.HAL_IN)
h.newpin("in5", hal.HAL_BIT, hal.HAL_IN)
h.newpin("in6", hal.HAL_BIT, hal.HAL_IN)
h.newpin("in7", hal.HAL_BIT, hal.HAL_IN)
h.newpin("in8", hal.HAL_BIT, hal.HAL_IN)
h.ready()
try:
while 1:
if h['in1']==1:
pin1=1
else:
pin1=0
if h['in2']==1:
pin2=2
else:
pin2=0
if h['in3']==1:
pin3=4
else:
pin3=0
if h['in4']==1:
pin4=8
else:
pin4=0
if h['in5']==1:
pin5=16
else:
pin5=0
if h['in6']==1:
pin6=32
else:
pin6=0
if h['in7']==1:
pin7=64
else:
pin7=0
if h['in8']==1:
pin8=128
else:
pin8=0
v=pin1 + pin2 + pin3 + pin4 + pin5 + pin6 + pin7 + pin8
ser.write(chr(v))
except KeyboardInterrupt:
raise SystemExit
Я так понимаю есть два варианта или оба?
1. В .ini
Код: Выделить всё
[HAL]
SHUTDOWN = shutdown.hal
Код: Выделить всё
setp conform.in1 0
setp conform.in2 0
setp conform.in3 0
setp conform.in4 0
setp conform.in5 0
setp conform.in6 0
setp conform.in7 0
setp conform.in8 0
setp halui.machine.off True
Код: Выделить всё
#!/bin/sh
ser.close()
sudo shutdown -h now
Хочешь быть счастливым? Будь им!
-
- Мастер
- Сообщения: 8340
- Зарегистрирован: 28 ноя 2011, 00:25
- Репутация: 1589
- Контактная информация:
Re: Управление из LinuxCNC через COM-порт
нет - так работать не будетВорон226 писал(а):2. При выключении станка при помощи пользовательского G-кода (M102):
это скрипт шелл - а строка закрытия порта - питон
-------
забей на закрытие порта
скорей всего емс закрываешь - комп выключаешь
ежели что - потом допишешь...
- Ворон226
- Мастер
- Сообщения: 1922
- Зарегистрирован: 01 окт 2012, 18:14
- Репутация: 181
- Откуда: Солнечногорск Московской обл. - Борки Конаковского р-на - Скоморохово Фировского р-на
- Контактная информация:
Re: Управление из LinuxCNC через COM-порт
ага - буду готовить панель для проверки компонента COM-порта... Всем спасибо! До завтра!
Хочешь быть счастливым? Будь им!
-
- Мастер
- Сообщения: 8340
- Зарегистрирован: 28 ноя 2011, 00:25
- Репутация: 1589
- Контактная информация:
Re: Управление из LinuxCNC через COM-порт
вот попробовал из скрипта шелл питоновский файл запустить:
а уже в close.py прописать закрытие порта:
Код: Выделить всё
#!/bin/sh
python close.py
sudo shutdown -h now
Код: Выделить всё
#!/usr/bin/python
import serial
ser.close()
- Serg
- Мастер
- Сообщения: 21923
- Зарегистрирован: 17 апр 2012, 14:58
- Репутация: 5181
- Заслуга: c781c134843e0c1a3de9
- Настоящее имя: Сергей
- Откуда: Москва
- Контактная информация:
Re: Управление из LinuxCNC через COM-порт
Не надо закрывать порт. При завершении программы OS автоматически закроет все открытые файлы.
Последний раз редактировалось Serg 20 май 2013, 00:16, всего редактировалось 2 раза.
Я не Христос, рыбу не раздаю, но могу научить, как сделать удочку...
- Ворон226
- Мастер
- Сообщения: 1922
- Зарегистрирован: 01 окт 2012, 18:14
- Репутация: 181
- Откуда: Солнечногорск Московской обл. - Борки Конаковского р-на - Скоморохово Фировского р-на
- Контактная информация:
Re: Управление из LinuxCNC через COM-порт
Спасибо! Пригодится при других случаяхnkp писал(а):вот попробовал из скрипта шелл питоновский файл запустить:
а уже в close.py прописать закрытие порта...
Хочешь быть счастливым? Будь им!
- Serg
- Мастер
- Сообщения: 21923
- Зарегистрирован: 17 апр 2012, 14:58
- Репутация: 5181
- Заслуга: c781c134843e0c1a3de9
- Настоящее имя: Сергей
- Откуда: Москва
- Контактная информация:
Re: Управление из LinuxCNC через COM-порт
Запуск отдельного скрипта с закрытием порта бессмыленен: запущенный скрипт - это отдельный процесс в терминах ОС, и в контексте этого процесса порт закрыт, ибо и не открывался. Собственно команда закрытия выполнится с ошибкой и ничего не сделает.Ворон226 писал(а):Спасибо! Пригодится при других случаях
Я не Христос, рыбу не раздаю, но могу научить, как сделать удочку...
- Ворон226
- Мастер
- Сообщения: 1922
- Зарегистрирован: 01 окт 2012, 18:14
- Репутация: 181
- Откуда: Солнечногорск Московской обл. - Борки Конаковского р-на - Скоморохово Фировского р-на
- Контактная информация:
Re: Управление из LinuxCNC через COM-порт
Так я не про закрытие, а про способ запуска питоновского скрипта
Хочешь быть счастливым? Будь им!