В Linux посмотреть передачу по RS232->USB
- Nick
- Мастер
- Сообщения: 22776
- Зарегистрирован: 23 ноя 2009, 16:45
- Репутация: 1735
- Заслуга: Developer
- Откуда: Gatchina, Saint-Petersburg distr., Russia
- Контактная информация:
Re: В Linux посмотреть передачу по RS232->USB
Это не все... или все? В конце нет ].
О а сделай еще
a = hal.component("a")
dir(a)
О а сделай еще
a = hal.component("a")
dir(a)
-
nkp
- Мастер
- Сообщения: 8340
- Зарегистрирован: 28 ноя 2011, 00:25
- Репутация: 1589
- Контактная информация:
Re: В Linux посмотреть передачу по RS232->USB
Код: Выделить всё
>>> 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']
- Nick
- Мастер
- Сообщения: 22776
- Зарегистрирован: 23 ноя 2009, 16:45
- Репутация: 1735
- Заслуга: Developer
- Откуда: Gatchina, Saint-Petersburg distr., Russia
- Контактная информация:
Re: В Linux посмотреть передачу по RS232->USB
Похоже, что есть только пины и параметры, оно и правильно, зачем компонентам userspace функции?nkp писал(а):'newparam', 'newpin'
-
nkp
- Мастер
- Сообщения: 8340
- Зарегистрирован: 28 ноя 2011, 00:25
- Репутация: 1589
- Контактная информация:
Re: В Linux посмотреть передачу по RS232->USB
Файл pult.py в папке с ini
В хал :
loadusr -Wn pult python pult.py
net pult pult.out halui.program.stop
Появился только в разделе "Сигналы" : Ни в разделе компоненты ,ни в разделе пины ничего нет
loadusr -Wn pult python pult.py
net pult pult.out halui.program.stop
Появился только в разделе "Сигналы" : Ни в разделе компоненты ,ни в разделе пины ничего нет
-
nkp
- Мастер
- Сообщения: 8340
- Зарегистрирован: 28 ноя 2011, 00:25
- Репутация: 1589
- Контактная информация:
Re: В Linux посмотреть передачу по RS232->USB
Файл 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- Nick
- Мастер
- Сообщения: 22776
- Зарегистрирован: 23 ноя 2009, 16:45
- Репутация: 1735
- Заслуга: Developer
- Откуда: Gatchina, Saint-Petersburg distr., Russia
- Контактная информация:
Re: В Linux посмотреть передачу по RS232->USB
Хммм. но появился же
.
попробуй в консоли выполнить halcmd show all | grep pult
попробуй в консоли выполнить halcmd show all | grep pult
-
nkp
- Мастер
- Сообщения: 8340
- Зарегистрирован: 28 ноя 2011, 00:25
- Репутация: 1589
- Контактная информация:
Re: В Linux посмотреть передачу по RS232->USB
nkp@nkp-desktop:~$ halcmd show all | grep pult
7 bit IN FALSE halui.program.stop <== pult
bit FALSE pult
7 bit IN FALSE halui.program.stop <== pult
bit FALSE pult
- Nick
- Мастер
- Сообщения: 22776
- Зарегистрирован: 23 ноя 2009, 16:45
- Репутация: 1735
- Заслуга: Developer
- Откуда: Gatchina, Saint-Petersburg distr., Russia
- Контактная информация:
Re: В Linux посмотреть передачу по RS232->USB
Вот что мне не нравится, почему у тебя компонент и сигнал имеют одинаковое имя, сделай хотя бы
net pult-stop pult.out halui.program.stop
Странно, что LinuxCNC на это сразу не ругнулся...
net pult-stop pult.out halui.program.stop
Странно, что LinuxCNC на это сразу не ругнулся...
-
nkp
- Мастер
- Сообщения: 8340
- Зарегистрирован: 28 ноя 2011, 00:25
- Репутация: 1589
- Контактная информация:
Re: В Linux посмотреть передачу по RS232->USB
Мне кажется ,что все нормально со стороны емс- просто скрипт не работает
Вот так меняет halui.program.stop на true
Вот так меняет halui.program.stop на true
-
nkp
- Мастер
- Сообщения: 8340
- Зарегистрирован: 28 ноя 2011, 00:25
- Репутация: 1589
- Контактная информация:
Re: В Linux посмотреть передачу по RS232->USB
Ну наконец то - можно идти спать- это ж надо целый день не замечать, что забыл добавить "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- Nick
- Мастер
- Сообщения: 22776
- Зарегистрирован: 23 ноя 2009, 16:45
- Репутация: 1735
- Заслуга: Developer
- Откуда: Gatchina, Saint-Petersburg distr., Russia
- Контактная информация:
Re: В Linux посмотреть передачу по RS232->USB
Кстати, именно поэтому полезно запускать LinuxCNC из консоли - в этом случае ты бы увидел ошибку питона
.
-
nkp
- Мастер
- Сообщения: 8340
- Зарегистрирован: 28 ноя 2011, 00:25
- Репутация: 1589
- Контактная информация:
Re: В Linux посмотреть передачу по RS232->USB
Согласен-при обкатке чего нового взять это за правило!!!
-
nkp
- Мастер
- Сообщения: 8340
- Зарегистрирован: 28 ноя 2011, 00:25
- Репутация: 1589
- Контактная информация:
Re: В Linux посмотреть передачу по RS232->USB
А вот интересно-сколько пинов можно объявить?
Такое впечатление-что неограниченное количество.
Такое впечатление-что неограниченное количество.
- Nick
- Мастер
- Сообщения: 22776
- Зарегистрирован: 23 ноя 2009, 16:45
- Репутация: 1735
- Заслуга: Developer
- Откуда: Gatchina, Saint-Petersburg distr., Russia
- Контактная информация:
Re: В Linux посмотреть передачу по RS232->USB
А тебе много надо? Насколько я понимаю ограничением будет обработка всех пинов и сигналов в LinuxCNС, интересно как они там хранятся?
Хотя наверняка они не занимают много места и доступ к ним очень быстрый.
Хотя наверняка они не занимают много места и доступ к ним очень быстрый.
-
nkp
- Мастер
- Сообщения: 8340
- Зарегистрирован: 28 ноя 2011, 00:25
- Репутация: 1589
- Контактная информация:
Re: В Linux посмотреть передачу по RS232->USB
Просто пока в голове такая реализация работы пульта:Nick писал(а):А тебе много надо?
пишем в порт значение "a" - пин 1 тру
пишем в порт значение "b" - пин 2 тру
пишем в порт значение "c" - пин 3 тру
...................
пишем в порт значение "x" - пин n тру
- Nick
- Мастер
- Сообщения: 22776
- Зарегистрирован: 23 ноя 2009, 16:45
- Репутация: 1735
- Заслуга: Developer
- Откуда: Gatchina, Saint-Petersburg distr., Russia
- Контактная информация:
Re: В Linux посмотреть передачу по RS232->USB
Сделай простой code/decoder и расфигачивай пины. Все равно у тебя не получится пинов сильно больше чем в haliu.
-
nkp
- Мастер
- Сообщения: 8340
- Зарегистрирован: 28 ноя 2011, 00:25
- Репутация: 1589
- Контактная информация:
Re: В Linux посмотреть передачу по RS232->USB
Я вот тут про другое подумал-надо бы чтоб кнопки на пульте были двухконтактные(или програмно это реализовать)
отслеживать кнопка нажата-отпущена.Если управление через компорт-то нажата значение x? отпущена-y.
отслеживать кнопка нажата-отпущена.Если управление через компорт-то нажата значение x? отпущена-y.
-
nkp
- Мастер
- Сообщения: 8340
- Зарегистрирован: 28 ноя 2011, 00:25
- Репутация: 1589
- Контактная информация:
Re: В Linux посмотреть передачу по RS232->USB
Код: Выделить всё
#!/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 Если в порт передаем "3" - пауза
Если в порт передаем "4" - снят с паузы
- Nick
- Мастер
- Сообщения: 22776
- Зарегистрирован: 23 ноя 2009, 16:45
- Репутация: 1735
- Заслуга: Developer
- Откуда: Gatchina, Saint-Petersburg distr., Russia
- Контактная информация:
Re: В Linux посмотреть передачу по RS232->USB
ИМХО, может быть проще и понятнее, если во входном значении каждый бит будет символизировать логический пин.
Тогда будет так:
И не надо кучу условий писать, плюс в микроконтроллере будет проще все запрограммировать, точно таким же способом, только накапливание результата будет не через and, а через or.
Если пинов больше, то можно использовать не байт, а два байта, тогда сразу берем два символа, а в массиве pin_bits, все старшие биты записываем так:
0b00010000*256.
Тогда будет так:
Код: Выделить всё
# Инициализация :
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]Если пинов больше, то можно использовать не байт, а два байта, тогда сразу берем два символа, а в массиве pin_bits, все старшие биты записываем так:
0b00010000*256.
- Nick
- Мастер
- Сообщения: 22776
- Зарегистрирован: 23 ноя 2009, 16:45
- Репутация: 1735
- Заслуга: Developer
- Откуда: Gatchina, Saint-Petersburg distr., Russia
- Контактная информация:
Re: В Linux посмотреть передачу по RS232->USB
Афтаев, переведем для тебя на человеческий язык. Сохраняешь верхник код отсюда В Linux посмотреть передачу по RS232->USB #78 в файл pult.py в папку с ini файлом. В hal добавляешь строчки нижнего кода. И все должно работать.
Кстати, что ты хочешь передавать в пульт и что получать из него?
И поясните мне, как ведется передача по COM? Будет создаваться пакет? Или все значения будут передаваться по отдельности?
Мое предложение передавать значения пинов битов как описал выше, а пинов float через какой-нибудь дескриптор пина + значение. Тогда декодирование передачи будет такой же простой, как в примере выше. О, можно и битовые пины таким же образом передавать. В общем, расскажите, как ведется передача информации по COM, есть ли какие-нибудь служебные команды?
Кстати, что ты хочешь передавать в пульт и что получать из него?
И поясните мне, как ведется передача по COM? Будет создаваться пакет? Или все значения будут передаваться по отдельности?
Мое предложение передавать значения пинов битов как описал выше, а пинов float через какой-нибудь дескриптор пина + значение. Тогда декодирование передачи будет такой же простой, как в примере выше. О, можно и битовые пины таким же образом передавать. В общем, расскажите, как ведется передача информации по COM, есть ли какие-нибудь служебные команды?
