Модераторы: Partizan, gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> While 
:(
    Опции темы
arkonst
Дата 15.11.2007, 09:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 54
Регистрация: 31.10.2007

Репутация: 1
Всего: 1



Всем привет!

Подскажите пожалуйста, как понять эту запись:

while (!mb.SendFc3(Convert.ToByte(txtSlaveID.Text), pollStart, pollLength, ref values)) ;

тут в общем то код мне понятен, не понятно для чего там стоит "!" перед mb???
Извеняюсь за тупой вопрос, я конечно понимаю что он символизирует NOT(НЕ) но не могу понять зачем он тут.Для лучшей читабельности ниже привожу полный код.

 //Read registers and display data in desired format:
            try
            {
                while (!mb.SendFc3(Convert.ToByte(txtSlaveID.Text), pollStart, pollLength, ref values)) ;
            }
            catch(Exception err)
            {
                DoGUIStatus("Error in modbus read: " + err.Message);
            }

Заранее спасибо за ответ.
PM MAIL   Вверх
QryStaL
Дата 15.11.2007, 09:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Intellectual feast
**


Профиль
Группа: Участник
Сообщений: 914
Регистрация: 30.11.2005

Репутация: 14
Всего: 32



Этот код эквивалентен следующему:

Код

while (mb.SendFc3(Convert.ToByte(txtSlaveID.Text), pollStart, pollLength, ref values) == false) ;



--------------------
I don't need a reason being who I am...
PM MAIL ICQ   Вверх
Wizard_Memfis
Дата 15.11.2007, 11:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 193
Регистрация: 12.2.2007
Где: г. Донецк, Украин а

Репутация: 1
Всего: 4



Я так понимаю, что вопрос несколько в другом: функция возвращает bool?Если да , QryStaL уже сказал!А вот если нет, то действительно не понятно!!!Он не ругается на это?
--------------------
www.binary-studio.com
PM MAIL WWW ICQ Skype   Вверх
thomas
Дата 15.11.2007, 11:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Доцент... почти
***


Профиль
Группа: Завсегдатай
Сообщений: 1385
Регистрация: 3.10.2006
Где: " Сказочное королевство"

Репутация: 6
Всего: 65



Всем привет
А мне не понятно, зачем вообще нужен этот while если у него нет сигнатуры.
Код

//Read registers and display data in desired format:
            try
            {
                while (!mb.SendFc3(Convert.ToByte(txtSlaveID.Text), pollStart, pollLength, ref values)) ;
                {
                       // а тут то что? Где сигнатура?
                 }
            }
            catch(Exception err)
            {
                DoGUIStatus("Error in modbus read: " + err.Message);
            }



Как гриться, на фига козе баян?  smile 


--------------------
Крепко жму горло, искренне ваш Thomas. (С)vingrad
Некоторые сорта флоры буквально за одно мгновение превращают нас в фауну!
Проблемы негров шерифа не волнуют.
PM MAIL   Вверх
1stain
Дата 15.11.2007, 11:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 486
Регистрация: 30.7.2007
Где: Киев - Харьков

Репутация: 8
Всего: 40



видимо функция проверяет порт на наличие данных. Пока данных нет - крутиццо пустой цикл. Как только данные пришли - из цикла выходим.

з.ы. глянул сюда Simple Modbus Protocol in C# / .NET 2.0

имхо сделано слегка коряво: насколько я понял, цикл будет крутиццо в случае обрыва связи с устройством до бесконечности...
п-моему, лучше сделать примерно так:
Код

while(true)
{
      if (mb.SendFc3(Convert.ToByte(txtSlaveID.Text), pollStart, pollLength, ref values)) 
           break;
      else... // обрабатываем mb.modbusStatus и в зависимости от причины неудачного чтения делаем, что надо
      


Это сообщение отредактировал(а) 1stain - 15.11.2007, 11:41


--------------------
Все знают, что это невозможно. Но вот приходит невежда, которому это неизвестно - он-то и делает открытие. (Albert Einstein)
user posted image
PM MAIL   Вверх
thomas
Дата 15.11.2007, 11:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Доцент... почти
***


Профиль
Группа: Завсегдатай
Сообщений: 1385
Регистрация: 3.10.2006
Где: " Сказочное королевство"

Репутация: 6
Всего: 65



1stain, 
 smile 
возможно


--------------------
Крепко жму горло, искренне ваш Thomas. (С)vingrad
Некоторые сорта флоры буквально за одно мгновение превращают нас в фауну!
Проблемы негров шерифа не волнуют.
PM MAIL   Вверх
FREEDEV
Дата 15.11.2007, 11:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 238
Регистрация: 6.3.2007
Где: Украина->Одесс а

Репутация: 1
Всего: 3



thomas, Да вроде бы все корректно . smile 
while циклиться пока SendFc3 не вернет false, если в процессе цикла произойдет исключение – вываливаемся в Exception, выполняем  DoGUIStatus.

Добавлено через 57 секунд
оп, уже решилось smile
--------------------
Microsoft Windows Visla ©
PM MAIL   Вверх
1stain
Дата 15.11.2007, 11:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 486
Регистрация: 30.7.2007
Где: Киев - Харьков

Репутация: 8
Всего: 40



Цитата(FREEDEV @  15.11.2007,  11:38 Найти цитируемый пост)
если в процессе цикла произойдет исключение


по данному поводу вопрос к ТС: ты читал мсходники того, что используешь?
исключения обрабатываются внутри функции SendFc3, а информацию об ошибке несет modbusStatus
таким образом, перехват исключений здесь не надобен


--------------------
Все знают, что это невозможно. Но вот приходит невежда, которому это неизвестно - он-то и делает открытие. (Albert Einstein)
user posted image
PM MAIL   Вверх
FREEDEV
Дата 15.11.2007, 11:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 238
Регистрация: 6.3.2007
Где: Украина->Одесс а

Репутация: 1
Всего: 3



1stain, я вообще не в курсе работы этой функции, просто выдвинул предположение.

Цитата(1stain @  15.11.2007,  11:45 Найти цитируемый пост)
таким образом, перехват исключений здесь не надобен

ну, тогда исключения от Convert.ToByte(txtSlaveID.Text) кто обработает smile
--------------------
Microsoft Windows Visla ©
PM MAIL   Вверх
1stain
Дата 15.11.2007, 12:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 486
Регистрация: 30.7.2007
Где: Киев - Харьков

Репутация: 8
Всего: 40



FREEDEV, я тоже ввобще-то не в курсе работы этой функции
по-моему не стоит перехватывать все исключения, без исключения  smile 
перехват Exception от Convert.ToByte(txtSlaveID.Text) и вывод его message в этом контексте 
DoGUIStatus("Error in modbus read: " + err.Message);
мало чем поможет в плане понятия причины ошибки чтения данных, только собъет с толку.


--------------------
Все знают, что это невозможно. Но вот приходит невежда, которому это неизвестно - он-то и делает открытие. (Albert Einstein)
user posted image
PM MAIL   Вверх
FREEDEV
Дата 15.11.2007, 12:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 238
Регистрация: 6.3.2007
Где: Украина->Одесс а

Репутация: 1
Всего: 3



Цитата(1stain @ 15.11.2007,  12:04)
перехват Exception от Convert.ToByte(txtSlaveID.Text) и вывод его message в этом контексте 
DoGUIStatus("Error in modbus read: " + err.Message);
мало чем поможет в плане понятия причины ошибки чтения данных, только собъет с толку.

это да, но ятак понимаю что код уже написан кем-то, остается разбираться зачем оно так  smile 
--------------------
Microsoft Windows Visla ©
PM MAIL   Вверх
arkonst
Дата 16.11.2007, 10:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 54
Регистрация: 31.10.2007

Репутация: 1
Всего: 1



Привет всем!

Смотрю тут такое обсуждение организовалось))

Проясню некоторые моменты...код этот уже готовый и работает вроде нормально...я его вырезал и вставлял в свою программу....

если нужен исходник то прикрепляю

Присоединённый файл ( Кол-во скачиваний: 5 )
Присоединённый файл  ModbusPollCS.zip 37,47 Kb
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема »


 




[ Время генерации скрипта: 0.0546 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.