Технический форум по робототехнике.
=DeaD= » 22 июл 2011, 15:05
А точно в C# задержка? Рядом в терминале без задержки работает всё? Может там какая-то буферизация?
S-T-A-L-K-E-R » 22 июл 2011, 15:17
Ну мой предыдущий проект на дельфи с модулем дружит отлично, данные ушли-тутже пришли. А тут не так...
насчет буферизации не знаю... Щас кусок кода предоставлю если найду.
Добавлено спустя 5 минут 44 секунды:Кусок кода для записи в ком.
Использую:
System.IO.Ports.SerialPort COM = new System.IO.Ports.SerialPort();
System.IO.Ports;
- Код: Выделить всё • Развернуть
COM.PortName = "COM8";
COM.BaudRate = 115200;
COM.Parity = Parity.None;
COM.StopBits = StopBits.One;
COM.Open();
COM.WriteLine("l40" + System.Environment.NewLine + (char)(26));
COM.WriteLine("S40 13 0E 0500 S40 13 0F 07D0 P");
//COM.WriteLine("S40 13 0E 0500 S40 13 0F 07D0 P" + System.Environment.NewLine + (char)(26));
//COM.Close();
=DeaD= » 22 июл 2011, 15:24
WriteLine - Writes the specified string and the NewLine value to the output buffer.
Добавлено спустя 3 минуты 30 секунд:А вот как отправить уже этот буфер - я почему-то не нашел

S-T-A-L-K-E-R » 22 июл 2011, 15:26
Т.е. он помимо моих данных(S40 13 0E 0500 S40 13 0F 07D0 P) запихивает туда содержимое буфера ? Если так то как без WriteLine записать данные в порт ?
=DeaD= » 22 июл 2011, 15:28
В том то и дело, что он похоже все твои данные сначала складывает в буфер, а потом в одному ему известный момент времени наконец-то отправляет буфер в синий зуб. Как это отключить - не знаю, обычно всякие flush() есть, а тут только "очистить выходной буфер" и всё, очень странно, может я какую-то неполную документацию нашел...
S-T-A-L-K-E-R » 22 июл 2011, 15:32
На cybeforume тоже молчат... Блин, это печально. Делал по примерам, но в примерах всегда "все работает"...
Может найдется рабочий проект на шарпе терминальной программы ? Мнеб только код глянуть, там все ясно будет.
S-T-A-L-K-E-R » 14 сен 2011, 01:42
Может кто напомнить, все забыл уже пока не работал с орфой, как выставлять порты в 1 или 0 ?
Пример смотрел, но не вспоминаю как это делал. Были записи в тетради, тетради нет (
Помню что так S40 06 01 S40 02 01 P выставляем 1ку на порте А0. Но не помню что за 06, 01, 02, 01. (пример не вкурил из орфы)
=DeaD= » 14 сен 2011, 07:37
06, 02 - номера регистров, вроде DDRA и PORTA соотв., ну или наоборот

01 - битовая маска
MiBBiM » 14 сен 2011, 07:40
S-T-A-L-K-E-R писал(а):Ну мой предыдущий проект на дельфи с модулем дружит отлично, данные ушли-тутже пришли. А тут не так...
насчет буферизации не знаю... Щас кусок кода предоставлю если найду.
http://msdn.microsoft.com/ru-ru/library ... lport.aspxhttp://msdn.microsoft.com/ru-ru/library ... tream.aspxне пробовал, но возможно документация говорит делать это так:
- Код: Выделить всё • Развернуть
serialPort.BaseStream.Flush()
второй способ - сделать буфер малым для любой посылки
serialPort.WriteBufferSize = 1
serialPort.WriteBufferSize = 0
S-T-A-L-K-E-R » 14 сен 2011, 10:24
=DeaD= писал(а):06, 02 - номера регистров, вроде DDRA и PORTA соотв., ну или наоборот

01 - битовая маска
- как установить 1 на Порте а1 ?
=DeaD= » 14 сен 2011, 10:27
взять битовую маску не 00000001b (=0x01), а 00000010b (=0x02)
S-T-A-L-K-E-R » 14 сен 2011, 10:50
Вот так получается: S40 06 02 P ?
=DeaD= » 14 сен 2011, 10:57
Угу, выставить 1 на порту A0 это S40 06 01 S40 02 01 P, а выставить 1 на порту А1 это S40 06 02 P, где логика?

S-T-A-L-K-E-R » 14 сен 2011, 11:01
Пардон, я не с той ноги встал -
Выставить на А1 - лог 1: S40 06(DDR) 01 S40 02(PORTA) 02 P
Так ?
=DeaD= » 14 сен 2011, 11:09
S40 06 02 S40 02 02 P
Иначе, если как у тебя, DDRA будет для 0 порта, а PORTA для 1 порта.