Страница 1 из 1

Цикличная отправка в порт

Добавлено: 18 дек 2018, 14:25
yakuba26
Добрый день!
Мне нужно что бы кейс истина в VISA записывалось циклично константа String в моем случае это буквы. Тоесть когда кейс истина записывается одна константа, потом кейс становится ложью при выполнениии условия. И вот когда кейс опять станет истиной нужно что бы записалась другая константа, и так по кругу нужно будет записывать константы в порт. Может есть какая то поочередная запись в порт или сделать массив и так же поочередно записывать его.

Помогите пожайлуста! Не хватает знаний это реализовать. :shok: :cry:

P.s Скрин оформлен не до конца ( не ставил условие )

Re: Цикличная отправка в порт

Добавлено: 18 дек 2018, 14:45
Artem.spb
так вы много не наработаете.
Порт правильно открыт до цикла. но при этом после первой же записи он закрывается, зачем?
Перебор элементов, например, так
port.png

Re: Цикличная отправка в порт

Добавлено: 19 дек 2018, 07:59
yakuba26
Artem.spb писал(а):так вы много не наработаете.
Порт правильно открыт до цикла. но при этом после первой же записи он закрывается, зачем?
Перебор элементов, например, так
port.png
я быстро накидал что хочу и когда отправил скрин сюда, увидел что неправильно закрыл порт :think: Ну суть дела не в этом.
спасибо за помощь :thank: :drink:

Re: Цикличная отправка в порт

Добавлено: 19 дек 2018, 09:42
yakuba26
Artem.spb писал(а):так вы много не наработаете.
Порт правильно открыт до цикла. но при этом после первой же записи он закрывается, зачем?
Перебор элементов, например, так
Вложение port.png больше недоступно

если можно хочу еще вопрос задать.

Я вчера не увидел ваше сообщение и ломал голову с другом как это все организовать. В итоге мы сделали, что отправка идет с обратной связью. Тоесть отправляем А и пока не ответит АААА он продолжает отправку и не переходит к отправке след.элемента. И вот в том случае когда МК перестает отвечать на отравляемый ему символ программа "зависает" и все время идет отправка. Как мне собрать отправляемые символы в строку? дальше я сделаю условие если, строка будет равна константе ВВВВ ( символ на который не отвечает) то он ее пропускает и начинает отправку след символа.

Re: Цикличная отправка в порт

Добавлено: 19 дек 2018, 11:35
Artem.spb
Я не долго ломал голову и быстро забил, потому что код, в котором провода выходят из любой точки функции и идут в любом направлении, очень сложен для восприятия. Не надо так делать.
Если надо в ответ отправить следующий шаг, то примерно так. Только тут при ошибе или остутствии ответа отпрака начнётся с самого начала
com.png
yakuba26 писал(а): Как мне собрать отправляемые символы в строку? дальше я сделаю условие если, строка будет равна константе ВВВВ ( символ на который не отвечает) то он ее пропускает и начинает отправку след символа.
тут я совсем ничего не понял. Что, куда и зачем собирать?
И если контроллер не отвечает, то что собирать будем?

Re: Цикличная отправка в порт

Добавлено: 19 дек 2018, 12:13
yakuba26
Artem.spb писал(а):Я не долго ломал голову и быстро забил, потому что код, в котором провода выходят из любой точки функции и идут в любом направлении, очень сложен для восприятия. Не надо так делать.
Если надо в ответ отправить следующий шаг, то примерно так. Только тут при ошибе или остутствии ответа отпрака начнётся с самого начала
com.png
yakuba26 писал(а): Как мне собрать отправляемые символы в строку? дальше я сделаю условие если, строка будет равна константе ВВВВ ( символ на который не отвечает) то он ее пропускает и начинает отправку след символа.
тут я совсем ничего не понял. Что, куда и зачем собирать?
И если контроллер не отвечает, то что собирать будем?
у меня есть 6 плат ардуино, я их опрашиваю последовательно. Я отправляю А мне приходит ответ АААА, как только пришел ответ начинается отправка на след.ардуино. Связь будет по 485 интерфейсу, как только нужное ардуино увидит букву на которую отвечает только она, то она шлет в ответ комбинацию букв, остальные в это время просто ждут когда в порту появится их буква.
Так вот когда ардуино не отвечает на передаваемый символ, программа стоит на месте и все время шлет эту букву.
Я же хочу как только соберется определенное количество букв, пропускало отправку символа на эту ардуино и отправка шла дальше как будто ничего и небыло.
У меня есть мысли как это реализовать, но я не могу сообразить как мне собрать строку из последовательно отправляемых символов ( всегда отправляется один).
Если ардуино не отвечает цикл за циклом отправляется по одному символу "А", а как мне собрать эти символы в струку из пяти симлов?

Re: Цикличная отправка в порт

Добавлено: 19 дек 2018, 12:30
Artem.spb
yakuba26 писал(а):Если ардуино не отвечает цикл за циклом отправляется по одному символу "А", а как мне собрать эти символы в струку из пяти симлов?
я так и не понял, зачем?
поставьте счётчик "не ответов", >5 -> идём дальше.
Объединить строки можно через concatenate string

Re: Цикличная отправка в порт

Добавлено: 19 дек 2018, 12:40
yakuba26
Artem.spb писал(а):
yakuba26 писал(а):Если ардуино не отвечает цикл за циклом отправляется по одному символу "А", а как мне собрать эти символы в струку из пяти симлов?
я так и не понял, зачем?
поставьте счётчик "не ответов", >5 -> идём дальше.
Объединить строки можно через concatenate string
отправка следущего типа, Оправил А еслиполучаю в ответ АААА, то отправляется В и получаю ВВВВ. Но если я отправил В и ардуино ничего не ответило, то прога зацикливается на отправке В. Это нужно для того что бы я видел что ардуино отвечает мне и не зависает, а так же для того что бы данные сначала отправились потом считались последовательно, что бы случайно не отправлялась команда на ардуино, когда предыдущая еще не отправила данные.

Хорошая идея, как сделать счетчик?

а насчет объеденения строки эту функцию я знаю.
Я имел ввиду то что строка у меня все время одна, но она перезаписывается. Может можно еще как то сравнивать предыдущее состояние строки с нынешним.
Тоесть в первом цикле в строке "А" в след цикле уже в строке "В", можно их как то сравнить?

Re: Цикличная отправка в порт

Добавлено: 19 дек 2018, 13:57
Artem.spb
yakuba26 писал(а):Может можно еще как то сравнивать предыдущее состояние строки с нынешним.
Тоесть в первом цикле в строке "А" в след цикле уже в строке "В", можно их как то сравнить?
сдвиговый регистр
Хорошая идея, как сделать счетчик?
тот же самый сдвиговый.
Ответ есть - в регистр отправить 0,
Если ответа нет, значение из регистра +1, сравнить с пределом, дальше по обстоятельствам.

Re: Цикличная отправка в порт

Добавлено: 19 дек 2018, 14:09
yakuba26
Artem.spb писал(а):
yakuba26 писал(а):Может можно еще как то сравнивать предыдущее состояние строки с нынешним.
Тоесть в первом цикле в строке "А" в след цикле уже в строке "В", можно их как то сравнить?
сдвиговый регистр
Хорошая идея, как сделать счетчик?
тот же самый сдвиговый.
Ответ есть - в регистр отправить 0,
Если ответа нет, значение из регистра +1, сравнить с пределом, дальше по обстоятельствам.
можешь скинуть как пример пожайлуста :help: :help: :help: :help: :help: :help: :help: :help: :help: :help: очень нужно :help: :help: :help: :help: :help:

Re: Цикличная отправка в порт

Добавлено: 19 дек 2018, 15:04
Artem.spb
пора уже голову включить
ctr.png
ctr.png (10.47 КБ) 3418 просмотров

Re: Цикличная отправка в порт

Добавлено: 19 дек 2018, 17:39
Borjomy_1
Если это начало задачи, то лучше не изобретать велосипед. Ставьте на ардуину ModBus Slave и общайтесь с ними по ModBus протоколу.
http://arduino.ru/forum/programmirovani ... lave-tcpip

Re: Цикличная отправка в порт

Добавлено: 20 дек 2018, 08:37
yakuba26
Artem.spb писал(а):пора уже голову включить
ctr.png
Голова то включается, работаю в :labview: совсем недавно, поэтому все не знаю. С ними еще не приходилось работать :dntknw:

Спасибо за помощь :drink: