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

Re: LinuxCNC и modbus

Добавлено: 05 апр 2012, 17:53
aegis
[quote="Nick"]
нурка нет, этот и то еле нашел, 500р пришлось отдать за него!
уж намного проще и дешевле было в писиай купить переходник. я покупал лпт и 2 комовских за 10уе. была вынужденная мера так как штатного лпт на материнке нет. но это типа оффтоп в данной теме, но есть мысль что с физическим и виртуальным ком портом может все работать совсем по разному

Re: LinuxCNC и modbus

Добавлено: 05 апр 2012, 22:10
Nick
ком на плате есть, нету шнурка нужного COM-COM разнополого :(. поэтому взял переходник... Его если что можно до завтра сдать, если у нас по бухгалтерии его еще не провели :)...

Re: LinuxCNC и modbus

Добавлено: 05 апр 2012, 22:23
aegis
Nick, дык спаять делов 3 минуты. там максимум 9 проводков то всего)))

Re: LinuxCNC и modbus

Добавлено: 05 апр 2012, 22:27
Nick
Об этом я чего-то не подумал :). А экран или что-то типа того надо? И где разъемы взять?

Re: LinuxCNC и modbus

Добавлено: 05 апр 2012, 23:09
aegis
вместо экрана можно тупо фольгой обвернуть, а разъемы на радиорынке искать надо. спрашивать надо DB9-F DB9-M (фемейл и мейл, тобишь DB9 мама и папа по нашему спроси думаю поймут. штырек это папа, дырочка это мама) цена до 20 рублей на ваших должна быть типа. в чип дипе к примеру http://www.chipdip.ru/catalog/show/d-su ... spx?gq=DB9 и http://www.chipdip.ru/catalog/show/comp ... spx?gq=DB9

Re: LinuxCNC и modbus

Добавлено: 06 апр 2012, 09:49
psha
Можно даже не паять, если взять разъемы на шлейф
http://www.brownbear.ru/goods/47.html

На другую сторону можно насживать гребенку, если нет DSUB выхода на плате

Re: LinuxCNC и modbus

Добавлено: 06 апр 2012, 16:49
Nick
Блин и почему я раньше эту тему не поднял, сэкономил бы 500р ... :(
Но ничего, может кому-нибудь продам потом за пол цены :).

Re: LinuxCNC и modbus

Добавлено: 14 апр 2012, 12:00
nkp
Nick писал(а):Скачал программу http://www.modbusdriver.com/modpoll.html для общения по modbus.
А как ее запускать? Там файл modpoll ,пробовал делать его исполн. - не получается. :wik:

Re: LinuxCNC и modbus

Добавлено: 14 апр 2012, 23:25
Nick
А чего говорит? У меня вроде запустился...

Re: LinuxCNC и modbus

Добавлено: 14 апр 2012, 23:49
nkp
Протестировал 8 программок для мониротинга передачи по протоколу modbus.Все под вин-но некоторые работают из под wine.Вот остановился на compump
Рабочий стол 1_070.png (7284 просмотра) <a class='original' href='./download/file.php?id=5112&mode=view' target=_blank>Загрузить оригинал (139.61 КБ)</a>
Он "слышит" CL.
cpmsetup.txt
расширение .exe
(702.73 КБ) 1370 скачиваний

Re: LinuxCNC и modbus

