Страница 3 из 6

Re: LinuxCNC и modbus

Добавлено: 04 июн 2012, 08:49
nkp
Пройдемся по всей команде 01 06 00 00 00 0F C9 CE
01 - адрес устройства,которому мы отправляем команду(может быть от 1 до 254) (адрес slave)
прописываем здесь:
(для просмотра содержимого нажмите на ссылку)
Выделение(011).png (5570 просмотров) <a class='original' href='./download/file.php?id=5670&sid=632714f982b621c800f0ad8b8418bbc8&mode=view' target=_blank>Загрузить оригинал (35.06 КБ)</a>
Выделение(012).png (5570 просмотров) <a class='original' href='./download/file.php?id=5671&sid=632714f982b621c800f0ad8b8418bbc8&mode=view' target=_blank>Загрузить оригинал (55.06 КБ)</a>
06 - номер функции (то , что мы делаем с данными)
Ладдер поддерживает команды modbus :1, 2, 3, 4, 5, 6, 15 и 16.
(для просмотра содержимого нажмите на ссылку)
Выделение(009).png (5571 просмотр) <a class='original' href='./download/file.php?id=5669&sid=632714f982b621c800f0ad8b8418bbc8&mode=view' target=_blank>Загрузить оригинал (91.69 КБ)</a>
В данном случае функция 06-запись в один регистр
(для просмотра содержимого нажмите на ссылку)
Выделение(013).png (5570 просмотров) <a class='original' href='./download/file.php?id=5672&sid=632714f982b621c800f0ad8b8418bbc8&mode=view' target=_blank>Загрузить оригинал (54.94 КБ)</a>
00 00 - это адрес нашего регистра
(для просмотра содержимого нажмите на ссылку)
Выделение(014).png (5570 просмотров) <a class='original' href='./download/file.php?id=5673&sid=632714f982b621c800f0ad8b8418bbc8&mode=view' target=_blank>Загрузить оригинал (61.87 КБ)</a>
00 0F - данные (наше число 15)
C9 CE - CRC — (контрольная сумма) заключительное двухбайтное поле кадра- завершает кадры и запроса и ответа.(формируется автоматически)
Вот здесь ставим индекс переменной:
(для просмотра содержимого нажмите на ссылку)
У нас %QW0 (5569 просмотров) <a class='original' href='./download/file.php?id=5675&sid=632714f982b621c800f0ad8b8418bbc8&mode=view' target=_blank>Загрузить оригинал (66.01 КБ)</a>
У нас %QW0

Re: LinuxCNC и modbus

Добавлено: 04 июн 2012, 17:32
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: !!!

Re: LinuxCNC и modbus

Добавлено: 04 июн 2012, 18:44
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 - ваш порт

Re: LinuxCNC и modbus

Добавлено: 04 июн 2012, 18:59
nkp
Nick писал(а):делаем обработку %QW0 = %QW0 + 2^x где 2^x - представление номера реле. ее подключаем к ----%i01| |--- перед всем этим ставим %QW0=0 И ко всему этому подключаем условия ---%IXX|/\|-- или ---%IXX|\/|-- т.е. растящая или ниспадающая грань сигнала.
Я вот пока на ладдере схемку набросал:
(для просмотра содержимого нажмите на ссылку)
Выделение(018).png (5556 просмотров) <a class='original' href='./download/file.php?id=5686&sid=632714f982b621c800f0ad8b8418bbc8&mode=view' target=_blank>Загрузить оригинал (46.39 КБ)</a>
(можно прилепить задержки для надежности)
примерно как у тебя в примере,только упрощенно :)
%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
protocol_modbus_master.c.tar.gz
(6.12 КБ) 1343 скачивания
http://git.linuxcnc.org/gitweb?p=linuxc ... 2d458ac5d7
Но не уверен -достаточно ли изменить только здесь?
ЗЫ написал автору ладдера-но он наверно не понял мой гуглоинглиш(тем более он-француз :hehehe: )

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 писал(а): так надо было на гуглфренче писать :)
Не факт. Например чтобы твой китайский поняли китайцы желательно с русского перевести на английский, а результат гуглом с английского на китайский. :hehehe:

Re: LinuxCNC и modbus

Добавлено: 09 июн 2012, 22:13
nkp
в продолжение рыскания по исходникам-
изменил в двух местах:
serial_linux.c.tar.gz
(2.52 КБ) 1233 скачивания

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

      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 КБ) 1240 скачиваний

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

{ 
        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
Здесь файлы конфигурации со схемкой ладдера:
(для просмотра содержимого нажмите на ссылку)
Выделение(005).png (5498 просмотров) <a class='original' href='./download/file.php?id=5825&sid=632714f982b621c800f0ad8b8418bbc8&mode=view' target=_blank>Загрузить оригинал (121.91 КБ)</a>
SherlineLathe-2.tar.gz
(6.62 КБ) 1329 скачиваний
для проверки работы все реле выведены на панель
для подключения любого из них к нужному пину-прописываем в 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
modbus_network_guide.pdf
(2.13 МБ) 6165 скачиваний
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 писал(а):Правильно собранный девайс на данном контроллере работает "долго и счастливо".
ну значит отладочная макетка у нас была такая, что половину апноута пришлось перепысывать