LinuxCNC и modbus
-
- Мастер
- Сообщения: 8340
- Зарегистрирован: 28 ноя 2011, 00:25
- Репутация: 1589
- Контактная информация:
Re: LinuxCNC и modbus
Пройдемся по всей команде 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 — (контрольная сумма) заключительное двухбайтное поле кадра- завершает кадры и запроса и ответа.(формируется автоматически)
Вот здесь ставим индекс переменной:
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
Прикольно, на этой фотке маркировка не затерта, наверное это поддельная плата .nkp писал(а):По платке пурелоджика
А откуда его брать?nkp писал(а):наименование порта у вас может быть другим
Т.е. вся команда кодируется байтом, это же 256 вариантов...nkp писал(а):Например:передаем "17" -это в BIN- 10001. Значит ряд будет выглядеть так-00010001 -где "0"-это выкл ,а "1"-это вкл
Может можно сделать все в одной обработке:
делаем обработку %QW0 = %QW0 + 2^x где 2^x - представление номера реле.
ее подключаем к ----%i01| |---
перед всем этим ставим %QW0=0
И ко всему этому подключаем условия ---%IXX|/\|-- или ---%IXX|\/|-- т.е. растящая или ниспадающая грань сигнала.
ЗЫ Молодец, наконец-то хоть кто-то сумел победить этот modbus !!!
-
- Мастер
- Сообщения: 8340
- Зарегистрирован: 28 ноя 2011, 00:25
- Репутация: 1589
- Контактная информация:
Re: LinuxCNC и modbus
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)
-
- Мастер
- Сообщения: 8340
- Зарегистрирован: 28 ноя 2011, 00:25
- Репутация: 1589
- Контактная информация:
Re: LinuxCNC и modbus
Я вот пока на ладдере схемку набросал: (можно прилепить задержки для надежности)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
Чтобы сбрасывать значение перед накоплением нового. Или надо делать %QW0 and 11111111 если надо включить и %QW0 and 11110111 если выключить.
-
- Мастер
- Сообщения: 8340
- Зарегистрирован: 28 ноя 2011, 00:25
- Репутация: 1589
- Контактная информация:
Re: LinuxCNC и modbus
Тут возникла маленькая загвоздочка.разбираясь с платкой пользовал ладдер без емс.
А вот встроенный заюзать с наскоку не получилось-нет настройки бита четности-parity.
CL написан на си-вот и вопрос к знающим си-как в исходниках изменить это значение?
Вроде бы это здесь:
Это файл protocol_modbus_master.c
http://git.linuxcnc.org/gitweb?p=linuxc ... 2d458ac5d7
Но не уверен -достаточно ли изменить только здесь?
ЗЫ написал автору ладдера-но он наверно не понял мой гуглоинглиш(тем более он-француз )
А вот встроенный заюзать с наскоку не получилось-нет настройки бита четности-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 ( );
Но не уверен -достаточно ли изменить только здесь?
ЗЫ написал автору ладдера-но он наверно не понял мой гуглоинглиш(тем более он-француз )
- Serg
- Мастер
- Сообщения: 21923
- Зарегистрирован: 17 апр 2012, 14:58
- Репутация: 5181
- Заслуга: c781c134843e0c1a3de9
- Настоящее имя: Сергей
- Откуда: Москва
- Контактная информация:
Re: LinuxCNC и modbus
Достаточно. Возможно потребуется соотв. изменить два предыдущих параметра.
Я не Христос, рыбу не раздаю, но могу научить, как сделать удочку...
-
- Мастер
- Сообщения: 8340
- Зарегистрирован: 28 ноя 2011, 00:25
- Репутация: 1589
- Контактная информация:
Re: LinuxCNC и modbus
Порт и скорость - выбор сделан в gui.s3301 писал(а):Возможно потребуется соотв. изменить два предыдущих параметра.
Стоп бит,число бит- все подходит-нам нужен 8E1
- Nick
- Мастер
- Сообщения: 22776
- Зарегистрирован: 23 ноя 2009, 16:45
- Репутация: 1735
- Заслуга: Developer
- Откуда: Gatchina, Saint-Petersburg distr., Russia
- Контактная информация:
Re: LinuxCNC и modbus
Я чего-то не понимаю, здесь везде константы... even= четный, я конечно не знаю, что это значит в serial, но там наверное стоит деление по модулю 2, и проверяетсяnkp писал(а):ModbusSerialParity = 0; // <<<<<<<<<<<<<<так None ; нам нужна наверно 2 -parity=serial.PARITY_EVEN
a mod 2 = parity.... т.е. должно быть или 1 при нечетном или 0 при четном
так надо было на гуглфренче писатьnkp писал(а):гуглоинглиш(тем более он-француз )
-
- Мастер
- Сообщения: 8340
- Зарегистрирован: 28 ноя 2011, 00:25
- Репутация: 1589
- Контактная информация:
Re: LinuxCNC и modbus
так и вышло-написал на французком-сразу ответил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
Не факт. Например чтобы твой китайский поняли китайцы желательно с русского перевести на английский, а результат гуглом с английского на китайский.Nick писал(а): так надо было на гуглфренче писать
Я не Христос, рыбу не раздаю, но могу научить, как сделать удочку...
-
- Мастер
- Сообщения: 8340
- Зарегистрирован: 28 ноя 2011, 00:25
- Репутация: 1589
- Контактная информация:
Re: LinuxCNC и modbus
в продолжение рыскания по исходникам-
изменил в двух местах:
Теперь плата срабатывает.Заодно научился ставить емс из исходников(правда получилось аж с 5-й попытки )
Напомню- с этими изменениями мы получаем настройку ком порта- 8Е1.
изменил в двух местах:
Код: Выделить всё
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;
Напомню- с этими изменениями мы получаем настройку ком порта- 8Е1.
-
- Мастер
- Сообщения: 8340
- Зарегистрирован: 28 ноя 2011, 00:25
- Репутация: 1589
- Контактная информация:
Re: LinuxCNC и modbus
Здесь файлы конфигурации со схемкой ладдера:
для проверки работы все реле выведены на панель
для подключения любого из них к нужному пину-прописываем в custom_postgui1.hal:
(показано как пример-в реалии такого рода сигналы подключаются по другому)
для подключения любого из них к нужному пину-прописываем в 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 =>
-
- Мастер
- Сообщения: 8340
- Зарегистрирован: 28 ноя 2011, 00:25
- Репутация: 1589
- Контактная информация:
Re: LinuxCNC и modbus
Можно подвести итог.
Платы PLA001mb http://www.purelogic.ru/Netshop/portvv/ могут работать с емс ,НО:
для этого надо подправить исходники и установить емс с внесенными изменениями http://cnc-club.ru/forum/viewtopic.php?f=15&t=1868
платка работать будет только одна-в противном случае у всех устройств будет одинаковый идентификатор (1)
плата PLA002mb наверное работать не будет-так как CL через ком порт может работать только в режиме "мастер"
так что выжать по максимуму мы можем только 8 дополнительных выводов (по числу реле)
На фоне плат раширения меса выглядит довольно блекло.Свое основное предназначение для мача думаю вполне оправдано.
пример файла hal: http://www.youtube.com/watch?v=WZ7SzV55q0o
каждый лед соответствует реле
Платы PLA001mb http://www.purelogic.ru/Netshop/portvv/ могут работать с емс ,НО:
для этого надо подправить исходники и установить емс с внесенными изменениями http://cnc-club.ru/forum/viewtopic.php?f=15&t=1868
платка работать будет только одна-в противном случае у всех устройств будет одинаковый идентификатор (1)
плата PLA002mb наверное работать не будет-так как CL через ком порт может работать только в режиме "мастер"
так что выжать по максимуму мы можем только 8 дополнительных выводов (по числу реле)
На фоне плат раширения меса выглядит довольно блекло.Свое основное предназначение для мача думаю вполне оправдано.
пример файла hal: http://www.youtube.com/watch?v=WZ7SzV55q0o
каждый лед соответствует реле
-
- Мастер
- Сообщения: 8340
- Зарегистрирован: 28 ноя 2011, 00:25
- Репутация: 1589
- Контактная информация:
Re: LinuxCNC и modbus
хочу рассмотреть возможность работы Lcnc + mesa 5i25 +mesa 7i77 + modbus
Lcnc в режиме slave
все это для получения достаточного количества физических входов для ПО (пульта оператора ) (рассматривается здесь)
на сегодня в ПО 43 кнопки , 4 галетных переключателя (суммарно 12 положений), 4 переменных резистора,энкодер MPG
добавить сюда смену инструмента (7 входов)
=====================
мысли такие : микроконтроллер с достаточным количеством портов(?) + что то похожее на ENC28J60 Lcnc через CL(classicladder) может быть slave ,но в таком режиме толком не тестировался как пишут.
вопрос первый :
какой мк конкретно можно использовать ,чтоб получить много-много(или хотя бы просто много ) физических входов????
Lcnc в режиме slave
все это для получения достаточного количества физических входов для ПО (пульта оператора ) (рассматривается здесь)
на сегодня в ПО 43 кнопки , 4 галетных переключателя (суммарно 12 положений), 4 переменных резистора,энкодер MPG
добавить сюда смену инструмента (7 входов)
=====================
мысли такие : микроконтроллер с достаточным количеством портов(?) + что то похожее на ENC28J60 Lcnc через CL(classicladder) может быть slave ,но в таком режиме толком не тестировался как пишут.
вопрос первый :
какой мк конкретно можно использовать ,чтоб получить много-много(или хотя бы просто много ) физических входов????
- Lexxa
- Мастер
- Сообщения: 2703
- Зарегистрирован: 16 дек 2011, 16:48
- Репутация: 319
- Настоящее имя: Алексей
- Откуда: ryazan
- Контактная информация:
Re: LinuxCNC и modbus
ENC28J60 оооооочень глючный контроллер. Мы делали на нем железку, так половину кода из апноута пришлось переписывать). В итоге перепрыгнули на какой-то PIC, уже не помню какой, но на брту у него eth из серии 28j60 , получше быол.
Вообще ничего ни мешает поставить STM32, а входы мультиплексировать.
Вообще ничего ни мешает поставить STM32, а входы мультиплексировать.
-
- Мастер
- Сообщения: 8340
- Зарегистрирован: 28 ноя 2011, 00:25
- Репутация: 1589
- Контактная информация:
Re: LinuxCNC и modbus
у меня в этом нет никакого опыта(мягко выражаясь )
я так понял что с этим вопрос количества входов мк снимается?Lexxa писал(а):а входы мультиплексировать.
-
- Опытный
- Сообщения: 158
- Зарегистрирован: 12 мар 2011, 15:48
- Репутация: 17
- Откуда: Красноярск
- Контактная информация:
Re: LinuxCNC и modbus
"Вы просто не умеете их готовить". ENC28J60 глючный у тех, кто не соблюдает Errata (в том числе, аппаратно), кто использует кривой софт (стек, драйвер), кто допускает банальные аппаратные ошибки (например, согласование уровней и пр.), в том числе в разводке. Правильно собранный девайс на данном контроллере работает "долго и счастливо".Lexxa писал(а):ENC28J60 оооооочень глючный контроллер. Мы делали на нем железку, так половину кода из апноута пришлось переписывать). В итоге перепрыгнули на какой-то PIC, уже не помню какой, но на брту у него eth из серии 28j60 , получше быол. ...
Другое дело, что чип хоть и простой, но уже несколько устаревший. Поэтому, я бы тоже в данном случае смотрел бы в сторону, например stm32 или lpc.
- Nick
- Мастер
- Сообщения: 22776
- Зарегистрирован: 23 ноя 2009, 16:45
- Репутация: 1735
- Заслуга: Developer
- Откуда: Gatchina, Saint-Petersburg distr., Russia
- Контактная информация:
Re: LinuxCNC и modbus
А почему именно modbus, у тебя на 5i25 есть еще 8 портов на smart-serial, на них можно повесить очень боольшое количество пинов. В том числе через родные платы меса, или через свой контроллер...
Кстати, у тебя на пульте будут только входы? Выводов вообще нет?
Кстати, у тебя на пульте будут только входы? Выводов вообще нет?
- Lexxa
- Мастер
- Сообщения: 2703
- Зарегистрирован: 16 дек 2011, 16:48
- Репутация: 319
- Настоящее имя: Алексей
- Откуда: ryazan
- Контактная информация:
Re: LinuxCNC и modbus
ну значит отладочная макетка у нас была такая, что половину апноута пришлось перепысыватьkernel писал(а):Правильно собранный девайс на данном контроллере работает "долго и счастливо".