Добавлено: 16 апр 2012, 13:02
nkp
При передаче(и приеме) данных modbus использует для проверки crc16.Вот с ним вопросов больше чем ответов хотелось бы :) .
Тем более,что в описании его исчисления используются матерные слова (e.g. " полином " )
Пример
Есть реальные данные,исходящие из CL работающего master
Выделение_076.png
Выделение_076.png (3.98 КБ) 7269 просмотров
Вот структура передаваемых данных
Выделение_077.png (7269 просмотров) <a class='original' href='./download/file.php?id=5118&mode=view' target=_blank>Загрузить оригинал (63.33 КБ)</a>
Хотелось бы вычислять crc самому-вот вроде бы помошник http://www.zorc.breitbandkatze.de/crc.html
Но что то не получается. Мож кто сталкивался с практическим вычислением CRC?
Вот кстати родной сишный алгоритм:
(для просмотра содержимого нажмите на ссылку)
  • /* Table of CRC values for high-order byte */
    const static unsigned char auchCRCHi[] = {
    0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0,
    0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41,
    0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0,
    0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40,
    0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1,
    0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41,
    0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1,
    0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41,
    0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0,
    0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40,
    0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1,
    0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40,
    0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0,
    0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40,
    0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0,
    0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40,
    0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0,
    0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41,
    0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0,
    0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41,
    0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0,
    0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40,
    0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1,
    0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41,
    0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0,
    0x80, 0x41, 0x00, 0xC1, 0x81, 0x40
    } ;
    /* Table of CRC values for low-order byte */
    const static char auchCRCLo[] = {
    0x00, 0xC0, 0xC1, 0x01, 0xC3, 0x03, 0x02, 0xC2, 0xC6, 0x06,
    0x07, 0xC7, 0x05, 0xC5, 0xC4, 0x04, 0xCC, 0x0C, 0x0D, 0xCD,
    0x0F, 0xCF, 0xCE, 0x0E, 0x0A, 0xCA, 0xCB, 0x0B, 0xC9, 0x09,
    0x08, 0xC8, 0xD8, 0x18, 0x19, 0xD9, 0x1B, 0xDB, 0xDA, 0x1A,
    0x1E, 0xDE, 0xDF, 0x1F, 0xDD, 0x1D, 0x1C, 0xDC, 0x14, 0xD4,
    0xD5, 0x15, 0xD7, 0x17, 0x16, 0xD6, 0xD2, 0x12, 0x13, 0xD3,
    0x11, 0xD1, 0xD0, 0x10, 0xF0, 0x30, 0x31, 0xF1, 0x33, 0xF3,
    0xF2, 0x32, 0x36, 0xF6, 0xF7, 0x37, 0xF5, 0x35, 0x34, 0xF4,
    0x3C, 0xFC, 0xFD, 0x3D, 0xFF, 0x3F, 0x3E, 0xFE, 0xFA, 0x3A,
    0x3B, 0xFB, 0x39, 0xF9, 0xF8, 0x38, 0x28, 0xE8, 0xE9, 0x29,
    0xEB, 0x2B, 0x2A, 0xEA, 0xEE, 0x2E, 0x2F, 0xEF, 0x2D, 0xED,
    0xEC, 0x2C, 0xE4, 0x24, 0x25, 0xE5, 0x27, 0xE7, 0xE6, 0x26,
    0x22, 0xE2, 0xE3, 0x23, 0xE1, 0x21, 0x20, 0xE0, 0xA0, 0x60,
    0x61, 0xA1, 0x63, 0xA3, 0xA2, 0x62, 0x66, 0xA6, 0xA7, 0x67,
    0xA5, 0x65, 0x64, 0xA4, 0x6C, 0xAC, 0xAD, 0x6D, 0xAF, 0x6F,
    0x6E, 0xAE, 0xAA, 0x6A, 0x6B, 0xAB, 0x69, 0xA9, 0xA8, 0x68,
    0x78, 0xB8, 0xB9, 0x79, 0xBB, 0x7B, 0x7A, 0xBA, 0xBE, 0x7E,
    0x7F, 0xBF, 0x7D, 0xBD, 0xBC, 0x7C, 0xB4, 0x74, 0x75, 0xB5,
    0x77, 0xB7, 0xB6, 0x76, 0x72, 0xB2, 0xB3, 0x73, 0xB1, 0x71,
    0x70, 0xB0, 0x50, 0x90, 0x91, 0x51, 0x93, 0x53, 0x52, 0x92,
    0x96, 0x56, 0x57, 0x97, 0x55, 0x95, 0x94, 0x54, 0x9C, 0x5C,
    0x5D, 0x9D, 0x5F, 0x9F, 0x9E, 0x5E, 0x5A, 0x9A, 0x9B, 0x5B,
    0x99, 0x59, 0x58, 0x98, 0x88, 0x48, 0x49, 0x89, 0x4B, 0x8B,
    0x8A, 0x4A, 0x4E, 0x8E, 0x8F, 0x4F, 0x8D, 0x4D, 0x4C, 0x8C,
    0x44, 0x84, 0x85, 0x45, 0x87, 0x47, 0x46, 0x86, 0x82, 0x42,
    0x43, 0x83, 0x41, 0x81, 0x80, 0x40
    } ;
    /* CRC16 calc on frame pointed by puchMsg and usDataLen lenght */
    /* Pre-calc routine taken from http://www.modicon.com/techpubs/crc7.html site */
    unsigned short CRC16(unsigned char *puchMsg, unsigned short usDataLen)
    {
    unsigned char uchCRCHi = 0xFF ; /* high CRC byte initialized */
    unsigned char uchCRCLo = 0xFF ; /* low CRC byte initialized */
    unsigned uIndex ; /* will index into CRC lookup table */
    while (usDataLen--) /* pass through message buffer */
    {
    uIndex = uchCRCHi ^ *puchMsg++ ; /* calculate the CRC */
    uchCRCHi = uchCRCLo ^ auchCRCHi[uIndex] ;
    uchCRCLo = auchCRCLo[uIndex] ;
    }
    return (uchCRCHi << 8 | uchCRCLo) ;
    }

