Страница 709 из 775 ПерваяПервая ... 209609659699707708709710711719759 ... ПоследняяПоследняя
Показано с 7,081 по 7,090 из 7743

Тема: Экспресс вопрос (ответ)

  1. #7081
    Пользователь
    Регистрация
    27.11.2011
    Адрес
    Краснодар
    Сообщений
    10,666

    По умолчанию

    Cs-Cs судя по схеме там тоже устройство слало информацию, и его главное записывали (транслировали) в другое устройство.
    У вас же измеритель скорости ветра с Modbus и со скоростью 4800 - то есть так понимаю slave, которое надо опросить и потом записать в другое устройство... так что такая схема скорее не подойдет.

  2. #7082

    По умолчанию

    Цитата Сообщение от Cs-Cs Посмотреть сообщение
    EFrol О, классно! А USART был через ногодрыганье?
    OFFTOP // Мне такое может понадобиться слепить, так как у меня есть измеритель скорости ветра с Алишки с Modbus на 4800, а мне надо 9600 или 19200. Вот я и думаю взять Ардуинку и на ней сделать (это для себя побаловаться).
    Да. Реализовать UART программно оказалось несложно.
    А вот для Вашего случая лучше:
    RusGuard2.jpg

    Этот PIC имеет хоть и один аппаратный UART,
    но есть возможность программно переключать выводы.
    Мы таким образом лепим ModbusRTU к всему, что его не имеет:
    например, СИ8 - только OWEN-протокол
    В принципе любое устройство:
    - вместо U3(MAX485) можно MAX232 поставить (т.е. устройство с RS232 становиться сетевым)
    - любой чип с 1-Wire, I2C, SPI интерфейсами
    - даже токовые датчики 4-20mA
    Последний раз редактировалось EFrol; 05.06.2023 в 20:27.

  3. #7083

    По умолчанию

    EFrol Блин, я последний раз паял электронику в 2009 году, а в детстве возился со 155ой серией микросхем чуток =/
    Если и буду пробовать - то на ардуине. PIC я не любил почему-то, AVR мне больше нравился.
    Пишите код так, как будто сопровождать его будет склонный к насилию психопат, который знает, где вы живёте. © Steve McConnell
    Мой рабочий блог со статьями про щиты и автоматику ОВЕН - Cs-Cs.Net | Почта: Info@Cs-Cs.Net

  4. #7084

    По умолчанию

    Цитата Сообщение от melky Посмотреть сообщение
    Зёлик Если вы использовали Arduino (UART - RS485) -> Считыватель. То при использовании ПЛК вам ничего не надо. Раз считыватель с RS485
    Плата UART-RS485 которая с программным управлением не подойдет. ПР вам в принципе не подойдет, оно кроме Modbus ничего не умеет, и слушать оно не умеет.
    Выше вам написали - ПЛК + работа через библиотеку SysLibCom
    Вы свой ПР можете использовать вместе с ПЛК как модуль ввода-вывода или запрограммировать в нем необходимые обработки сигнала AI и отдавать ПЛК только готовый результат.
    Когда надоест играться с ПЛК, обращайтесь Честно не понимаю, зачем такое устраивать дома ради одного считывателя? (я бы на Scada делал сразу)
    В зависимости от Scada можно сделать пересылку данных от считывателя в ПР, или даже предварительно обработать а ПР отдать только команду.
    https://aliexpress.ru/item/328329322...78627e28Dw8m2r - вот такая плата с авто определением приема передачи.
    Заметьте на контактах нет подписей DE RE R0 DI - вот эти платы с ручным управлением из программы.
    Понятно. Спасибо. Скорее всего Вы правы и нет смысла делать все на ПЛК.
    Ваше предложение принял. Думаю, что даже не буду начинать играться с ПЛК )



    Цитата Сообщение от Cs-Cs Посмотреть сообщение
    Зёлик Эй, эй! Они РАЗНЫЕ! Во-первых, тебе может попасться древняя старая версия, в которой будет дохлая внутренняя батарейка, и в которой ПЛК внутри не будет сохранять переменные на время выключения питания.
    Во-вторых, у ПЛК могут быть разные модификации. Например, с одним RS-485 (а это мало - надо с двумя).
    Ухх… сколько тонкостей.
    Но с батарейкой думаю проблем нет, явно её можно поменять.

    Цитата Сообщение от Cs-Cs Посмотреть сообщение
    Это достоинство.
    Ты не забывай про технико-экономические расчёты: ПЛК стоит дорого и, если в нём сгорят аналоговые выходы (например, кто-то не так их подключит), то заменить весь ПЛК (и оставить дом или квартиру без автоматики на этот момент) будет "стоить" дорого по времени, по деньгам и так далее. Поэтому в этом случае аналоговые входы (и входы) удобнее делать в виде отдельных модулей IO.
    Понял. Спасибо за уточнение. Согласен что модульная система в данном случае оправдана. Как всегда свои достоинства и недостатки))


    Цитата Сообщение от Cs-Cs Посмотреть сообщение
    Всё-таки посмотри в сторону умельцев: ИМХО, сделать какую-то "ардуино" или подобную ерунду между считывателем и ПРкой будет удобнее и дешевле, чем городить ПЛК без знаний о том, как на них что делают (а там внутри на LAD/FBD ничего путного не сделаешь - нужно знать СИ- и Паскаль-подобные языки и программировать текстом).
    Соглашусь. Так и сделаю. Последнее время я стал прислушиваться к тому, что говорят более опытные люди.
    Раньше то же слушал, но молча продолжал делать по-своему.
    Буду смотреть в сторону умельцев.

    По поводу языков программирования. Все зависит от задачи.
    У меня работа с релейными схемами связана.
    Это простые аппараты которые включают двигатели, ТЭНы, принимают сигнал с дискретных датчиков.
    И когда поступает зада сделать все на программируемом реле, то в данном случае на
    LAD или FBD все можно сделать. А вот аппараты с СКАДА системой, различные рецепты на
    HMI панель выводить… то тут да, нужны текстовые языки.


    Цитата Сообщение от EFrol Посмотреть сообщение
    Да! Мы однажды слепили такую штуку:
    Вложение 68162
    Она принимала пакет с данными, заворачивала в ModbusRTU команду (0x10 - групповая запись в регистры + CRC) и отправляла на ПР (Slave).
    Только там не считыватели были, а что-то другое. Но работало!
    Вот спасибо за схему. Попробую сделать такой преобразователь.
    Резисторы на 12 Ом, это в целях защиты от КЗ?
    А у Вас программы нет, посмотреть, для PIC контроллера?


    Цитата Сообщение от EFrol Посмотреть сообщение
    Да. Реализовать UART программно оказалось несложно.
    А вот для Вашего случая лучше:
    RusGuard2.jpg

    Этот PIC имеет хоть и один аппаратный UART,
    но есть возможность программно переключать выводы.
    Мы таким образом лепим ModbusRTU к всему, что его не имеет:
    например, СИ8 - только OWEN-протокол
    В принципе любое устройство:
    - вместо U3(MAX485) можно MAX232 поставить (т.е. устройство с RS232 становиться сетевым)
    - любой чип с 1-Wire, I2C, SPI интерфейсами
    - даже токовые датчики 4-20mA
    Подскажите, а какой смысл в ключах Q1 и Q2?
    Ведь ножки контроллера смогли бы работать и на прямую.

  5. #7085

    По умолчанию

    Цитата Сообщение от Зёлик Посмотреть сообщение
    Резисторы на 12 Ом, это в целях защиты от КЗ?
    Да. Вроде того. Некоторые чипы плохо переносили эксперименты
    Цитата Сообщение от Зёлик Посмотреть сообщение
    А у Вас программы нет, посмотреть, для PIC контроллера?
    Обещать не буду, но поищу.
    Цитата Сообщение от Зёлик Посмотреть сообщение
    Подскажите, а какой смысл в ключах Q1 и Q2?
    Ведь ножки контроллера смогли бы работать и на прямую.
    Дело в том, что у аппаратного USART исходное состояние на TX и RX - высокий уровень,
    а транзисторный ключ это инвертор, который держит max485 в режиме "прием".

  6. #7086

    По умолчанию

    Зёлик
    У меня работа с релейными схемами связана.
    Это простые аппараты которые включают двигатели, ТЭНы, принимают сигнал с дискретных датчиков.
    И когда поступает зада сделать все на программируемом реле, то в данном случае на
    LAD или FBD все можно сделать
    Вот! А если ты ща полезешь в ПЛК, то там алгортим работы с этим считывателем будет примерно такой (пишу, шобы страшно было и чтобы ты оценил свои силы):
    * Открыть порт
    * Проверить что порт открыт
    * Принять что-то из порта (но не всю строку от считывателя, а "что-то" - мусор, или кусок строки)
    * Занести принятое в буфер памяти (и самим его создать и ещё проверить что размера буфера хватит)
    * Проанализировать этот буфер и понять: получили мусор, получили часть верной информации или получили всю информацию
    * "Получили всю информацию" иногда может означать "если не принимали в порт ничего за время, большее N"
    * Если получили всю информацию - то обработать её и достать оттуда код ключа из считывателя
    * Потом повторять всё ещё и ещё раз
    ...я такое с небольшим опытом работы на ПЛК на основе примеров ОВЕНа напишу, наверное, за день-два при наличии считывателя. Но я знаю, куда смотреть, что и где должно быть. А представь себя: надо освоить ПЛК, текстовый язык, указатели на память как в СИ, научиться отлаживать программы и так далее...
    Не, бери пока для начала Ардуинку! =)
    Пишите код так, как будто сопровождать его будет склонный к насилию психопат, который знает, где вы живёте. © Steve McConnell
    Мой рабочий блог со статьями про щиты и автоматику ОВЕН - Cs-Cs.Net | Почта: Info@Cs-Cs.Net

  7. #7087

    По умолчанию

    Цитата Сообщение от Cs-Cs Посмотреть сообщение
    EFrol Блин, я последний раз паял электронику в 2009 году, а в детстве возился со 155ой серией микросхем чуток =/
    Если и буду пробовать - то на ардуине. PIC я не любил почему-то, AVR мне больше нравился.
    Я тоже иногда с удовольствием вожусь с Arduino (в т.ч. и c AVR) и с esp8266 (в т.ч. и с esp32),
    но это когда задача решается только с применением тяжелой артиллерии (обработка видео).
    Но еще больше люблю ассемблер и мелкие автономные чипы (уверяю их недооценивают).
    Особенно когда пытаешься решать проблемы, описанные вот этой статье.

  8. #7088

    По умолчанию

    Цитата Сообщение от EFrol Посмотреть сообщение
    Да. Вроде того. Некоторые чипы плохо переносили эксперименты
    Обещать не буду, но поищу.
    Дело в том, что у аппаратного USART исходное состояние на TX и RX - высокий уровень,
    а транзисторный ключ это инвертор, который держит max485 в режиме "прием".
    Хорошо.

    Цитата Сообщение от Cs-Cs Посмотреть сообщение
    Зёлик Вот! А если ты ща полезешь в ПЛК, то там алгортим работы с этим считывателем будет примерно такой (пишу, шобы страшно было и чтобы ты оценил свои силы):
    * Открыть порт
    * Проверить что порт открыт
    * Принять что-то из порта (но не всю строку от считывателя, а "что-то" - мусор, или кусок строки)
    * Занести принятое в буфер памяти (и самим его создать и ещё проверить что размера буфера хватит)
    * Проанализировать этот буфер и понять: получили мусор, получили часть верной информации или получили всю информацию
    * "Получили всю информацию" иногда может означать "если не принимали в порт ничего за время, большее N"
    * Если получили всю информацию - то обработать её и достать оттуда код ключа из считывателя
    * Потом повторять всё ещё и ещё раз
    ...я такое с небольшим опытом работы на ПЛК на основе примеров ОВЕНа напишу, наверное, за день-два при наличии считывателя. Но я знаю, куда смотреть, что и где должно быть. А представь себя: надо освоить ПЛК, текстовый язык, указатели на память как в СИ, научиться отлаживать программы и так далее...
    Не, бери пока для начала Ардуинку! =)
    Cs-Cs
    Да, такое я не вывезу. Это сложно и не понятно для меня.

    Показал программисту схему которую выложил EFrol, сказал что можно попробовать.
    Он спаяет плату сразу на 3 порта (под 3 считывателя)
    и эти данные уже можно загонять в ПРку.
    А в ПРке я и сам смогу работать с данными простейшими операциями сравнения.
    Но это на словах все просто, а как делать начинаешь,
    то появляются проблемы. )

    Я купил считыватель о котором писал выше ( https://www.rgsec.ru/card-readers/r10-eht )
    Но на алиэкспресс продаются вот такие платки ( https://aliexpress.ru/item/32848242166.html )
    Написано что даже NFC поддерживают.
    Вроде не дорого, но вот насколько это надёжно?
    В минус 40*С зимой как она будет работать?
    А сигнал мне надо на 50 метров передавать.
    Как с помехами будут дела обстоять... не известно...
    По этому и решил, лучше б/у но промышленный считыватель.

  9. #7089

    По умолчанию

    Вот пример кода для pic10F200, который принимает 2 слова и отправляет их дальше уже как Modbus-пакет.

    Код:
    	list      p=10F200            ; list directive to define processor
    	#include <p10F200.inc>        ; processor specific variable definitions
    
    	__CONFIG   _MCLRE_OFF & _CP_OFF & _WDT_ON
    
    ; '__CONFIG' directive is used to embed configuration word within .asm file.
    ; The lables following the directive are located in the respective .inc file. 
    ; See respective data sheet for additional information on configuration word.
    
    
    ;***** VARIABLE DEFINITIONS
    TMR_Bit		EQU 10			; Для выдерживания битового интервала
    WREG		EQU 11			; Временный буфер для передаваемого байта
    CRC_L		EQU 12			; Для хранения CRC (контрольной суммы)
    CRC_H		EQU 13
    ; Оставшиеся 12 ячеек - приемный буфер
    ;**********************************************************************
    	ORG     0xFF             ; processor reset vector
    
    ; Internal RC calibration value is placed at location 0xFF by Microchip
    ; as a movlw k, where the k is a literal value.
    
    	ORG     0x000             ; coding begins here
    	movwf   OSCCAL            ; update register with factory cal value 
    
    	bcf		GPIO, 0			; Настройка выходов
    	movlw	0xE
    	tris	GPIO
    	movlw	0xF7			; WDT timeout примерно 16ms
    	option
    ;----------------------------------------------------------------------
    Start:
    	movlw	0x14			; Указатель на 12 байтный буфер
    	movwf	FSR
    	call	ReadByteWDT		; Прием 1-го байта
    	incf	FSR, F
    	call	ReadByte		; Прием 2-го байта
    	incf	FSR, F
    	call	ReadByte		; Прием 3-го байта
    	incf	FSR, F
    	call	ReadByte		; Прием 4-го байта
    
    	movlw	0xF3			; Инициализация CRC = 0xF309
    	movwf	CRC_H			; Можна расчитать на https://crccalc.com/
    	movlw	0x09			; для последовательности 01 00 00 00 02 04
    	movwf	CRC_L
    
    	movlw	0x14			; Расчет CRC
    	movwf	FSR				; Добавляем к CRC 1-й байт
    	call	CalcCRC			
    	incf	FSR, F			; Добавляем к CRC 2-й байт
    	call	CalcCRC
    	incf	FSR, F			; Добавляем к CRC 3-й байт
    	call	CalcCRC
    	incf	FSR, F			; Добавляем к CRC 4-й байт
    	call	CalcCRC
    
    	movlw	WREG			; Передача Modbus-заголовка
    	movwf	FSR
    
    	movlw	0x01			; 0x01 - Адрес ПР-ки
    	movwf	INDF
    	call	WriteByte
    	movlw	0x10			; 0x00 - Modbus-команда на запись группы регистров
    	movwf	INDF
    	call	WriteByte
    	movlw	0x00			; 0x00 - Старший байт адреса начального регистра
    	movwf	INDF
    	call	WriteByte
    	movlw	0x00			; 0x00 - Младший байт адреса начального регистра
    	movwf	INDF
    	call	WriteByte
    	movlw	0x00			; 0x00 - Старший байт количества регистров
    	movwf	INDF
    	call	WriteByte
    	movlw	0x02			; 0x02 - Младший байт количества регистров
    	movwf	INDF
    	call	WriteByte
    	movlw	0x04			; 0x04 - Длина данных в байтах
    	movwf	INDF
    	call	WriteByte
    
    	movlw	0x14			; Теперь сами данные
    	movwf	FSR				; 1-й байт
    	call	WriteByte
    	incf	FSR, F			; 2-й байт
    	call	WriteByte
    	incf	FSR, F			; 3-й байт
    	call	WriteByte
    	incf	FSR, F			; 4-й байт
    	call	WriteByte
    
    	movlw	CRC_L			; Младший байт CRC
    	movwf	FSR
    	call	WriteByte
    	incf	FSR, F			; Старший байт CRC
    	call	WriteByte	
    
    	goto	Start			; Все с начала
    
    ;----------------------------------------------------------------------
    CalcCRC:
    	movf	INDF, W
    	xorwf	CRC_L, F
    	call	CalcCRCBit
    	call	CalcCRCBit
    	call	CalcCRCBit
    	call	CalcCRCBit
    	call	CalcCRCBit
    	call	CalcCRCBit
    	call	CalcCRCBit
    	goto	CalcCRCBit
    	
    CalcCRCBit:
    	bcf		STATUS, C
    	rrf		CRC_H, F
    	rrf		CRC_L, F
    	btfss	STATUS, C
    	retlw	0
    	movlw	0xA0
    	xorwf	CRC_H, F
    	movlw	0x01
    	xorwf	CRC_L, F
    	retlw	0
    
    ;----------------------------------------------------------------------
    ReadByteWDT:
    	clrwdt					; со сбросом WDT
    	btfsc	GPIO, 3			; Ждем спад (начало Start-бита)
    	goto	$-2
    
    ReadByte:
    	btfsc	GPIO, 3			; Ждем спад (начало Start-бита)
    	goto	$-1
    	
    	nop
    	nop
    	nop
    	call	ReadBit			; Выборка Start-бита
    	nop						; +1us
    	call	ReadBit			; +2us Выборка бита D0
    	rrf		INDF, F
    	call	ReadBit			; Выборка бита D1
    	rrf		INDF, F
    	call	ReadBit			; Выборка бита D2
    	rrf		INDF, F
    	call	ReadBit			; Выборка бита D3
    	rrf		INDF, F
    	call	ReadBit			; Выборка бита D4
    	rrf		INDF, F
    	call	ReadBit			; Выборка бита D5
    	rrf		INDF, F
    	call	ReadBit			; Выборка бита D6
    	rrf		INDF, F
    	call	ReadBit			; Выборка бита D7
    	rrf		INDF, F
    	retlw	0
    ;----------------------------------------------------------------------	
    ReadBit:
    	btfsc	GPIO, 3			; +1us Фиксируем бит с входа GP3
    	bsf		STATUS, C		; +1(2)us
    	btfss	GPIO, 3			; +1us
    	bcf		STATUS, C		; +1(2)us
    	movlw	D'31'			; +1us Выдерживаем битовый интервал
    	movwf	TMR_Bit			; +1us
    	decfsz	TMR_Bit, F		; +1(2)us | цикл +3us * 31 = 93us
    	goto	$-1				; +2us    |
    	retlw	0				; +2us = 7us + 93us + 2us + 3us = 105us (что соответствует 9600 Baud)
    ;----------------------------------------------------------------------
    WriteByte:
    	bcf		STATUS, C		; Формируем Start-бит
    	call	WriteBit
    	rrf		INDF, F			; Формируем бит D0
    	call	WriteBit
    	rrf		INDF, F			; Формируем бит D1
    	call	WriteBit
    	rrf		INDF, F			; Формируем бит D2
    	call	WriteBit
    	rrf		INDF, F			; Формируем бит D3
    	call	WriteBit
    	rrf		INDF, F			; Формируем бит D4
    	call	WriteBit
    	rrf		INDF, F			; Формируем бит D5
    	call	WriteBit
    	rrf		INDF, F			; Формируем бит D6
    	call	WriteBit
    	rrf		INDF, F			; Формируем бит D7
    	call	WriteBit
    	bsf		STATUS, C		; Формируем Stop-бит
    	goto	WriteBit		
    ;----------------------------------------------------------------------
    WriteBit:
    	btfsc	STATUS, C		; +1us Выставляем значение бита на вывод GP0
    	bcf		GPIO, 0			; +1(2)us
    	btfss	STATUS, C		; +1us
    	bsf		GPIO, 0			; +1(2)us
    	movlw	D'31'			; +1us Выдерживаем битовый интервал
    	movwf	TMR_Bit			; +1us
    	decfsz	TMR_Bit, F		; +1(2)us | цикл +3us * 31 = 93us
    	goto	$-1				; +2us    |
    	retlw	0				; +2us = 7us + 93us + 2us + 3us = 105us (что соответствует 9600 Baud)
    ;----------------------------------------------------------------------	
    	END                       ; directive 'end of program'
    Работа программы в Proteus.

    ModbusSIM.jpg

  10. #7090

    По умолчанию

    Цитата Сообщение от EFrol Посмотреть сообщение
    Вот пример кода для pic10F200, который принимает 2 слова и отправляет их дальше уже как Modbus-пакет.


    Работа программы в Proteus.

    ModbusSIM.jpg
    Большое спасибо!

Страница 709 из 775 ПерваяПервая ... 209609659699707708709710711719759 ... ПоследняяПоследняя

Похожие темы

  1. CODESYS V3.5. Вопросы и ответы
    от ООО "БЛС инжинеринг" в разделе ПЛК (среда CODESYS V3.5)
    Ответов: 7100
    Последнее сообщение: Сегодня, 17:17
  2. ВОПРОС-ОТВЕТ (отвечаем на простые вопросы от новичков)
    от Serge_UA в разделе ПЛК (среда CoDeSys V2.3)
    Ответов: 10435
    Последнее сообщение: 24.04.2024, 19:41
  3. вопрос-ответ , или а поговорить????
    от Павел Братковский в разделе Трёп (Курилка)
    Ответов: 10
    Последнее сообщение: 24.01.2018, 11:05
  4. Преобразовать ответ
    от IIeroniux в разделе ПЛК1хх
    Ответов: 3
    Последнее сообщение: 05.10.2015, 17:45

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •