Страница 4 из 5
Re: В Linux посмотреть передачу по RS232->USB
Добавлено: 17 май 2012, 22:38
Nick
Это не все... или все? В конце нет ].
О а сделай еще
a = hal.component("a")
dir(a)
Re: В Linux посмотреть передачу по RS232->USB
Добавлено: 17 май 2012, 22:44
nkp
Код: Выделить всё
>>> a = hal.component("a")
>>> dir(a)
['__class__', '__delattr__', '__delitem__', '__dict__', '__doc__', '__format__', '__getattribute__', '__getitem__', '__hash__', '__init__', '__len__', '__module__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__setitem__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', 'exit', 'getitem', 'getparam', 'getpin', 'getprefix', 'newparam', 'newpin', 'ready', 'setprefix']
Re: В Linux посмотреть передачу по RS232->USB
Добавлено: 17 май 2012, 22:57
Nick
nkp писал(а):'newparam', 'newpin'
Похоже, что есть только пины и параметры, оно и правильно, зачем компонентам userspace функции?
Re: В Linux посмотреть передачу по RS232->USB
Добавлено: 17 май 2012, 22:58
nkp
Файл pult.py в папке с ini
В хал :
loadusr -Wn pult python pult.py
net pult pult.out halui.program.stop
Появился только в разделе "Сигналы" :
Ни в разделе компоненты ,ни в разделе пины ничего нет

Re: В Linux посмотреть передачу по RS232->USB
Добавлено: 17 май 2012, 23:04
nkp
Файл pult.py:
Код: Выделить всё
#!/usr/bin/python
import hal, time
h = hal.component("pult")
h.newpin("in", hal.HAL_FLOAT, hal.HAL_IN)
h.newpin("out", hal.HAL_BIT, hal.HAL_OUT)
h.ready()
try:
while 1:
time.sleep(1)
h['out'] = False
ser = serial.Serial('/dev/ttyS0', 115200, timeout=1)
x = ser.read()
if x == '2' :
h['out'] = True
ser.close()
except KeyboardInterrupt:
raise SystemExit
Re: В Linux посмотреть передачу по RS232->USB
Добавлено: 17 май 2012, 23:11
Nick
Хммм. но появился же

.
попробуй в консоли выполнить halcmd show all | grep pult
Re: В Linux посмотреть передачу по RS232->USB
Добавлено: 17 май 2012, 23:15
nkp
nkp@nkp-desktop:~$ halcmd show all | grep pult
7 bit IN FALSE halui.program.stop <== pult
bit FALSE pult
Re: В Linux посмотреть передачу по RS232->USB
Добавлено: 17 май 2012, 23:18
Nick
Вот что мне не нравится, почему у тебя компонент и сигнал имеют одинаковое имя, сделай хотя бы
net pult-stop pult.out halui.program.stop
Странно, что LinuxCNC на это сразу не ругнулся...
Re: В Linux посмотреть передачу по RS232->USB
Добавлено: 17 май 2012, 23:42
nkp
Мне кажется ,что все нормально со стороны емс- просто скрипт не работает
Вот так меняет halui.program.stop на true
(для просмотра содержимого нажмите на ссылку)Код: Выделить всё
#!/usr/bin/python
import hal, time
h = hal.component("pult")
h.newpin("in", hal.HAL_FLOAT, hal.HAL_IN)
h.newpin("out", hal.HAL_BIT, hal.HAL_OUT)
h.ready()
h['out'] = False
try:
while 1:
h['out'] = True
except KeyboardInterrupt:
raise SystemExit
Re: В Linux посмотреть передачу по RS232->USB
Добавлено: 17 май 2012, 23:59
nkp
Ну наконец то - можно идти спать- это ж надо целый день не замечать, что забыл добавить "import serial" (смайлик стучащая об стенку голова)
Теперь все работает:
Код: Выделить всё
#!/usr/bin/python
import hal, time , serial
h = hal.component("pult")
h.newpin("in", hal.HAL_FLOAT, hal.HAL_IN)
h.newpin("out", hal.HAL_BIT, hal.HAL_OUT)
h.ready()
h['out'] = False
ser = serial.Serial('/dev/ttyS0', 115200, timeout=1)
try:
while 1:
time.sleep(1)
x = ser.read()
if x == '2' :
h['out'] = True
except KeyboardInterrupt:
raise SystemExit
Re: В Linux посмотреть передачу по RS232->USB
Добавлено: 18 май 2012, 00:02
Nick
Кстати, именно поэтому полезно запускать LinuxCNC из консоли - в этом случае ты бы увидел ошибку питона