Re: LinuxCNC и modbus

Добавлено: 16 апр 2012, 13:49
Nick
я так понимаю, что функция считает значение полинома с коэффициентами из таблиц для старшего и младшего байтов, а потом в ответ выдает int из старшего байта "+" младший байт, где "+" это битовая конкатенация. :)
А для чего тебе эту сумму считать?

Re: LinuxCNC и modbus

Добавлено: 16 апр 2012, 13:50
nkp
Чтоб сформировать ответ .

Re: LinuxCNC и modbus

Добавлено: 16 апр 2012, 13:52
Nick
А на чем пишешь?

Re: LinuxCNC и modbus

Добавлено: 16 апр 2012, 13:59
nkp
Я не пишу ни на чем :)
Программка -симулятор PLC-можно отправить сформированную команду в порт.Но ее (команду) нужно написать ручками.Вот и пытался воспользоваться http://www.zorc.breitbandkatze.de/crc.html для вычисл CRC16

Re: LinuxCNC и modbus

Добавлено: 16 апр 2012, 15:13
Nick
вот оно как :). Получилось?
Может проще родной код компильнуть?

Re: LinuxCNC и modbus

Добавлено: 27 апр 2012, 17:50
Mike
Привет всем
Я раньше пользовался Мач3 он нармално но есть много недостатков.
Я решил перейти в линухСИС но чтоби под модбус.
Я делал Мач3 под модбус PIC ПИК-Микрочип, но ето било давно.

возми загрузи Мач3 он для проверки бесрлатно. там есть настройка/проверка любово модбуса/RTU (Я так делал свой самодельный).
Подключи свою плату и проверь как она работает. сначала входи потом виходи и Ты будеш знать что она работает
и Ты будеш знать адресс и все регистри и соили входов и виходов.

Потом подключи к линухСИС и питайся. для вычисления CRC16 кода лутше исползовать табличний подчет а не канкулятор.
----------------------------------------------
posmotri primer ha asm.


;;#
;;# из массива по указателю FSR0 вычисляется контрольная сумма CRC16 для count_bytes
;;#
;;# второй - crc16_round вызывается в цикле столько раз, для скольки байт надо
;;# будет подсчитать эту сумму!
;;# crc16 calculation round going here...
;;# uIndex = uchCRCHi ^ *puchMsg++ ;
;;# uchCRCHi = uchCRCLo ^ auchCRCHi[uIndex];
;;# uchCRCLo = auchCRCLo[uIndex] ;
;;#---------------------------------------------
;;# сама таблица, располагать ее нужно выравненной по 256
;;####
;
; Таблица для Подсчета CRC
;
org 0x2000
;
CRC16_TABLE_LOCATION
; High
db 0x00,0xc1,0x81,0x40,0x01,0xc0,0x80,0x41
db 0x01,0xc0,0x80,0x41,0x00,0xc1,0x81,0x40
db 0x01,0xc0,0x80,0x41,0x00,0xc1,0x81,0x40
db 0x00,0xc1,0x81,0x40,0x01,0xc0,0x80,0x41
db 0x01,0xc0,0x80,0x41,0x00,0xc1,0x81,0x40
db 0x00,0xc1,0x81,0x40,0x01,0xc0,0x80,0x41
db 0x00,0xc1,0x81,0x40,0x01,0xc0,0x80,0x41
db 0x01,0xc0,0x80,0x41,0x00,0xc1,0x81,0x40
db 0x01,0xc0,0x80,0x41,0x00,0xc1,0x81,0x40
db 0x00,0xc1,0x81,0x40,0x01,0xc0,0x80,0x41
db 0x00,0xc1,0x81,0x40,0x01,0xc0,0x80,0x41
db 0x01,0xc0,0x80,0x41,0x00,0xc1,0x81,0x40
db 0x00,0xc1,0x81,0x40,0x01,0xc0,0x80,0x41
db 0x01,0xc0,0x80,0x41,0x00,0xc1,0x81,0x40
db 0x01,0xc0,0x80,0x41,0x00,0xc1,0x81,0x40
db 0x00,0xc1,0x81,0x40,0x01,0xc0,0x80,0x41
db 0x01,0xc0,0x80,0x41,0x00,0xc1,0x81,0x40
db 0x00,0xc1,0x81,0x40,0x01,0xc0,0x80,0x41
db 0x00,0xc1,0x81,0x40,0x01,0xc0,0x80,0x41
db 0x01,0xc0,0x80,0x41,0x00,0xc1,0x81,0x40
db 0x00,0xc1,0x81,0x40,0x01,0xc0,0x80,0x41
db 0x01,0xc0,0x80,0x41,0x00,0xc1,0x81,0x40
db 0x01,0xc0,0x80,0x41,0x00,0xc1,0x81,0x40
db 0x00,0xc1,0x81,0x40,0x01,0xc0,0x80,0x41
db 0x00,0xc1,0x81,0x40,0x01,0xc0,0x80,0x41
db 0x01,0xc0,0x80,0x41,0x00,0xc1,0x81,0x40
db 0x01,0xc0,0x80,0x41,0x00,0xc1,0x81,0x40
db 0x00,0xc1,0x81,0x40,0x01,0xc0,0x80,0x41
db 0x01,0xc0,0x80,0x41,0x00,0xc1,0x81,0x40
db 0x00,0xc1,0x81,0x40,0x01,0xc0,0x80,0x41
db 0x00,0xc1,0x81,0x40,0x01,0xc0,0x80,0x41
db 0x01,0xc0,0x80,0x41,0x00,0xc1,0x81,0x40

