Передача данных EMC <--> COM
-
- Зачётный участник
- Сообщения: 34042
- Зарегистрирован: 04 апр 2010, 19:22
- Репутация: 6192
- Откуда: Казахстан.
- Контактная информация:
Передача данных EMC <--> COM
Нужно сделать обмен данными внешнее устройство и ЕМС по СОМ по RS232(485).
Начнем с простого:
1. Как сделать в ЕМС какое нибудь поле и кнопку?
2. Как нажав на кнопку отправить введенное значение в поле в заданный СОМ порт?
В качестве RS232 приемника для ПРИМЕРА будет выступать это устройство http://www.ebay.com/itm/Micro-Portable- ... 19ced5436f
Начнем с простого:
1. Как сделать в ЕМС какое нибудь поле и кнопку?
2. Как нажав на кнопку отправить введенное значение в поле в заданный СОМ порт?
В качестве RS232 приемника для ПРИМЕРА будет выступать это устройство http://www.ebay.com/itm/Micro-Portable- ... 19ced5436f
Дилетанту сложные вещи кажутся очень простыми, и только профессионал понимает насколько сложна самая простая вещь
Кто хочет - ищет возможности, кто не хочет - ищет оправдание.
Найди работу по душе и тебе не придется работать.
Кто хочет - ищет возможности, кто не хочет - ищет оправдание.
Найди работу по душе и тебе не придется работать.
- Nick
- Мастер
- Сообщения: 22776
- Зарегистрирован: 23 ноя 2009, 16:45
- Репутация: 1735
- Заслуга: Developer
- Откуда: Gatchina, Saint-Petersburg distr., Russia
- Контактная информация:
Re: Передача данных EMC <--> COM
Какое поле, что в нем будет?aftaev писал(а):1. Как сделать в ЕМС какое нибудь поле и кнопку?
Надо написать компонент на любом удобном языке, который сможет работать с пинами hal и отправлять значения по RS232.aftaev писал(а):2. Как нажав на кнопку отправить введенное значение в поле в заданный СОМ порт?
А можно вообще отдельную программку написать, которая будет иметь кнопку и любое поле. И запускать ее вместе с emc. Помимо ручного использования кнопки, она будет к чему-то еще привязываться?
-
- Зачётный участник
- Сообщения: 34042
- Зарегистрирован: 04 апр 2010, 19:22
- Репутация: 6192
- Откуда: Казахстан.
- Контактная информация:
Re: Передача данных EMC <--> COM
Поле ввода. Вводим туды циферки например 123456 жмакаем на кнопку и ушли они в СОМNick писал(а):Какое поле, что в нем будет?
Это будет ТНС для плазмы, но пока нужно обкатать работу ЕМС-PIC/ Потому достаточно в ЕМС нарисовать поле чтоб ввели цеферки, нажали ОТПРАВИТь и PIC принял. Дальше это как то привязать в HAL чтоб постояно был обмен данными.Nick писал(а):А можно вообще отдельную программку написать, которая будет иметь кнопку и любое поле. И запускать ее вместе с emc. Помимо ручного использования кнопки, она будет к чему-то еще привязываться?
Таже история и для общения ЕМС-ПУЛЬТ
Цель: научиться общаться с ЕМС по СОМ в ПРИМЕРАХ
Дилетанту сложные вещи кажутся очень простыми, и только профессионал понимает насколько сложна самая простая вещь
Кто хочет - ищет возможности, кто не хочет - ищет оправдание.
Найди работу по душе и тебе не придется работать.
Кто хочет - ищет возможности, кто не хочет - ищет оправдание.
Найди работу по душе и тебе не придется работать.
Re: Передача данных EMC <--> COM
Взять обычный SpinButton и в компоненте повесить на изменение отправку данных.
http://psha.org.ru/cgit/psha/owenio/tre ... ent-trm151
http://psha.org.ru/cgit/psha/owenio/tre ... ent-trm151
root, доделай конвертацию!
- Nick
- Мастер
- Сообщения: 22776
- Зарегистрирован: 23 ноя 2009, 16:45
- Репутация: 1735
- Заслуга: Developer
- Откуда: Gatchina, Saint-Petersburg distr., Russia
- Контактная информация:
Re: Передача данных EMC <--> COM
по личной просьбе раскроем тему боле подробно
1. создаем файл pyvcp.xml с таким содержанием:
2. в ini файле в разделе [DISPLAY] пишем PYVCP = pyvcp.xml. После этого при запуске emc2 у нас появится панелька и кнопка. Осталось привязать их пины.
3. Открываем файл custom_postgui.hal и пишем в нем следующее:
4. Создаем скрипт, который будет общаться по RS232:
Я еще пока не до конца его переделал... Надо дописать процедуру записи и чтения порта...
1. создаем файл pyvcp.xml с таким содержанием:
Код: Выделить всё
<pyvcp>
<labelframe text="Send to RS-232">
<font>("Helvetica",16)</font>
<vbox>
<spinbox>
<halpin>"my-spinbox"</halpin>
<min_>-12</min_>
<max_>33</max_>
<initval>0</initval>
<resolution>0.1</resolution>
<format>"2.3f"</format>
<font>("Arial",30)</font>
</spinbox>
<button>
<halpin>"send"</halpin>
<text>"Send"</text>
</button>
</vbox>
</labelframe>
</pyvcp>
3. Открываем файл custom_postgui.hal и пишем в нем следующее:
Код: Выделить всё
loadusr -Wn rs232 python rs232.py
net rs232-exec <= pyvcp.send => rs232.exec
net rs232-in0 <= pyvcp.my-spinbox => rs232.in0
Я еще пока не до конца его переделал... Надо дописать процедуру записи и чтения порта...
Код: Выделить всё
#!/usr/bin/python
# -*- coding: utf-8 -*-
# vim: sts=4 sw=4 et
""" Based on http://psha.org.ru/cgit/psha/owenio/tree/owen-component-trm151
Hope this sould be licenced under GNU GPL 2 or later.
Never the less all changes are GNU GPL 2.
"""
import sys, serial, time
from owen import Packet, unpack_ieee32
import owen
import hal
tty = '/dev/ttyS0'
if len(sys.argv) > 1:
tty = sys.argv[1]
timeout = 0.1
#TODO got to rewrite this
"""
def serial_request(s, aidx=0, cmd='n.Err', fmt='', *a, **kw):
p = owen.Packet(name=cmd, **kw)
p.address += aidx
p.data = owen.pack(fmt, *a)
s.write(p.encode_ascii())
d = s.read(128)
if not d:
return owen.Packet()
return owen.Packet.decode_ascii(d)
def return_none(f):
def _f(*a, **kw):
try:
return f(*a, **kw)
except:
return None
return _f
@return_none
def read_val(s, idx=0):
p = serial_request(s, 0, 'SP.LU', 'h', idx)
return owen.unpack('dh', p.data)[0]
@return_none
def write_val(s, idx, temp):
r = serial_request(s, 0, 'SP.LU', 'dh', temp, idx, request=False)
"""
class RS232:
def __init__(self):
self.comp = hal.component('rs232')
self.exec_pin = self.comp.newpin("exec", hal.HAL_BIT, hal.HAL_IN)
self.pins = {}
self.pin_in['bit'] = dict([[i, self.comp.newpin(i, hal.HAL_BIT, hal.HAL_IN)] for i in "".split])
self.pin_in['s32'] = dict([[i, self.comp.newpin(i, hal.HAL_S32, hal.HAL_IN)] for i in "".split])
self.pin_in['u32'] = dict([[i, self.comp.newpin(i, hal.HAL_U32, hal.HAL_IN)] for i in "".split])
self.pin_in['float'] = dict([[i, self.comp.newpin(i, hal.HAL_FLOAT, hal.HAL_IN)] for i in "".split])
self.pin_out['bit'] = dict([[i, self.comp.newpin(i, hal.HAL_BIT, hal.HAL_OUT)] for i in "".split])
self.pin_out['s32'] = dict([[i, self.comp.newpin(i, hal.HAL_S32, hal.HAL_OUT)] for i in "".split])
self.pin_out['u32'] = dict([[i, self.comp.newpin(i, hal.HAL_U32, hal.HAL_OUT)] for i in "".split])
self.pin_out['float'] = dict([[i, self.comp.newpin(i, hal.HAL_FLOAT, hal.HAL_OUT)] for i in "".split])
self.port = serial.Serial(tty)
self.port.setTimeout(timeout)
self.comp.ready()
def read(self) :
for i in self.in_pin:
for pin in i :
pass #TODO
def write(self) :
for i in self.out_pin:
for pin in i :
pass #TODO
try:
rs232 = RS232()
last_exec = None
while True:
if rs232.exec_pin == 1 and last_exec == None :
rs232.read()
time.sleep(0.01);
rs232.write()
time.sleep(0.1)
last_exec = rs232.exec_pin
except Exception, e:
import traceback
traceback.print_exc()
print e
comp.exit()
-
- Мастер
- Сообщения: 8340
- Зарегистрирован: 28 ноя 2011, 00:25
- Репутация: 1589
- Контактная информация:
Re: Передача данных EMC <--> COM
Может кому будут полезны результаты попытки разобраться с com портом .До этого с ним не сталкивался, (наверно потому что он сзади компьютера ) .
Для того чтоб передавать в порт и его же слушать использовал "заглушку" с перемычками: Файл "навороченного" интерфейса: Скрипт: Оба файла после распаковки ложим в папку с вашей конфигурацией .
В ini файл секция [DISPLAY] пишем: GLADEVCP = -u com.py com.ui
В скрипте используем pyserial.Если не стоит в системе-установить: Должно получиться: Вывод на лейбл еще не работает, так что смотрим где?...конечно в терминале
вводим
это мы открыли порт и прописали настройки
Теперь читаем порт
Пусто! Вводим данные,жмем enter , потом- "Запись".
Читаем теперь:
продолжение следует...
Для того чтоб передавать в порт и его же слушать использовал "заглушку" с перемычками: Файл "навороченного" интерфейса: Скрипт: Оба файла после распаковки ложим в папку с вашей конфигурацией .
В ini файл секция [DISPLAY] пишем: GLADEVCP = -u com.py com.ui
В скрипте используем pyserial.Если не стоит в системе-установить: Должно получиться: Вывод на лейбл еще не работает, так что смотрим где?...конечно в терминале
вводим
Код: Выделить всё
$ python
$ import serial
$ ser = serial.Serial('/dev/ttyS0', 19200, timeout=1)
Теперь читаем порт
Код: Выделить всё
x = ser.read()
print x
- Nick
- Мастер
- Сообщения: 22776
- Зарегистрирован: 23 ноя 2009, 16:45
- Репутация: 1735
- Заслуга: Developer
- Откуда: Gatchina, Saint-Petersburg distr., Russia
- Контактная информация:
Re: Передача данных EMC <--> COM
Ухты! Здорово!
Афтаев, срочно начинай тестировать!
Афтаев, срочно начинай тестировать!
-
- Зачётный участник
- Сообщения: 34042
- Зарегистрирован: 04 апр 2010, 19:22
- Репутация: 6192
- Откуда: Казахстан.
- Контактная информация:
Re: Передача данных EMC <--> COM
Надо научить PIC принимать даные и отправлять а ддля этого нужно чтоб насройки СОМ портов совпадали. Пока к PIC принтер цепляю
Дилетанту сложные вещи кажутся очень простыми, и только профессионал понимает насколько сложна самая простая вещь
Кто хочет - ищет возможности, кто не хочет - ищет оправдание.
Найди работу по душе и тебе не придется работать.
Кто хочет - ищет возможности, кто не хочет - ищет оправдание.
Найди работу по душе и тебе не придется работать.
- Nick
- Мастер
- Сообщения: 22776
- Зарегистрирован: 23 ноя 2009, 16:45
- Репутация: 1735
- Заслуга: Developer
- Откуда: Gatchina, Saint-Petersburg distr., Russia
- Контактная информация:
Re: Передача данных EMC <--> COM
Ну, так настройки в одной строке указываются. Какие у твоего принтера настройки?
-
- Зачётный участник
- Сообщения: 34042
- Зарегистрирован: 04 апр 2010, 19:22
- Репутация: 6192
- Откуда: Казахстан.
- Контактная информация:
Re: Передача данных EMC <--> COM
В ЕМС мож и в одной строчке а вот с PIC куды веселееNick писал(а):Ну, так настройки в одной строке указываются. Какие у твоего принтера настройки?
Xtal=12
Declare Hserial_Baud 57600 ' Sets the BAUD rate that will be used to receive a value serially
Declare Hserial_TXSTA = %00100100 ' Sets the respective PICmicro hardware register TXSTA. Transmitter enable
Declare Hserial_RCSTA = %10000000 ' Sets the respective PICmicro hardware register, RCSTA. Receiver disable
Declare Hserial_SPBRG 12 ' Sets the respective PICmicro hardware register, SPBRG
Declare Hserial_Clear = On ' Clear the overflow error flag before commencing a read
Дилетанту сложные вещи кажутся очень простыми, и только профессионал понимает насколько сложна самая простая вещь
Кто хочет - ищет возможности, кто не хочет - ищет оправдание.
Найди работу по душе и тебе не придется работать.
Кто хочет - ищет возможности, кто не хочет - ищет оправдание.
Найди работу по душе и тебе не придется работать.
-
- Мастер
- Сообщения: 8340
- Зарегистрирован: 28 ноя 2011, 00:25
- Репутация: 1589
- Контактная информация:
Re: Передача данных EMC <--> COM
В этом файле проще изменять настройки порта
(в коментах может я и ошибся)
dsrdtr=0 - что за настройка порта?
-
- Мастер
- Сообщения: 8340
- Зарегистрирован: 28 ноя 2011, 00:25
- Репутация: 1589
- Контактная информация:
Re: Передача данных EMC <--> COM
Немного доработал "кнопочку для сом порта".
2.после ввода данных в поле нажать Enter (далее это неудобство исправим)
Также прикрутится вся настройка порта через интерфейс.
Теперь в панельке можно и "получить" отосланные данные.(если пользовать заглушку)
1.в выпадающем списке выбрать скорость2.после ввода данных в поле нажать Enter (далее это неудобство исправим)
Также прикрутится вся настройка порта через интерфейс.
-
- Мастер
- Сообщения: 8340
- Зарегистрирован: 28 ноя 2011, 00:25
- Репутация: 1589
- Контактная информация:
Re: Передача данных EMC <--> COM
(для просмотра содержимого нажмите на ссылку)
Исправленно-теперь после ввода данных не надо жать enter.
-
- Мастер
- Сообщения: 8340
- Зарегистрирован: 28 ноя 2011, 00:25
- Репутация: 1589
- Контактная информация:
Re: Передача данных EMC <--> COM
В ini файл [DISPLAY]:
Код: Выделить всё
EMBED_TAB_NAME = com
EMBED_TAB_COMMAND = halcmd loadusr gladevcp -u com.py -H com_tab.hal -x {XID} com_tab.ui
- Nick
- Мастер
- Сообщения: 22776
- Зарегистрирован: 23 ноя 2009, 16:45
- Репутация: 1735
- Заслуга: Developer
- Откуда: Gatchina, Saint-Petersburg distr., Russia
- Контактная информация:
Re: Передача данных EMC <--> COM
Что и прямо работает?
Просто для меня com - это загадка
Просто для меня com - это загадка
-
- Мастер
- Сообщения: 8340
- Зарегистрирован: 28 ноя 2011, 00:25
- Репутация: 1589
- Контактная информация:
Re: Передача данных EMC <--> COM
Да:Nick писал(а):Что и прямо работает?
http://www.youtube.com/watch?v=smQsVb-7gMg
(надо доделать ввод настроек)
-
- Опытный
- Сообщения: 128
- Зарегистрирован: 04 июн 2012, 23:46
- Репутация: 5
- Контактная информация:
Re: Передача данных EMC <--> COM
А может ещё расскажите как постоянно данные принимать и расшифровывать.
Захотелось на Arduino себе пульт собрать с энкодером и прочими удобностями. С пультом и Arduino проблем нет, а вот как быть с LinuxCNC.
Захотелось на Arduino себе пульт собрать с энкодером и прочими удобностями. С пультом и Arduino проблем нет, а вот как быть с LinuxCNC.
- Nick
- Мастер
- Сообщения: 22776
- Зарегистрирован: 23 ноя 2009, 16:45
- Репутация: 1735
- Заслуга: Developer
- Откуда: Gatchina, Saint-Petersburg distr., Russia
- Контактная информация:
Re: Передача данных EMC <--> COM
Для ардуино есть специальный компонент на питоне, он может экспортировать аналоговые и битовые пины. А что именно хочешь сделать?
PS Arduino Linux CNC - советы начинающим #1
PS Arduino Linux CNC - советы начинающим #1
-
- Опытный
- Сообщения: 128
- Зарегистрирован: 04 июн 2012, 23:46
- Репутация: 5
- Контактная информация:
Re: Передача данных EMC <--> COM
Сейчас посмотрю.
Сейчас правда у меня только Arduino Mega с сенсорным 3,5дюйма экраном. Думаю, это слишком. Хочется удобный пульт.
Сейчас правда у меня только Arduino Mega с сенсорным 3,5дюйма экраном. Думаю, это слишком. Хочется удобный пульт.
- Nick
- Мастер
- Сообщения: 22776
- Зарегистрирован: 23 ноя 2009, 16:45
- Репутация: 1735
- Заслуга: Developer
- Откуда: Gatchina, Saint-Petersburg distr., Russia
- Контактная информация:
Re: Передача данных EMC <--> COM
Слишком много или слишком мало ?
А ты в программировании Arduino разбираешься?
А ты в программировании Arduino разбираешься?