Страница 3 из 6
Re: LinuxCNC и modbus
Добавлено: 04 июн 2012, 08:49
nkp
Пройдемся по всей команде 01 06 00 00 00 0F C9 CE
01 - адрес устройства,которому мы отправляем команду(может быть от 1 до 254) (адрес slave)
прописываем здесь:
06 - номер функции (то , что мы делаем с данными)
Ладдер поддерживает команды
modbus :1, 2, 3, 4, 5, 6, 15 и 16.
В данном случае функция 06-запись в один регистр
00 00 - это адрес нашего регистра
00 0F - данные (наше число 15)
C9 CE - CRC — (контрольная сумма) заключительное двухбайтное поле кадра- завершает кадры и запроса и ответа.(формируется автоматически)
Вот здесь ставим индекс переменной:
Re: LinuxCNC и modbus
Добавлено: 04 июн 2012, 17:32
Nick
nkp писал(а):По платке пурелоджика
Прикольно, на этой фотке маркировка не затерта, наверное это поддельная плата
.
nkp писал(а):наименование порта у вас может быть другим
А откуда его брать?
nkp писал(а):Например:передаем "17" -это в BIN- 10001. Значит ряд будет выглядеть так-00010001 -где "0"-это выкл ,а "1"-это вкл
Т.е. вся команда кодируется байтом, это же 256 вариантов...
Может можно сделать все в одной обработке:
делаем обработку %QW0 = %QW0 + 2^x где 2^x - представление номера реле.
ее подключаем к ----%i01| |---
перед всем этим ставим %QW0=0
И ко всему этому подключаем условия ---%IXX|/\|-- или ---%IXX|\/|-- т.е. растящая или ниспадающая грань сигнала.
ЗЫ Молодец, наконец-то хоть кто-то сумел победить этот
modbus !!!
Re: LinuxCNC и modbus
Добавлено: 04 июн 2012, 18:44
nkp
Nick писал(а):А откуда его брать?
вывод будет примерно таким
Код: Выделить всё
Serial<id=0xb76eaa0c, open=True>(port='/dev/ttyS0', baudrate=9600, bytesize=8, parity='N', stopbits=1, timeout=None, xonxoff=0, rtscts=0, dsrdtr=0)
/dev/ttyS0 - ваш порт
Re: LinuxCNC и modbus
Добавлено: 04 июн 2012, 18:59
nkp
Nick писал(а):делаем обработку %QW0 = %QW0 + 2^x где 2^x - представление номера реле. ее подключаем к ----%i01| |--- перед всем этим ставим %QW0=0 И ко всему этому подключаем условия ---%IXX|/\|-- или ---%IXX|\/|-- т.е. растящая или ниспадающая грань сигнала.
Я вот пока на ладдере схемку набросал:
(можно прилепить задержки для надежности)
примерно как у тебя в примере,только упрощенно
%QW0=0 - не понял зачем нам это?
Re: LinuxCNC и modbus
Добавлено: 04 июн 2012, 21:33
Nick
Чтобы сбрасывать значение перед накоплением нового. Или надо делать %QW0 and 11111111 если надо включить и %QW0 and 11110111 если выключить.
Re: LinuxCNC и modbus
Добавлено: 08 июн 2012, 10:27
nkp
Тут возникла маленькая загвоздочка.разбираясь с платкой пользовал ладдер без емс.
А вот встроенный заюзать с наскоку не получилось-нет настройки бита четности-parity.
CL написан на си-вот и вопрос к знающим си-как в исходниках изменить это значение?
Вроде бы это здесь:
Код: Выделить всё
void InitModbusMasterBeforeReadConf( void )
{
ModbusSerialPortNameUsed[ 0 ] = '\0';
ModbusSerialSpeed = 9600;
ModbusSerialDataBits = 8;
ModbusSerialStopBits = 1;
ModbusSerialParity = 0; // <<<<<<<<<<<<<<так None ; нам нужна наверно 2 -parity=serial.PARITY_EVEN
ModbusEleOffset = 0;
ModbusSerialUseRtsToSend = 0;
ModbusTimeInterFrame = 100;
ModbusTimeOutReceipt = 500;
ModbusTimeAfterTransmit = 0;
ModbusDebugLevel= 0;
MapCoilRead = 0;
MapCoilWrite = 0;
MapInputs = 0;
MapHolding = 0;
MapRegisterRead = 0;
MapRegisterWrite = 0;
InitModbusMasterParams ( );
Это файл protocol_modbus_master.c
http://git.linuxcnc.org/gitweb?p=linuxc ... 2d458ac5d7
Но не уверен -достаточно ли изменить только здесь?
ЗЫ написал автору ладдера-но он наверно не понял мой гуглоинглиш(тем более он-француз
)
Re: LinuxCNC и modbus
Добавлено: 08 июн 2012, 15:15
Serg
Достаточно. Возможно потребуется соотв. изменить два предыдущих параметра.
Re: LinuxCNC и modbus
Добавлено: 08 июн 2012, 15:20
nkp
s3301 писал(а):Возможно потребуется соотв. изменить два предыдущих параметра.
Порт и скорость - выбор сделан в gui.
Стоп бит,число бит- все подходит-нам нужен 8E1
Re: LinuxCNC и modbus
Добавлено: 08 июн 2012, 21:39
Nick
nkp писал(а):ModbusSerialParity = 0; // <<<<<<<<<<<<<<так None ; нам нужна наверно 2 -parity=serial.PARITY_EVEN
Я чего-то не понимаю, здесь везде константы... even= четный, я конечно не знаю, что это значит в serial, но там наверное стоит деление по модулю 2, и проверяется
a mod 2 = parity.... т.е. должно быть или 1 при нечетном или 0 при четном
nkp писал(а):гуглоинглиш(тем более он-француз )
так надо было на гуглфренче писать
Re: LinuxCNC и modbus
Добавлено: 08 июн 2012, 21:44
nkp
Nick писал(а):так надо было на гуглфренче писать
так и вышло-написал на французком-сразу ответил
Код: Выделить всё
For parity value, see here:
switch (Parity)
{
case 0:
default: //none
PARITYON = 0;
PARITY = 0;
break;
case 1: //odd
PARITYON = PARENB;
PARITY = PARODD;
break;
case 2: //even
PARITYON = PARENB;
PARITY = 0;
break;
} //end of switch parity
And yes, 2 if for even if you prefer/need to modify directly the source
code...
Re: LinuxCNC и modbus
Добавлено: 09 июн 2012, 01:24
Serg
Nick писал(а):
так надо было на гуглфренче писать
Не факт. Например чтобы твой китайский поняли китайцы желательно с русского перевести на английский, а результат гуглом с английского на китайский.
Re: LinuxCNC и modbus
Добавлено: 09 июн 2012, 22:13
nkp
в продолжение рыскания по исходникам-
изменил в двух местах:
Код: Выделить всё
switch (ModbusSerialParity)
{
case 0:
default:
PARITYON = PARENB;
PARITY = 0;
break;
case 1:
PARITYON = PARENB;
PARITY = PARODD;
break;
case 2:
PARITYON = 0;
PARITY = 0;
break;
Код: Выделить всё
{
ModbusSerialPortNameUsed[ 0 ] = '\0';
ModbusSerialSpeed = 9600;
ModbusSerialDataBits = 8;
ModbusSerialStopBits = 1;
ModbusSerialParity = 2;
ModbusEleOffset = 0;
ModbusSerialUseRtsToSend = 0;
ModbusTimeInterFrame = 100;
ModbusTimeOutReceipt = 500;
ModbusTimeAfterTransmit = 0;
ModbusDebugLevel= 0;
MapCoilRead = 0;
MapCoilWrite = 0;
Теперь плата срабатывает.Заодно научился ставить емс из исходников(правда получилось аж с 5-й попытки
)
Напомню- с этими изменениями мы получаем настройку ком порта- 8Е1.
Re: LinuxCNC и modbus
Добавлено: 10 июн 2012, 08:39
nkp
Здесь файлы конфигурации со схемкой ладдера:
для проверки работы все реле выведены на панель
для подключения любого из них к нужному пину-прописываем в custom_postgui1.hal:
Код: Выделить всё
net R1 pyvcp.relay1 => classicladder.0.in-01
net R2 pyvcp.relay2 => classicladder.0.in-02
net R3 pyvcp.relay3 => classicladder.0.in-03
net R4 pyvcp.relay4 => classicladder.0.in-04
net R5 pyvcp.relay5 => classicladder.0.in-05
net R6 pyvcp.relay6 => classicladder.0.in-06
net R7 pyvcp.relay7 => classicladder.0.in-07
net R8 pyvcp.relay8 => classicladder.0.in-08
net s1 classicladder.0.out-01 => halui.spindle.start
#net s2 classicladder.0.out-02 =>
#net s3 classicladder.0.out-03 =>
#net s4 classicladder.0.out-04 =>
#net s5 classicladder.0.out-05 =>
#net s6 classicladder.0.out-06 =>
#net s7 classicladder.0.out-07 =>
#net s8 classicladder.0.out-08 =>
(показано как пример-в реалии такого рода сигналы подключаются по другому)
Re: LinuxCNC и modbus
Добавлено: 16 июн 2012, 13:58
nkp
Можно подвести итог.
Платы PLA001mb
http://www.purelogic.ru/Netshop/portvv/ могут работать с емс ,НО:
для этого надо подправить исходники и установить емс с внесенными изменениями
http://cnc-club.ru/forum/viewtopic.php?f=15&t=1868
платка работать будет только одна-в противном случае у всех устройств будет одинаковый идентификатор (1)
плата PLA002mb наверное работать не будет-так как CL через ком порт может работать только в режиме "мастер"
так что выжать по максимуму мы можем только 8 дополнительных выводов (по числу реле)
На фоне плат раширения меса выглядит довольно блекло.Свое основное предназначение для мача думаю вполне оправдано.
пример файла hal:
(для просмотра содержимого нажмите на ссылку)Код: Выделить всё
net R1 pyvcp.relay1 => classicladder.0.in-01
net R2 iocontrol.0.coolant-flood => classicladder.0.in-02
net R3 motion.spindle-forward => classicladder.0.in-03
net R4 motion.spindle-reverse => classicladder.0.in-04
net R5 motion.digital-out-00 => classicladder.0.in-05
net R6 pyvcp.relay6 => classicladder.0.in-06
net R7 pyvcp.relay7 => classicladder.0.in-07
net R8 pyvcp.relay8 => classicladder.0.in-08
net s1 classicladder.0.out-01 => halui.spindle.start
#net s2 classicladder.0.out-02 =>
#net s3 classicladder.0.out-03 =>
#net s4 classicladder.0.out-04 =>
#net s5 classicladder.0.out-05 =>
#net s6 classicladder.0.out-06 =>
#net s7 classicladder.0.out-07 =>
#net s8 classicladder.0.out-08 =>
Код: Выделить всё
f50 s300 m3
g1 z8
m8 m5
g1 x8
m9 m4
g1 z0
m5
g1 x0
m64 P00
g4 P2
g1 z8
m65 P00
m2
http://www.youtube.com/watch?v=WZ7SzV55q0o
каждый лед соответствует реле
Re: LinuxCNC и modbus
Добавлено: 12 янв 2013, 11:07
nkp
хочу рассмотреть возможность работы Lcnc + mesa 5i25 +mesa 7i77 +
modbus
Lcnc в режиме slave
все это для получения достаточного количества физических входов для ПО (пульта оператора ) (рассматривается
здесь)
на сегодня в ПО 43 кнопки , 4 галетных переключателя (суммарно 12 положений), 4 переменных резистора,энкодер MPG
добавить сюда смену инструмента (7 входов)
=====================
мысли такие : микроконтроллер с достаточным количеством портов(?) + что то похожее на ENC28J60
Lcnc через CL(classicladder) может быть slave ,но в таком режиме толком не тестировался как пишут.
вопрос первый :
какой мк конкретно можно использовать ,чтоб получить много-много(или хотя бы просто много
) физических входов????
Re: LinuxCNC и modbus
Добавлено: 12 янв 2013, 11:15
Lexxa
ENC28J60 оооооочень глючный контроллер. Мы делали на нем железку, так половину кода из апноута пришлось переписывать). В итоге перепрыгнули на какой-то PIC, уже не помню какой, но на брту у него eth из серии 28j60 , получше быол.
Вообще ничего ни мешает поставить STM32, а входы мультиплексировать.
Re: LinuxCNC и modbus
Добавлено: 12 янв 2013, 11:30
nkp
у меня в этом нет никакого опыта(мягко выражаясь
)
Lexxa писал(а):а входы мультиплексировать.
я так понял что с этим вопрос количества входов мк снимается?
Re: LinuxCNC и modbus
Добавлено: 12 янв 2013, 11:39
kernel
Lexxa писал(а):ENC28J60 оооооочень глючный контроллер. Мы делали на нем железку, так половину кода из апноута пришлось переписывать). В итоге перепрыгнули на какой-то PIC, уже не помню какой, но на брту у него eth из серии 28j60 , получше быол. ...
"Вы просто не умеете их готовить". ENC28J60 глючный у тех, кто не соблюдает Errata (в том числе, аппаратно), кто использует кривой софт (стек, драйвер), кто допускает банальные аппаратные ошибки (например, согласование уровней и пр.), в том числе в разводке. Правильно собранный девайс на данном контроллере работает "долго и счастливо".
Другое дело, что чип хоть и простой, но уже несколько устаревший. Поэтому, я бы тоже в данном случае смотрел бы в сторону, например stm32 или lpc.
Re: LinuxCNC и modbus
Добавлено: 14 янв 2013, 11:19
Nick
А почему именно modbus, у тебя на 5i25 есть еще 8 портов на smart-serial, на них можно повесить очень боольшое количество пинов. В том числе через родные платы меса, или через свой контроллер...
Кстати, у тебя на пульте будут только входы? Выводов вообще нет?
Re: LinuxCNC и modbus
Добавлено: 14 янв 2013, 11:26
Lexxa
kernel писал(а):Правильно собранный девайс на данном контроллере работает "долго и счастливо".
ну значит отладочная макетка у нас была такая, что половину апноута пришлось перепысывать