; Low

db 0x00,0xc0,0xc1,0x01,0xc3,0x03,0x02,0xc2
db 0xc6,0x06,0x07,0xc7,0x05,0xc5,0xc4,0x04
db 0xcc,0x0c,0x0d,0xcd,0x0f,0xcf,0xce,0x0e
db 0x0a,0xca,0xcb,0x0b,0xc9,0x09,0x08,0xc8
db 0xd8,0x18,0x19,0xd9,0x1b,0xdb,0xda,0x1a
db 0x1e,0xde,0xdf,0x1f,0xdd,0x1d,0x1c,0xdc
db 0x14,0xd4,0xd5,0x15,0xd7,0x17,0x16,0xd6
db 0xd2,0x12,0x13,0xd3,0x11,0xd1,0xd0,0x10
db 0xf0,0x30,0x31,0xf1,0x33,0xf3,0xf2,0x32
db 0x36,0xf6,0xf7,0x37,0xf5,0x35,0x34,0xf4
db 0x3c,0xfc,0xfd,0x3d,0xff,0x3f,0x3e,0xfe
db 0xfa,0x3a,0x3b,0xfb,0x39,0xf9,0xf8,0x38
db 0x28,0xe8,0xe9,0x29,0xeb,0x2b,0x2a,0xea
db 0xee,0x2e,0x2f,0xef,0x2d,0xed,0xec,0x2c
db 0xe4,0x24,0x25,0xe5,0x27,0xe7,0xe6,0x26
db 0x22,0xe2,0xe3,0x23,0xe1,0x21,0x20,0xe0
db 0xa0,0x60,0x61,0xa1,0x63,0xa3,0xa2,0x62
db 0x66,0xa6,0xa7,0x67,0xa5,0x65,0x64,0xa4
db 0x6c,0xac,0xad,0x6d,0xaf,0x6f,0x6e,0xae
db 0xaa,0x6a,0x6b,0xab,0x69,0xa9,0xa8,0x68
db 0x78,0xb8,0xb9,0x79,0xbb,0x7b,0x7a,0xba
db 0xbe,0x7e,0x7f,0xbf,0x7d,0xbd,0xbc,0x7c
db 0xb4,0x74,0x75,0xb5,0x77,0xb7,0xb6,0x76
db 0x72,0xb2,0xb3,0x73,0xb1,0x71,0x70,0xb0
db 0x50,0x90,0x91,0x51,0x93,0x53,0x52,0x92
db 0x96,0x56,0x57,0x97,0x55,0x95,0x94,0x54
db 0x9c,0x5c,0x5d,0x9d,0x5f,0x9f,0x9e,0x5e
db 0x5a,0x9a,0x9b,0x5b,0x99,0x59,0x58,0x98
db 0x88,0x48,0x49,0x89,0x4b,0x8b,0x8a,0x4a
db 0x4e,0x8e,0x8f,0x4f,0x8d,0x4d,0x4c,0x8c
db 0x44,0x84,0x85,0x45,0x87,0x47,0x46,0x86
db 0x82,0x42,0x43,0x83,0x41,0x81,0x80,0x40

