LinuxCNC и modbus

Обсуждение установки, настройки и использования LinuxCNC. Вопросы по Gкоду.
nkp
Мастер
Сообщения: 8340
Зарегистрирован: 28 ноя 2011, 00:25
Репутация: 1589
Контактная информация:

Re: LinuxCNC и modbus

Сообщение 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 — (контрольная сумма) заключительное двухбайтное поле кадра- завершает кадры и запроса и ответа.(формируется автоматически)
Вот здесь ставим индекс переменной:
Аватара пользователя
Nick
Мастер
Сообщения: 22776
Зарегистрирован: 23 ноя 2009, 16:45
Репутация: 1735
Заслуга: Developer
Откуда: Gatchina, Saint-Petersburg distr., Russia
Контактная информация:

Re: LinuxCNC и modbus

Сообщение Nick »

nkp писал(а):По платке пурелоджика
Прикольно, на этой фотке маркировка не затерта, наверное это поддельная плата :hehehe:.
nkp писал(а):наименование порта у вас может быть другим
А откуда его брать?
nkp писал(а):Например:передаем "17" -это в BIN- 10001. Значит ряд будет выглядеть так-00010001 -где "0"-это выкл ,а "1"-это вкл
Т.е. вся команда кодируется байтом, это же 256 вариантов...
Может можно сделать все в одной обработке:

делаем обработку %QW0 = %QW0 + 2^x где 2^x - представление номера реле.

ее подключаем к ----%i01| |---

перед всем этим ставим %QW0=0

И ко всему этому подключаем условия ---%IXX|/\|-- или ---%IXX|\/|-- т.е. растящая или ниспадающая грань сигнала.

ЗЫ Молодец, наконец-то хоть кто-то сумел победить этот modbus :good: !!!
nkp
Мастер
Сообщения: 8340
Зарегистрирован: 28 ноя 2011, 00:25
Репутация: 1589
Контактная информация:

Re: LinuxCNC и modbus

Сообщение nkp »

Nick писал(а):А откуда его брать?

Код: Выделить всё

python
import serial
a=serial.Serial(0)
a
вывод будет примерно таким

Код: Выделить всё

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 - ваш порт
nkp
Мастер
Сообщения: 8340
Зарегистрирован: 28 ноя 2011, 00:25
Репутация: 1589
Контактная информация:

Re: LinuxCNC и modbus

Сообщение nkp »

Nick писал(а):делаем обработку %QW0 = %QW0 + 2^x где 2^x - представление номера реле. ее подключаем к ----%i01| |--- перед всем этим ставим %QW0=0 И ко всему этому подключаем условия ---%IXX|/\|-- или ---%IXX|\/|-- т.е. растящая или ниспадающая грань сигнала.
Я вот пока на ладдере схемку набросал: (можно прилепить задержки для надежности)
примерно как у тебя в примере,только упрощенно :)
%QW0=0 - не понял зачем нам это?
Аватара пользователя
Nick
Мастер
Сообщения: 22776
Зарегистрирован: 23 ноя 2009, 16:45
Репутация: 1735
Заслуга: Developer
Откуда: Gatchina, Saint-Petersburg distr., Russia
Контактная информация:

Re: LinuxCNC и modbus

Сообщение Nick »

Чтобы сбрасывать значение перед накоплением нового. Или надо делать %QW0 and 11111111 если надо включить и %QW0 and 11110111 если выключить.
nkp
Мастер
Сообщения: 8340
Зарегистрирован: 28 ноя 2011, 00:25
Репутация: 1589
Контактная информация:

Re: LinuxCNC и modbus

Сообщение 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
protocol_modbus_master.c.tar.gz
(6.12 КБ) 1340 скачиваний
http://git.linuxcnc.org/gitweb?p=linuxc ... 2d458ac5d7
Но не уверен -достаточно ли изменить только здесь?
ЗЫ написал автору ладдера-но он наверно не понял мой гуглоинглиш(тем более он-француз :hehehe: )
Аватара пользователя
Serg
Мастер
Сообщения: 21923
Зарегистрирован: 17 апр 2012, 14:58
Репутация: 5181
Заслуга: c781c134843e0c1a3de9
Настоящее имя: Сергей
Откуда: Москва
Контактная информация:

Re: LinuxCNC и modbus

Сообщение Serg »

Достаточно. Возможно потребуется соотв. изменить два предыдущих параметра.
Я не Христос, рыбу не раздаю, но могу научить, как сделать удочку...
nkp
Мастер
Сообщения: 8340
Зарегистрирован: 28 ноя 2011, 00:25
Репутация: 1589
Контактная информация:

Re: LinuxCNC и modbus

Сообщение nkp »

s3301 писал(а):Возможно потребуется соотв. изменить два предыдущих параметра.
Порт и скорость - выбор сделан в gui.
Стоп бит,число бит- все подходит-нам нужен 8E1
Аватара пользователя
Nick
Мастер
Сообщения: 22776
Зарегистрирован: 23 ноя 2009, 16:45
Репутация: 1735
Заслуга: Developer
Откуда: Gatchina, Saint-Petersburg distr., Russia
Контактная информация:

Re: LinuxCNC и modbus

Сообщение Nick »

nkp писал(а):ModbusSerialParity = 0; // <<<<<<<<<<<<<<так None  ;  нам нужна наверно  2  -parity=serial.PARITY_EVEN
Я чего-то не понимаю, здесь везде константы... even= четный, я конечно не знаю, что это значит в serial, но там наверное стоит деление по модулю 2, и проверяется
a mod 2 = parity.... т.е. должно быть или 1 при нечетном или 0 при четном
nkp писал(а):гуглоинглиш(тем более он-француз )
так надо было на гуглфренче писать :)
nkp
Мастер
Сообщения: 8340
Зарегистрирован: 28 ноя 2011, 00:25
Репутация: 1589
Контактная информация:

Re: LinuxCNC и modbus

Сообщение 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...
Аватара пользователя
Serg
Мастер
Сообщения: 21923
Зарегистрирован: 17 апр 2012, 14:58
Репутация: 5181
Заслуга: c781c134843e0c1a3de9
Настоящее имя: Сергей
Откуда: Москва
Контактная информация:

Re: LinuxCNC и modbus

Сообщение Serg »

Nick писал(а): так надо было на гуглфренче писать :)
Не факт. Например чтобы твой китайский поняли китайцы желательно с русского перевести на английский, а результат гуглом с английского на китайский. :hehehe:
Я не Христос, рыбу не раздаю, но могу научить, как сделать удочку...
nkp
Мастер
Сообщения: 8340
Зарегистрирован: 28 ноя 2011, 00:25
Репутация: 1589
Контактная информация:

Re: LinuxCNC и modbus

Сообщение nkp »

в продолжение рыскания по исходникам-
изменил в двух местах:
serial_linux.c.tar.gz
(2.52 КБ) 1230 скачиваний

