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

Обсуждение установки, настройки и использования LinuxCNC. Вопросы по Gкоду.
Аватара пользователя
Сергей Саныч
Мастер
Сообщения: 9116
Зарегистрирован: 30 май 2012, 14:20
Репутация: 2857
Откуда: Тюмень
Контактная информация:

Re: Управление из LinuxCNC через COM-порт

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

nkp писал(а):в питоне в кавычках - строка...
А hex() это разве не преобразование 16-ричного числа в строке в целое?
Последний раз редактировалось Сергей Саныч 19 май 2013, 20:21, всего редактировалось 1 раз.
Чудес не бывает. Бывают фокусы.
nkp
Мастер
Сообщения: 8340
Зарегистрирован: 28 ноя 2011, 00:25
Репутация: 1589
Контактная информация:

Re: Управление из LinuxCNC через COM-порт

Сообщение nkp »

nkp писал(а):надо пробовать:chr(1)chr(0)
у меня заработало!!!
Выделение(006).jpg (3349 просмотров) <a class='original' href='./download/file.php?id=14735&sid=b3cf8cfdfb3f6ff86d97b69fb70be0f9&mode=view' target=_blank>Загрузить оригинал (234.14 КБ)</a>
nkp
Мастер
Сообщения: 8340
Зарегистрирован: 28 ноя 2011, 00:25
Репутация: 1589
Контактная информация:

Re: Управление из LinuxCNC через COM-порт

Сообщение nkp »

Serg-tmn писал(а):А hex() это разве не преобразование 16-ричной числа в строке в целое?
http://docs.python.org/2/library/functions.html
Аватара пользователя
Ворон226
Мастер
Сообщения: 1922
Зарегистрирован: 01 окт 2012, 18:14
Репутация: 181
Откуда: Солнечногорск Московской обл. - Борки Конаковского р-на - Скоморохово Фировского р-на
Контактная информация:

Re: Управление из LinuxCNC через COM-порт

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

УРА! И у меня переключает!
Получается, что теперь мы знаем ЧТО прописывать в компоненте на питоне для включения СОМ-порта и передачи байта?
Хочешь быть счастливым? Будь им!
Аватара пользователя
Сергей Саныч
Мастер
Сообщения: 9116
Зарегистрирован: 30 май 2012, 14:20
Репутация: 2857
Откуда: Тюмень
Контактная информация:

Re: Управление из LinuxCNC через COM-порт

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

nkp писал(а):
Serg-tmn писал(а):А hex() это разве не преобразование 16-ричной числа в строке в целое?
http://docs.python.org/2/library/functions.html
Понял. Строго наоборот :monkey:
Чудес не бывает. Бывают фокусы.
nkp
Мастер
Сообщения: 8340
Зарегистрирован: 28 ноя 2011, 00:25
Репутация: 1589
Контактная информация:

Re: Управление из LinuxCNC через COM-порт

Сообщение nkp »

Ворон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-порт

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

А если не переобозначать переменные, а сразу задать 16 переменных и затем

если in1 в хал есть True, то pin1=1, если False, то pin1=0...

И суммировать не входные халовские inN, а внутренние переменные pinN.

А?
Хочешь быть счастливым? Будь им!
nkp
Мастер
Сообщения: 8340
Зарегистрирован: 28 ноя 2011, 00:25
Репутация: 1589
Контактная информация:

Re: Управление из LinuxCNC через COM-порт

Сообщение nkp »

а так и будет - по другому просто нельзя...
ведь у нас наши абстрактные "пины" имеют и логическое значение(True или False) и численное(1,2,4,...128)
я думаю можно создать два массива - один с пинами,другой с их "весом"
потом проверять в цикле и суммировать...
Аватара пользователя
Ворон226
Мастер
Сообщения: 1922
Зарегистрирован: 01 окт 2012, 18:14
Репутация: 181
Откуда: Солнечногорск Московской обл. - Борки Конаковского р-на - Скоморохово Фировского р-на
Контактная информация:

Re: Управление из LinuxCNC через COM-порт

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

Пробую набросать пользовательский компонент на питоне:

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

    #!/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
Чую, что не определил переменные в питоне (pin1...pin8), также не правильно написал суммирование... Да и с командой записи в СОМ-порт тоже, наверняка, перепутал...
И ведь где-то нужно закрыть порт при выходе из программы?
Хочешь быть счастливым? Будь им!
nkp
Мастер
Сообщения: 8340
Зарегистрирован: 28 ноя 2011, 00:25
Репутация: 1589
Контактная информация:

Re: Управление из LinuxCNC через COM-порт

Сообщение nkp »

Ворон226 писал(а):И ведь где-то нужно закрыть порт при выходе из программы?
с этим решаемо - перед закрытием емс можно прописать обязательное выполнение любого скрипта
вот там и прописать закрытие порта
-------
nkp
Мастер
Сообщения: 8340
Зарегистрирован: 28 ноя 2011, 00:25
Репутация: 1589
Контактная информация:

Re: Управление из LinuxCNC через COM-порт

Сообщение nkp »

(для просмотра содержимого нажмите на ссылку)

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

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

................................

          v=pin1 + pin2 + pin3 + ... + pin8
ser.write(chr(v))


except KeyboardInterrupt:
     raise SystemExit
дописать до конца....
ну и отступы потом поправить...
nkp
Мастер
Сообщения: 8340
Зарегистрирован: 28 ноя 2011, 00:25
Репутация: 1589
Контактная информация:

Re: Управление из LinuxCNC через COM-порт

Сообщение nkp »

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

#!/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-порт

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

Вот что получилось...

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

#!/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
В файле 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
2. При выключении станка при помощи пользовательского G-кода (M102):

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

#!/bin/sh
ser.close()
sudo shutdown -h now
Хочешь быть счастливым? Будь им!
nkp
Мастер
Сообщения: 8340
Зарегистрирован: 28 ноя 2011, 00:25
Репутация: 1589
Контактная информация:

Re: Управление из LinuxCNC через COM-порт

Сообщение nkp »

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

Re: Управление из LinuxCNC через COM-порт

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

ага - буду готовить панель для проверки компонента COM-порта... Всем спасибо! До завтра!
Хочешь быть счастливым? Будь им!
nkp
Мастер
Сообщения: 8340
Зарегистрирован: 28 ноя 2011, 00:25
Репутация: 1589
Контактная информация:

Re: Управление из LinuxCNC через COM-порт

Сообщение nkp »

вот попробовал из скрипта шелл питоновский файл запустить:

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

#!/bin/sh
python close.py
sudo shutdown -h now
а уже в close.py прописать закрытие порта:

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

#!/usr/bin/python
import serial
ser.close()
Аватара пользователя
Serg
Мастер
Сообщения: 21923
Зарегистрирован: 17 апр 2012, 14:58
Репутация: 5181
Заслуга: c781c134843e0c1a3de9
Настоящее имя: Сергей
Откуда: Москва
Контактная информация:

Re: Управление из LinuxCNC через COM-порт

Сообщение Serg »

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

Re: Управление из LinuxCNC через COM-порт

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

nkp писал(а):вот попробовал из скрипта шелл питоновский файл запустить:
а уже в close.py прописать закрытие порта...
Спасибо! Пригодится при других случаях ;)
Хочешь быть счастливым? Будь им!
Аватара пользователя
Serg
Мастер
Сообщения: 21923
Зарегистрирован: 17 апр 2012, 14:58
Репутация: 5181
Заслуга: c781c134843e0c1a3de9
Настоящее имя: Сергей
Откуда: Москва
Контактная информация:

Re: Управление из LinuxCNC через COM-порт

Сообщение Serg »

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

Re: Управление из LinuxCNC через COM-порт

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

Так я не про закрытие, а про способ запуска питоновского скрипта ;)
Хочешь быть счастливым? Будь им!
Ответить

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