Re: Управление из LinuxCNC через COM-порт
Добавлено: 19 май 2013, 20:17
А hex() это разве не преобразование 16-ричного числа в строке в целое?nkp писал(а):в питоне в кавычках - строка...
Статьи, обзоры, цены на станки и комплектующие.
https://cnc-club.ru/forum/
А hex() это разве не преобразование 16-ричного числа в строке в целое?nkp писал(а):в питоне в кавычках - строка...
у меня заработало!!!nkp писал(а):надо пробовать:chr(1)chr(0)
http://docs.python.org/2/library/functions.htmlSerg-tmn писал(а):А hex() это разве не преобразование 16-ричной числа в строке в целое?
Понял. Строго наоборотnkp писал(а):http://docs.python.org/2/library/functions.htmlSerg-tmn писал(а):А hex() это разве не преобразование 16-ричной числа в строке в целое?
да - но теперь стоит задача написать красивый алгоритм для суммированияВорон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
с этим решаемо - перед закрытием емс можно прописать обязательное выполнение любого скриптаВорон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:
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Код: Выделить всё
#!/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
Код: Выделить всё
[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нет - так работать не будетВорон226 писал(а):2. При выключении станка при помощи пользовательского G-кода (M102):
Код: Выделить всё
#!/bin/sh
python close.py
sudo shutdown -h nowКод: Выделить всё
#!/usr/bin/python
import serial
ser.close()Спасибо! Пригодится при других случаяхnkp писал(а):вот попробовал из скрипта шелл питоновский файл запустить:
а уже в close.py прописать закрытие порта...
Запуск отдельного скрипта с закрытием порта бессмыленен: запущенный скрипт - это отдельный процесс в терминах ОС, и в контексте этого процесса порт закрыт, ибо и не открывался. Собственно команда закрытия выполнится с ошибкой и ничего не сделает.Ворон226 писал(а):Спасибо! Пригодится при других случаях