Код: Выделить всё

      switch (ModbusSerialParity)
      {
         case 0:
         default:                      
            PARITYON = PARENB;
            PARITY = 0;
            break;
         case 1:                       
            PARITYON = PARENB;
            PARITY = PARODD;
            break;
         case 2:                        
            PARITYON = 0;
            PARITY = 0;
            break;
protocol_modbus_master.c.tar.gz
(6.12 КБ) 1236 скачиваний

Код: Выделить всё

{ 
        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.
nkp
Мастер
Сообщения: 8340
Зарегистрирован: 28 ноя 2011, 00:25
Репутация: 1589
Контактная информация:

Re: LinuxCNC и modbus

Сообщение nkp »

Здесь файлы конфигурации со схемкой ладдера:
SherlineLathe-2.tar.gz
(6.62 КБ) 1325 скачиваний
для проверки работы все реле выведены на панель
для подключения любого из них к нужному пину-прописываем в 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 =>
(показано как пример-в реалии такого рода сигналы подключаются по другому)
nkp
Мастер
Сообщения: 8340
Зарегистрирован: 28 ноя 2011, 00:25
Репутация: 1589
Контактная информация:

Re: LinuxCNC и modbus

Сообщение 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
каждый лед соответствует реле
nkp
Мастер
Сообщения: 8340
Зарегистрирован: 28 ноя 2011, 00:25
Репутация: 1589
Контактная информация:

Re: LinuxCNC и modbus

Сообщение nkp »

хочу рассмотреть возможность работы Lcnc + mesa 5i25 +mesa 7i77 + modbus
Lcnc в режиме slave
все это для получения достаточного количества физических входов для ПО (пульта оператора ) (рассматривается здесь)
на сегодня в ПО 43 кнопки , 4 галетных переключателя (суммарно 12 положений), 4 переменных резистора,энкодер MPG
добавить сюда смену инструмента (7 входов)
=====================
мысли такие : микроконтроллер с достаточным количеством портов(?) + что то похожее на ENC28J60
modbus_network_guide.pdf
(2.13 МБ) 6157 скачиваний
Lcnc через CL(classicladder) может быть slave ,но в таком режиме толком не тестировался как пишут.
вопрос первый :
какой мк конкретно можно использовать ,чтоб получить много-много(или хотя бы просто много :) ) физических входов????
Аватара пользователя
Lexxa
Мастер
Сообщения: 2703
Зарегистрирован: 16 дек 2011, 16:48
Репутация: 319
Настоящее имя: Алексей
Откуда: ryazan
Контактная информация:

Re: LinuxCNC и modbus

Сообщение Lexxa »

ENC28J60 оооооочень глючный контроллер. Мы делали на нем железку, так половину кода из апноута пришлось переписывать). В итоге перепрыгнули на какой-то PIC, уже не помню какой, но на брту у него eth из серии 28j60 , получше быол.
Вообще ничего ни мешает поставить STM32, а входы мультиплексировать.
:bender:
nkp
Мастер
Сообщения: 8340
Зарегистрирован: 28 ноя 2011, 00:25
Репутация: 1589
Контактная информация:

Re: LinuxCNC и modbus

Сообщение nkp »

у меня в этом нет никакого опыта(мягко выражаясь :) )
Lexxa писал(а):а входы мультиплексировать.
я так понял что с этим вопрос количества входов мк снимается?
kernel
Опытный
Сообщения: 158
Зарегистрирован: 12 мар 2011, 15:48
Репутация: 17
Откуда: Красноярск
Контактная информация:

Re: LinuxCNC и modbus

Сообщение kernel »

Lexxa писал(а):ENC28J60 оооооочень глючный контроллер. Мы делали на нем железку, так половину кода из апноута пришлось переписывать). В итоге перепрыгнули на какой-то PIC, уже не помню какой, но на брту у него eth из серии 28j60 , получше быол. ...
"Вы просто не умеете их готовить". ENC28J60 глючный у тех, кто не соблюдает Errata (в том числе, аппаратно), кто использует кривой софт (стек, драйвер), кто допускает банальные аппаратные ошибки (например, согласование уровней и пр.), в том числе в разводке. Правильно собранный девайс на данном контроллере работает "долго и счастливо".
Другое дело, что чип хоть и простой, но уже несколько устаревший. Поэтому, я бы тоже в данном случае смотрел бы в сторону, например stm32 или lpc.
Аватара пользователя
Nick
Мастер
Сообщения: 22776
Зарегистрирован: 23 ноя 2009, 16:45
Репутация: 1735
Заслуга: Developer
Откуда: Gatchina, Saint-Petersburg distr., Russia
Контактная информация:

Re: LinuxCNC и modbus

Сообщение Nick »

А почему именно modbus, у тебя на 5i25 есть еще 8 портов на smart-serial, на них можно повесить очень боольшое количество пинов. В том числе через родные платы меса, или через свой контроллер...
Кстати, у тебя на пульте будут только входы? Выводов вообще нет?
Аватара пользователя
Lexxa
Мастер
Сообщения: 2703
Зарегистрирован: 16 дек 2011, 16:48
Репутация: 319
Настоящее имя: Алексей
Откуда: ryazan
Контактная информация:

Re: LinuxCNC и modbus

Сообщение Lexxa »

kernel писал(а):Правильно собранный девайс на данном контроллере работает "долго и счастливо".
ну значит отладочная макетка у нас была такая, что половину апноута пришлось перепысывать
:bender:
Ответить

Вернуться в «LinuxCNC»