;;#################################################################################################
interrupt_work
;
nop

Re: LinuxCNC и modbus

Добавлено: 03 июн 2012, 17:43
nkp
По платке пурелоджика
Выделение(001).png (7115 просмотров) <a class='original' href='./download/file.php?id=5655&mode=view' target=_blank>Загрузить оригинал (297.9 КБ)</a>
Поуправляем ею из ладдера напрямую.Делаем такую схемку:
(для просмотра содержимого нажмите на ссылку)
Выделение_001.png (7115 просмотров) <a class='original' href='./download/file.php?id=5656&mode=view' target=_blank>Загрузить оригинал (61.96 КБ)</a>
Вот файл:
pur1.clprj.tar.gz
(1.27 КБ) 1291 скачивание
То есть замыкая какой либо контакт мы устанавливаем значение в нужный нам регистр.(приваиванием переменной %QW нужного нам значения)
Настройки порта:
(для просмотра содержимого нажмите на ссылку)
наименование порта у вас может быть другим (7115 просмотров) <a class='original' href='./download/file.php?id=5658&mode=view' target=_blank>Загрузить оригинал (75.83 КБ)</a>
наименование порта у вас может быть другим
Дальнейшие настройки:
(для просмотра содержимого нажмите на ссылку)
Выделение_0031.png (7115 просмотров) <a class='original' href='./download/file.php?id=5660&mode=view' target=_blank>Загрузить оригинал (49.18 КБ)</a>
(для просмотра содержимого нажмите на ссылку)
Выделение_004.png (7115 просмотров) <a class='original' href='./download/file.php?id=5659&mode=view' target=_blank>Загрузить оригинал (122.02 КБ)</a>
Втыкаем платку в порт,подаем питание 12V (можно от компа черный и желтый-полярность не имеет значения.)
Запускаем ладдер,пробуем замыкать контакты %Inn.
Срабатывает то(те) или иное(иные) реле и соответственно загораются светодиоды.
Фото позже.

Re: LinuxCNC и modbus

Добавлено: 03 июн 2012, 20:15
nkp
Комбинация включенных реле зависит от значения ,переданного в регистр.А логика здесь такая-
передаваемое число выраженное в двоичной форме задает последовательность активных-неактивных реле.Например:
передаем "17" -это в BIN- 10001. Значит ряд будет выглядеть так-00010001 -где "0"-это выкл ,а "1"-это вкл
То есть будут включены 1-е и 5-е реле (остальные выкл).И так любая комбинация.

Re: LinuxCNC и modbus

Добавлено: 04 июн 2012, 07:24
nkp
Для просмотра данных,отсылаемых в com порт из множества программок мне понравилась ComPump:
pump.tar.gz
(680.18 КБ) 1306 скачиваний
Она работает под wine.
Настройки под нашу платку:
(для просмотра содержимого нажмите на ссылку)
Выделение(003).png (7089 просмотров) <a class='original' href='./download/file.php?id=5664&mode=view' target=_blank>Загрузить оригинал (13.77 КБ)</a>
Открываем порт ,запускаем ладдер с нашей схемкой,замыкаем например 15-й контакт: (то есть переменная %QW0 теперь равна 15)
(для просмотра содержимого нажмите на ссылку)
Выделение(004).png (7089 просмотров) <a class='original' href='./download/file.php?id=5665&mode=view' target=_blank>Загрузить оригинал (72.86 КБ)</a>
Смотрим-что же на самом деле ладдер передал в порт:
(для просмотра содержимого нажмите на ссылку)
Выделение(005).png
Выделение(005).png (11.59 КБ) 7089 просмотров
Итак,вся строка выглядит как: 01 06 00 00 00 0F C9 CE
вот назначение каждого байта (в hex) в нашей команде:
Выделение(006).png (7089 просмотров) <a class='original' href='./download/file.php?id=5667&mode=view' target=_blank>Загрузить оригинал (20.72 КБ)</a>
Наши данные :
00 0F (hex) (это то,что мы видим в COMPump)=> 15(dec)(это то,что мы записали в ладдере) =>1111(bin)(это то,что отправилось в порт*) или 00001111 что для нашей платки эта команда значит :"замкнуть первые 4 реле")
* в порт конечно отправилась вся команда , 1111 -только данные из неё