.
Re: В Linux посмотреть передачу по RS232->USB
Добавлено: 18 май 2012, 00:04
nkp
Согласен-при обкатке чего нового взять это за правило!!!
Re: В Linux посмотреть передачу по RS232->USB
Добавлено: 18 май 2012, 00:07
nkp
А вот интересно-сколько пинов можно объявить?
Такое впечатление-что неограниченное количество.
Re: В Linux посмотреть передачу по RS232->USB
Добавлено: 18 май 2012, 00:12
Nick
А тебе много надо? Насколько я понимаю ограничением будет обработка всех пинов и сигналов в LinuxCNС, интересно как они там хранятся?
Хотя наверняка они не занимают много места и доступ к ним очень быстрый.
Re: В Linux посмотреть передачу по RS232->USB
Добавлено: 18 май 2012, 00:18
nkp
Nick писал(а):А тебе много надо?
Просто пока в голове такая реализация работы пульта:
пишем в порт значение "a" - пин 1 тру
пишем в порт значение "b" - пин 2 тру
пишем в порт значение "c" - пин 3 тру
...................
пишем в порт значение "x" - пин n тру
Re: В Linux посмотреть передачу по RS232->USB
Добавлено: 18 май 2012, 00:49
Nick
Сделай простой code/decoder и расфигачивай пины. Все равно у тебя не получится пинов сильно больше чем в haliu.
Re: В Linux посмотреть передачу по RS232->USB
Добавлено: 18 май 2012, 00:58
nkp
Я вот тут про другое подумал-надо бы чтоб кнопки на пульте были двухконтактные(или програмно это реализовать)
отслеживать кнопка нажата-отпущена.Если управление через компорт-то нажата значение x? отпущена-y.
Re: В Linux посмотреть передачу по RS232->USB
Добавлено: 18 май 2012, 07:27
nkp
Код: Выделить всё
#!/usr/bin/python
import hal, time , serial
h = hal.component("pult")
h.newpin("out", hal.HAL_BIT, hal.HAL_OUT)
h.newpin("a", hal.HAL_BIT, hal.HAL_OUT)
h.newpin("b", hal.HAL_BIT, hal.HAL_OUT)
h.newpin("c", hal.HAL_BIT, hal.HAL_OUT)
h.ready()
h['a'] = False
h['b'] = False
h['c'] = False
h['out'] = False
try:
while 1:
time.sleep(1)
ser = serial.Serial('/dev/ttyS0', 115200, timeout=1)
x = ser.read()
if x == '2' :
h['out'] = True
else :
h['out'] = False
if x == '3' :
h['a'] = True
h['b'] = False
if x == '4' :
h['b'] = True
h['a'] = False
if x == '5' :
h['c'] = True
ser.close()
except KeyboardInterrupt:
raise SystemExit
Вот работа трех кнопок-стоп программа, пауза и снятие с паузы.
В hal пишем
Код: Выделить всё
loadusr -Wn pult python pult.py
net pult-stop pult.out halui.program.stop
net pult-pause pult.a halui.program.pause
net pult-resume pult.b halui.program.resume
Если в порт передаем "2" - стоп
Если в порт передаем "3" - пауза
Если в порт передаем "4" - снят с паузы
Re: В Linux посмотреть передачу по RS232->USB
Добавлено: 18 май 2012, 11:24
Nick
ИМХО, может быть проще и понятнее, если во входном значении каждый бит будет символизировать логический пин.
Тогда будет так:
Код: Выделить всё
# Инициализация :
pin_bits = [
[ h["out"], 0b00000001 ],
[ h["out1"], 0b00000010 ],
[ h["out2"], 0b00000100 ],
[ h["out3"], 0b00001000 ],
[ h["out4"], 0b00010000 ],
]
# В рабочем цикле :
for pin in pin_bits :
pin[0] = input_byte and pin[1]
И не надо кучу условий писать, плюс в микроконтроллере будет проще все запрограммировать, точно таким же способом, только накапливание результата будет не через and, а через or.
Если пинов больше, то можно использовать не байт, а два байта, тогда сразу берем два символа, а в массиве pin_bits, все старшие биты записываем так:
0b00010000*256.
Re: В Linux посмотреть передачу по RS232->USB
Добавлено: 18 май 2012, 11:31
Nick
Афтаев, переведем для тебя на человеческий язык. Сохраняешь верхник код отсюда
В Linux посмотреть передачу по RS232->USB #78 в файл pult.py в папку с ini файлом. В hal добавляешь строчки нижнего кода. И все должно работать.
Кстати, что ты хочешь передавать в пульт и что получать из него?
И поясните мне, как ведется передача по COM? Будет создаваться пакет? Или все значения будут передаваться по отдельности?
Мое предложение передавать значения пинов битов как описал выше, а пинов float через какой-нибудь дескриптор пина + значение. Тогда декодирование передачи будет такой же простой, как в примере выше. О, можно и битовые пины таким же образом передавать. В общем, расскажите, как ведется передача информации по COM, есть ли какие-нибудь служебные команды?