<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
	<channel>
		<title><![CDATA[Linux Forum &mdash; Создать кольцо двух СOM-портов]]></title>
		<link>https://linuxforum.ru/viewtopic.php?id=8672</link>
		<atom:link href="https://linuxforum.ru/extern.php?action=feed&amp;tid=8672&amp;type=rss" rel="self" type="application/rss+xml" />
		<description><![CDATA[Недавние сообщения в теме «Создать кольцо двух СOM-портов».]]></description>
		<lastBuildDate>Thu, 27 Jan 2011 09:07:36 +0000</lastBuildDate>
		<generator>PunBB</generator>
		<item>
			<title><![CDATA[Re: Создать кольцо двух СOM-портов]]></title>
			<link>https://linuxforum.ru/viewtopic.php?pid=137234#p137234</link>
			<description><![CDATA[<p>Привет всем<br />Спасибо большое, Peter, ответ и потраченное на меня время smile <br />Буду еще внимательнее читать инфо...</p>]]></description>
			<author><![CDATA[null@example.com (DimonK)]]></author>
			<pubDate>Thu, 27 Jan 2011 09:07:36 +0000</pubDate>
			<guid>https://linuxforum.ru/viewtopic.php?pid=137234#p137234</guid>
		</item>
		<item>
			<title><![CDATA[Re: Создать кольцо двух СOM-портов]]></title>
			<link>https://linuxforum.ru/viewtopic.php?pid=136616#p136616</link>
			<description><![CDATA[<p>Я никогда не пытался писать и читать один и тот же порт и не задумывался<br />о том, как это возможно. Данные, которые пишутся в порт, из него только<br />уходят, они не поступают в него, в его буфер приёма.<br />Если же записанные в него данные не считываются приёминком на другом<br />конце кабеля, то я не помню, что будет, в лучшем случае они просто будут<br />постепенно перезаписываться </p><p>Если ваша заглушка - это перемыкание TxD-RxD, то, м.б., и будет работать<br />запись/чтение на одном порту.</p><p>Если на вашем компьютере два COM-порта, то их надо соединить модемным<br />кабелем, в одной программе писать в 1-й порт, а в другой из 2-го читать.<br />В одной программе открыть 1-й порт только для записи, в другой открыть 2-й<br />только для чтения, но можно и оба для чтения/записи.</p><p>Структуру termios хорошо бы объявлять в главной программе, чтобы она<br />существовала всё время её работы, хотя это не обязательно. Если уж<br />параметры порта устанавливаются через неё, то её тоже хорошо бы обнулять<br />перед установкой параметров.</p><p>Мне непонятно, почему порт открывается с флаом O_NONBLOCK, вроде бы надо<br />без него.<br />Откуда вы взяли<br /></p><div class="codebox"><pre><code>fcntl(fd,S_SETFL,0);</code></pre></div><p>и что такое в ней 0? 0 - это значение флага O_RDONLY.<br />У меня же программа работает без вызова fcntl.</p><p>Моя программа тоже читает посимвольно. В вашей write передаётся 6 символов,<br />а в строке их 7.</p><p>Что касается зависаний и ожидания прихода символа, то посмотрите описание<br />параметрво termios c_cc[VTIME] и c_cc[VMIN].</p><p>Пётр.</p>]]></description>
			<author><![CDATA[null@example.com (Peter)]]></author>
			<pubDate>Tue, 25 Jan 2011 18:00:53 +0000</pubDate>
			<guid>https://linuxforum.ru/viewtopic.php?pid=136616#p136616</guid>
		</item>
		<item>
			<title><![CDATA[Re: Создать кольцо двух СOM-портов]]></title>
			<link>https://linuxforum.ru/viewtopic.php?pid=136288#p136288</link>
			<description><![CDATA[<p>Привет всем<br />Спасибо за пример, Peter smile&nbsp; </p><p>Прошу прощения, что не четко представил инфу smile </p><p>По подобию Serial Programming HOWTO<br /><span class="bbu"><a href="http://rampex.ihep.su/Linux/linux_howto/html/tutorials/Serial-Programming-HOWTO-1.html">http://rampex.ihep.su/Linux/linux_howto … WTO-1.html</a></span>, я нацарапал две проги (для чистоты эксперемента) чтение:<br /></p><div class="codebox"><pre><code>#include &lt;sys/types.h&gt;
#include &lt;sys/stat.h&gt;
#include &lt;fcntl.h&gt;
#include &lt;termios.h&gt;
#include &lt;stdio.h&gt;

int  open_port(void);

void main()
{
   int fd = open_port();
   if (fd &lt; 0)
      exit(-1)
   int n ;
   while(n != -1)
   {
        if (n == -1)
           break;
       // Получается считывать только по-байтно
       n = read(fd,&amp;ch,1);
       ....
    }         
}

int  open_port(void)
{
    int fd;
    fd = open(&quot;/dev/ttyS0&quot;, O_RDWR | O_NOCTTY |O_NONBLOCK);
    if (fd == -1)
    perror(&quot;open_port: Unable to open /dev/ttyS0 - &quot;); 
    else
    {
    struct termios options; 
    tcgetattr(fd, &amp;options);
    cfsetispeed(&amp;options, B115200);
    cfsetospeed(&amp;options, B115200);
    options.c_cflag &amp;= ~PARENB; 
    options.c_cflag &amp;= ~CSTOPB;
    options.c_cflag &amp;= ~CSIZE;
    options.c_cflag |= CS8;
    tcsetattr(fd, TCSANOW, &amp;options);
    }
    /*
    Если не вставить эту стороку в ридере - вылет из цикла
    while по break - С чем это связано???????
    */                
    fcntl(fd, F_SETFL, 0);  
     return (fd);
}</code></pre></div><p>Ну а запись в порт - тоже самое, только меняю порт и передаю тестовую стороку:<br /></p><div class="quotebox"><blockquote><p>...<br />int n = write(fd,&quot;STROKA\n&quot;,6);<br />...</p></blockquote></div><p>&nbsp; &nbsp;<br />Теперь запускаю ридера во одном командере, а райтера - в другом...<br />Ну результат, как и писал - чтение зависло в ожидании, если кольцо.<br />Так же и с готовым примером из источника выше...<br /> А если заглушка на один порт - нормально считывается только по-байтно...</p>]]></description>
			<author><![CDATA[null@example.com (DimonK)]]></author>
			<pubDate>Tue, 25 Jan 2011 07:49:04 +0000</pubDate>
			<guid>https://linuxforum.ru/viewtopic.php?pid=136288#p136288</guid>
		</item>
		<item>
			<title><![CDATA[Re: Создать кольцо двух СOM-портов]]></title>
			<link>https://linuxforum.ru/viewtopic.php?pid=134432#p134432</link>
			<description><![CDATA[<p>Я сам не очень понятливый, т.к. из приведённого мне не ясно, что вы там запускаете.<br />Покажите всю программу.</p><p>1) Не вижу тут двух портов;<br />2) Было бы логичнее, если бы open_port принимала как аргумент ссылку на fd<br />&nbsp; &nbsp; в основной программе, хотя можно и так;<br />3) При вызовах системных функций лучше использовать символические имена для флагов,<br />&nbsp; &nbsp; а не константы. Что вы подразумевали в вызове fcntl? В open указано ведь O_RDWR.<br />4) Что вы называете сеансом? Вообще проверить кольцо из двух портов можно и в одной<br />&nbsp; &nbsp;программе и с помощью двух независимых, одна из которых пишет, а другая читает.</p><p>Вот пример работающей программы, в case 1, 2, 4, 5 она пишет в порт и ждёт ответа,<br />в case 3 она, кроме этого, начиная со 2-го раза для записи ждёт, когда другая сторона<br />выставит сигнал DSR.</p><p>Как здесь делать вложение, я не помню. Текст можно привести в читаемый вид с помощью<br />команды indent.</p><p>Пётр.<br /></p><div class="codebox"><pre><code>#include &lt;sys/types.h&gt;
#include &lt;sys/stat.h&gt;
#include &lt;sys/time.h&gt;
#include &lt;sys/ioctl.h&gt;
#include &lt;stdbool.h&gt;
#include &lt;fcntl.h&gt;
#include &lt;termios.h&gt;
#include &lt;unistd.h&gt;
#include &lt;errno.h&gt;
#include &lt;time.h&gt;
#ifndef _STDIO_H
#include &lt;stdio.h&gt;
#endif
#ifndef _STDLIB_H
#include &lt;stdlib.h&gt;
#endif
#ifndef _STRING_H
#include &lt;string.h&gt;
#endif
#ifndef __USE_MISC
typedef unsigned int uint;
#endif
#define MSGSIZE 72
#define CAS_SIZE 10
#define CAS_NUM 10
#define MINI(n1,n2) ((n1&lt;=n2)?n1:n2)
typedef unsigned char uchar;
int readto(int,char*);
extern int errno;
int main(int argc,char **argv){
struct timespec tds;    //,tdw;
struct timeval tv1,tv2;
struct timezone tz1,tz2;
struct termios oldcomio,newcomio;
fd_set rdsetcur,rdsetold;
int ibdrt[20]={B0,B50,B75,B110,B134,B150,B200,B300,B600,B1200,B1800,B2400,
    B4800,B9600,B19200,B38400,B57600,B115200,B230400,0},i=argc,ibr=14,
    ibrrl[10]={300,600,1200,2400,4800,9600,19200,38400,57600,115200},
    icom=1,fd,fdcom,n1,n2,n3,n4,ifd,istr,ivt=60,numcm,numex,nd=2,
    nw=4,ncyc=0,nt1,idv=1,idsr,j;
clock_t time;
uint iw=1,nz;
bool bds;
char nmcom[16],buf[80],bufrm[80];
strcpy(buf,&quot;/usr/local/etc&quot;);if(i&gt;1){strcpy(buf,argv[1]);fprintf(stdout,&quot;%d %s\n&quot;,strlen(buf),buf);}
strcpy(buf+strlen(buf),&quot;/chpa2_d.in&quot;);
FILE *fin=fopen(buf,&quot;r&quot;);
if(fin!=NULL){
    fscanf(fin,&quot;%d%[^\n]&quot;,&amp;ibr,buf+32);
    fscanf(fin,&quot;%d%[^\n]&quot;,&amp;icom,buf+32);
    fscanf(fin,&quot;%d%[^\n]&quot;,&amp;nd,buf+32);
    fscanf(fin,&quot;%d%[^\n]&quot;,&amp;nw,buf+32);
    fscanf(fin,&quot;%d%[^\n]&quot;,&amp;ivt,buf+32);
    fscanf(fin,&quot;%d%[^\n]&quot;,&amp;idv,buf+32);
    fclose(fin);
}
strcpy(buf+30,&quot;origcom &quot;);
if(idv==1){strcpy(nmcom,&quot;/dev/ttySx&quot;);sprintf(nmcom+9,&quot;%1d&quot;,icom-1);//to COM
sprintf(bufrm,&quot; - COM-port, %1d&quot;,icom);buf[37]=nmcom[9];}
else{strcpy(nmcom,&quot;/dev/USB0&quot;);strcpy(bufrm, &quot; USB&lt;-&gt;COM,   &quot;);buf[37]=&#039;u&#039;;}
nz=(uint)((11.*1.e+9)/(double)ibrrl[ibr-8]);
fprintf(stdout,&quot;%s%s %d%8d%8d%8u %d %s\n&quot;,
nmcom,bufrm,ibr,ibdrt[ibr],ibrrl[ibr-8],nz,ivt,buf);
sprintf(buf,&quot;U1I%02d %02d\r&quot;,nw,nd);nd*=10;nw*=10;strcpy(buf+10,&quot;U1R\r&quot;);
strcpy(buf+15,&quot;U1N\r&quot;);strcpy(buf+20,&quot;U1T\r&quot;);strcpy(buf+25,&quot;U1P\r&quot;);
tds.tv_sec=0;tds.tv_nsec=100000000L;fprintf(stdout,&quot;%d %d\n&quot;,nd,nw);
FD_ZERO(&amp;rdsetold);FD_SET(0,&amp;rdsetold);
fd=open(nmcom,O_RDWR|O_NOCTTY|O_ASYNC );
if(fd&lt;0){perror(nmcom);exit(-1); }
if((fdcom=open(buf+30,O_WRONLY|O_CREAT|O_EXCL,0644))!=-1){
    tcgetattr(fd,&amp;oldcomio); /* save current port settings */
    write(fdcom,(void*)&amp;oldcomio,sizeof(oldcomio));
    close(fdcom);}
else if(errno==EEXIST){
    fdcom=open(buf+30,O_RDONLY);
    read(fdcom,(void*)&amp;oldcomio,sizeof(oldcomio));
    tcsetattr(fd,TCSANOW,&amp;oldcomio);
    close(fdcom);}
bzero(&amp;newcomio, sizeof(newcomio));
newcomio.c_cflag = ibdrt[ibr] | CS8 | CLOCAL | CREAD;
newcomio.c_iflag = IGNPAR | IGNBRK;
/* set input mode (non-canonical, no echo,...) */
newcomio.c_cc[VEOF]=0;newcomio.c_cc[VEOL]=0;newcomio.c_cc[VEOL2]=0;
newcomio.c_cc[VTIME]=ivt;   /* inter-character timer unused */
newcomio.c_cc[VMIN]=0;   /* blocking read until 5 chars received */
cfsetispeed(&amp;newcomio,ibdrt[ibr]);cfsetospeed(&amp;newcomio,ibdrt[ibr]);
tcflush(fd,TCIOFLUSH);
tcsetattr(fd,TCSANOW,&amp;newcomio);//fcntl(fd,F_SETFL,O_ASYNC);
FD_ZERO(&amp;rdsetold);FD_SET(0,&amp;rdsetold);
while(iw==1){
  rdsetcur=rdsetold;
  fprintf(stdout,&quot;%s&quot;,&quot;enter istr, numcom and numex &quot;);fflush(stdout);
  ifd=select(1,&amp;rdsetcur,NULL,NULL,NULL);
  if(ifd&gt;0){
    if(FD_ISSET(0,&amp;rdsetcur)){
        read(0,bufrm,MSGSIZE);sscanf(bufrm,&quot;%d%d%d&quot;,&amp;istr,&amp;numcm,&amp;numex);}
    else{iw=0;istr=0;}}
  else{iw=0;istr=0;}
  fprintf(stdout,&quot;%3d entered:%2d %d %d\n&quot;,ifd,istr,numcm,numex);
  if(istr==1){n1=0;n3=4;
    switch(numcm){
    case 1:case 2:case 4:case 5:if(numcm==1)n3=9;else n1=10+(numcm-2)*5;
      n2=write(fd,(void*)(buf+n1),n3);if(n2==-1){
      fprintf(stdout,&quot;w %d %s\n&quot;,errno,strerror(errno));exit(-1);}
      sprintf(buf+30,&quot; !!!&quot;);n2=readto(fd,buf+30);if(n2==-1){
      fprintf(stdout,&quot;r %d %d %s\n&quot;,numcm,errno,strerror(errno));exit(-1);}
      fprintf(stdout,&quot;numcm=%d %d %s\n&quot;,numcm,n2,buf+30);break;
    case 3:
        ncyc=numex;gettimeofday(&amp;tv1,&amp;tz1);bds=0;
      for(i=0;i&lt;ncyc;i++){gettimeofday(&amp;tv2,&amp;tz2);sprintf(buf+30,&quot; !!!&quot;);
        nt1=(tv2.tv_sec-tv1.tv_sec)*1000000+tv2.tv_usec-tv1.tv_usec;tv1=tv2;
        tcflush(fd,TCIOFLUSH);n2=write(fd,(void*)(buf+15),4);if(n2==-1){fprintf(
        stdout,&quot;w %d %s\n&quot;,errno,strerror(errno));exit(-1);}n4=readto(fd,buf+30);
        if(n4==-1){fprintf(stdout,&quot;r %d %d %s\n&quot;,numcm,errno, strerror(errno));
        exit(-1);}fprintf(stdout,&quot;numcm=%d %d %d %d%s %d\n&quot;,numcm,i,n2,n4,buf+30
        ,nt1/1000);time=clock();j=0;if(i==0)goto lbds;while(bds&amp;&amp;clock()-time&lt;60
        *CLOCKS_PER_SEC){ioctl(fd,TIOCMGET,&amp;idsr);bds=idsr&amp;TIOCM_DSR;if(bds){
        sprintf(buf+30,&quot;**&quot;);n4=readto(fd,buf+30);if(n4&gt;0){fprintf(stdout,
        &quot;1 inf %d %d %s\r&quot;,n4,j,buf+31);j++;nanosleep(&amp;tds,NULL);}}}if(bds){fputs
        (&quot;\nDSR not reset!\n&quot;,stdout);break;}lbds:while(!bds&amp;&amp;clock()
        -time&lt;60*CLOCKS_PER_SEC){ioctl(fd,TIOCMGET,&amp;idsr);bds=TIOCM_DSR&amp;idsr;if(
        !bds){sprintf(buf+30,&quot;**&quot;);n4=readto(fd,buf+30);if(n4&gt;0){fprintf(stdout,
        &quot;0 inf %d %d %s\r&quot;,n4,j,buf+31);j++;nanosleep(&amp;tds,NULL);}}}if(!bds
        ){fputs(&quot;\nNo DSR!\n&quot;,stdout);break;}
      }break;
    default:;}
      }
    else iw=0;
}
    tcsetattr(fd,TCSANOW,&amp;oldcomio);
    close(fd);
return 0;}

int readto(int fd,char* buf){
//reads from fd to buf+1 bytes until &#039;\r&#039; with timeout VTIME/10.
int nb=1;
ssize_t nr;
  while(*(buf+nb-1)!=&#039;\r&#039;){nr=read(fd,(void*)(buf+nb),1);
    if(nr&lt;=0){if(nb==1){if(buf[0]==&#039; &#039;)fprintf(stdout,&quot;timeout at 1st\n&quot;);
    nb=0;}break;}
    else{if(buf[0]!=&#039; &#039;)fprintf(stdout,&quot;readto: %d %d\n&quot;,nb,buf[nb]);nb++;}}
  if(nb&gt;1){if(buf[nb-1]==&#039;\r&#039;)buf[nb-1]=0;else buf[nb]=0;}
return nb-1;}


// chpa2_d.in

14  ibr, 15 - 38400
1   icom, 1 - ttyS0
2   nd in sec
4   nw in sec
60  ivt in 0.1s
1   idv, 1/2 - COM/USB</code></pre></div>]]></description>
			<author><![CDATA[null@example.com (Peter)]]></author>
			<pubDate>Thu, 20 Jan 2011 18:03:31 +0000</pubDate>
			<guid>https://linuxforum.ru/viewtopic.php?pid=134432#p134432</guid>
		</item>
		<item>
			<title><![CDATA[Re: Создать кольцо двух СOM-портов]]></title>
			<link>https://linuxforum.ru/viewtopic.php?pid=134155#p134155</link>
			<description><![CDATA[<p>Привет всем<br />Спасибо большое, Peter, за участие smile </p><div class="quotebox"><cite>Peter пишет:</cite><blockquote><p>На чистом C++ я реальных программ не писал, если бы потребовалось, сделал бы что-нибудь попроще...</p></blockquote></div><p>Так я и сделал как можно проще... <br />Объясните мне непонятливому, пожалуйста :rolleyes: , с чем связано такое поведение:</p><p>Делаю две проги на запись и чтение <br /></p><div class="codebox"><pre><code>int  open_port(void)
{
    int fd;
    fd = open(&quot;/dev/ttyS0&quot;, O_RDWR | O_NOCTTY |O_NONBLOCK);
    if (fd == -1)
    perror(&quot;open_port: Unable to open /dev/ttyS0 - &quot;); 
    else
    {
    struct termios options; 
    tcgetattr(fd, &amp;options);
    cfsetispeed(&amp;options, B115200);
    cfsetospeed(&amp;options, B115200);
    options.c_cflag &amp;= ~PARENB; 
    options.c_cflag &amp;= ~CSTOPB;
    options.c_cflag &amp;= ~CSIZE;
    options.c_cflag |= CS8;
    tcsetattr(fd, TCSANOW, &amp;options);
    }                
    fcntl(fd, F_SETFL, 0);
     return (fd);
}
...
int n = write(fd,&quot;STROKA\n&quot;,6);

...
int n ;
while(n != -1)
{
       n = read(fd,&amp;ch,1);
       ....
}                                       </code></pre></div><p>И тут начинается самое интересно oO <br />- Кольцо - запускаю ридера в одном сеансе, а запись в другом - чтение подвисает(как я и писал...), даже не выполняется printf перед read<br />- Кольцо - запускаю прослушку&nbsp; cat /dev/ttyS0 и она срабатывает:&nbsp; отображается строка и ждет...<br />- Ставлю заглушку на один порт - ридер работает нормально, в случаи побайтового считывания. В противном случаи зацикливается и выводит то по 2 символа, то по 3 и кракозябру....</p>]]></description>
			<author><![CDATA[null@example.com (DimonK)]]></author>
			<pubDate>Thu, 20 Jan 2011 08:04:34 +0000</pubDate>
			<guid>https://linuxforum.ru/viewtopic.php?pid=134155#p134155</guid>
		</item>
		<item>
			<title><![CDATA[Re: Создать кольцо двух СOM-портов]]></title>
			<link>https://linuxforum.ru/viewtopic.php?pid=131544#p131544</link>
			<description><![CDATA[<p>Я наскоро посмотрел, что это такое.<br />Однажды в Qt я сам сделал класс для COM-порта для Linux и базовый для него тоже,<br />т.к. меня не устраивал имеющийся в Qt базовый класс, что-то похожее на IODEVICE.</p><p>Там есть пример, работает ли он у вас? Он почему-то для работы с /dev/ttyUSB0.</p><p>На чистом C++ я реальных программ не писал, если бы потребовалось, сделал бы<br />что-нибудь попроще, ориентируясь на класс для Qt.<br />Точнее, у меня было 2-3 программы для Windows, но они не работали с COM-портом.</p><p>Мне это кажется излишне сложным. Если у вас программа на&nbsp; C++, то ничто не<br />мешает работать с COM-портом так же, как в программе на C, т.е. самому открыть<br />порт, установить свойства, написать программы для чтения и записи для конкретного<br />протокола связи и ими пользоваться. Это будет и быстрее, чем в примере, где чтение<br />из порта посимвольное.</p><p>Пётр.</p>]]></description>
			<author><![CDATA[null@example.com (Peter)]]></author>
			<pubDate>Wed, 12 Jan 2011 17:53:28 +0000</pubDate>
			<guid>https://linuxforum.ru/viewtopic.php?pid=131544#p131544</guid>
		</item>
		<item>
			<title><![CDATA[Re: Создать кольцо двух СOM-портов]]></title>
			<link>https://linuxforum.ru/viewtopic.php?pid=131290#p131290</link>
			<description><![CDATA[<p>Привет всем<br /></p><div class="quotebox"><cite>Peter пишет:</cite><blockquote><p>Поскольку мы не знаем, что вы делаете, поэтому не можем сказать, что вы делаете не так. Пётр.</p></blockquote></div><p> - хотел протестировать скачанные проги<br /><span class="bbu"><a href="http://sourceforge.net/projects/libserial/">http://sourceforge.net/projects/libserial/</a></span>- Не получилось <img src="https://linuxforum.ru/img/smilies/ac.gif" alt="ac" /> <br />Заием решил протестировать на уровне утилит - результат тот-же <img src="https://linuxforum.ru/img/smilies/ac.gif" alt="ac" /><br />(создаю файл с текстом; в одной раб. панеле записываю этот файл в порт: cat; в другой - считываю из порта....)</p>]]></description>
			<author><![CDATA[null@example.com (DimonK)]]></author>
			<pubDate>Wed, 12 Jan 2011 07:32:23 +0000</pubDate>
			<guid>https://linuxforum.ru/viewtopic.php?pid=131290#p131290</guid>
		</item>
		<item>
			<title><![CDATA[Re: Создать кольцо двух СOM-портов]]></title>
			<link>https://linuxforum.ru/viewtopic.php?pid=129044#p129044</link>
			<description><![CDATA[<p>Поскольку мы не знаем, что вы делаете, поэтому не можем сказать, что вы делаете не так.<br />Я тоже однажды сделал две коротких программы, одна консольная в Linux, другая<br />с небольшим окном в Windows, обменивались данными через COM-порт. Одна посылала<br />строку, другая принимала, выводила на экран и посылала обратно, 1-я её принимала,<br />выводила и посылал новую.</p><p>То, что чтение зависает, видно и без strace. Либо неправильно настроена termios,<br />не в соответствии с протоколом, либо неправильно вызывается системная read.<br />У меня всегда была подпрограмма чтения, уже из которой вызывалась read,<br />т.к. были разные протоколы обмена.</p><p>Пётр.</p>]]></description>
			<author><![CDATA[null@example.com (Peter)]]></author>
			<pubDate>Wed, 05 Jan 2011 14:25:48 +0000</pubDate>
			<guid>https://linuxforum.ru/viewtopic.php?pid=129044#p129044</guid>
		</item>
		<item>
			<title><![CDATA[Re: Создать кольцо двух СOM-портов]]></title>
			<link>https://linuxforum.ru/viewtopic.php?pid=128933#p128933</link>
			<description><![CDATA[<p>Привет всем<br />С Новым Годом и Рождеством Христовым! smile </p><p>Объясните, пожалуйста, что я не так делаю :rolleyes: <br />Я просто сделал две проги одна пишет, другая читает (фиг уж с этими настройками!). Так вот чтение зависает...<br />strace показало: read(3 ... - зависание...<br />Тоже&nbsp; и с утилой cat - виснет зараза: в консоле(при записи) отобразилась сторока(из используемого файла), курсор остановился после последнего символа и завис (вроде должно перейти к готовности принятия команд?). На чтение - сразу виснет <img src="https://linuxforum.ru/img/smilies/ac.gif" alt="ac" /> <br />Вот чё это за ...</p>]]></description>
			<author><![CDATA[null@example.com (DimonK)]]></author>
			<pubDate>Wed, 05 Jan 2011 07:47:09 +0000</pubDate>
			<guid>https://linuxforum.ru/viewtopic.php?pid=128933#p128933</guid>
		</item>
		<item>
			<title><![CDATA[Re: Создать кольцо двух СOM-портов]]></title>
			<link>https://linuxforum.ru/viewtopic.php?pid=126072#p126072</link>
			<description><![CDATA[<p>Я как-то не имел с этим проблем ни в DOS, ни в Windows, ни в Linux.<br />Обмен всегда делается по определёному протоколу, вот и реализуйте его.<br />Если сомневаетесь, что tcsetattr выполняется, проверьте с помощью<br />tcgetattr. М.б., она выполняется, но не так, как вам хочется.<br />Если вы устанавливаете параметры порта с помощью termios, то вы его<br />полный хозяин, как напишете, так и будет работать.</p><p>Пётр.</p>]]></description>
			<author><![CDATA[null@example.com (Peter)]]></author>
			<pubDate>Mon, 27 Dec 2010 21:56:52 +0000</pubDate>
			<guid>https://linuxforum.ru/viewtopic.php?pid=126072#p126072</guid>
		</item>
		<item>
			<title><![CDATA[Re: Создать кольцо двух СOM-портов]]></title>
			<link>https://linuxforum.ru/viewtopic.php?pid=125786#p125786</link>
			<description><![CDATA[<div class="quotebox"><cite>Peter пишет:</cite><blockquote><p>...Надо понять, что надо от порта...</p></blockquote></div><p> -&nbsp; Наладить обмен между двумя компами....<br />Я не понимаю, почему я не могу менять настройки портов с помощью с-х функций oO</p>]]></description>
			<author><![CDATA[null@example.com (DimonK)]]></author>
			<pubDate>Mon, 27 Dec 2010 07:16:10 +0000</pubDate>
			<guid>https://linuxforum.ru/viewtopic.php?pid=125786#p125786</guid>
		</item>
		<item>
			<title><![CDATA[Re: Создать кольцо двух СOM-портов]]></title>
			<link>https://linuxforum.ru/viewtopic.php?pid=124085#p124085</link>
			<description><![CDATA[<p>Я не пользуюсь отладчиком и у меня не бывало таких чудес, чтобы tcsetattr<br />не выполнилась. setserial для проверки програмы тоже никогда не использовал.<br />Надо понять, что надо от порта и эти параметры установить.<br />&quot;man termios&quot; достаточно подробный. Правда, когда я только начинал работать<br />с COM-портом, я пользовался книгой на русском, где termios очень подробно<br />описана. Это было лет 10 назад.</p><p>Пётр.</p>]]></description>
			<author><![CDATA[null@example.com (Peter)]]></author>
			<pubDate>Mon, 20 Dec 2010 20:21:39 +0000</pubDate>
			<guid>https://linuxforum.ru/viewtopic.php?pid=124085#p124085</guid>
		</item>
		<item>
			<title><![CDATA[Re: Создать кольцо двух СOM-портов]]></title>
			<link>https://linuxforum.ru/viewtopic.php?pid=123881#p123881</link>
			<description><![CDATA[<p>Привет всем<br />Обращаюсь снова&nbsp; к Вам за помощью :rolleyes: <br />Тут меня &quot;до глубины душевной&quot;&nbsp; проблема тронула. Поняв, что порт на отрез отказывается со мнос сотрудничать, я максимально упростил пример от сюда <a href="http://libserial.sourceforge.net">http://libserial.sourceforge.net</a>: открываю порт, устанавливаю значение структуры termios newtio и сохраняю настройки - </p><p> tcflush(fd, TCIFLUSH);<br /> tcsetattr(fd,TCSANOW,&amp;newtio);</p><p>Затем в отладчике проганяю прогу и командой setserial просматриваю параметры порта - НИ КАКОЙ РАЗНИЦЫ&nbsp; &nbsp;- параметры не поменялись <img src="https://linuxforum.ru/img/smilies/ac.gif" alt="ac" />&nbsp; :O <br />Подскажите, пожалуйста, с чем это связано?</p>]]></description>
			<author><![CDATA[null@example.com (DimonK)]]></author>
			<pubDate>Mon, 20 Dec 2010 07:24:20 +0000</pubDate>
			<guid>https://linuxforum.ru/viewtopic.php?pid=123881#p123881</guid>
		</item>
		<item>
			<title><![CDATA[Re: Создать кольцо двух СOM-портов]]></title>
			<link>https://linuxforum.ru/viewtopic.php?pid=118478#p118478</link>
			<description><![CDATA[<p>Привет всем<br />Ладно, будем что-то думать...</p>]]></description>
			<author><![CDATA[null@example.com (DimonK)]]></author>
			<pubDate>Fri, 03 Dec 2010 06:58:13 +0000</pubDate>
			<guid>https://linuxforum.ru/viewtopic.php?pid=118478#p118478</guid>
		</item>
		<item>
			<title><![CDATA[Re: Создать кольцо двух СOM-портов]]></title>
			<link>https://linuxforum.ru/viewtopic.php?pid=118307#p118307</link>
			<description><![CDATA[<div class="quotebox"><cite>DimonK пишет:</cite><blockquote><p>voral, я тут накопал примеров работы с modbus(master-sleve) на сях, подскажите, пожалуйста, можно их будет применить(интерпретировать) к dibus. Возможно это не корректный вопрос, но мой уровень не позволяет большего <img src="https://linuxforum.ru/img/smilies/ac.gif" alt="ac" /> ...</p></blockquote></div><p>все зависит от примеров.... В любом случае в примерах стоит изучить и понять как все сделано. А там уж видно будет. Вообще в таких вещах брать чужой код опасно не разобравшись - баг вылезет замучаешься искать. Мало ли в алгоритме автор заложил копированием памяти что то кудато прописывать характерное для модбаса в неожиданном месте...... </p><p>К тому же я в dibus не вчитывался особо - взглянул по диагонали <img src="https://linuxforum.ru/img/smilies/ab.gif" alt="ab" /></p>]]></description>
			<author><![CDATA[null@example.com (voral)]]></author>
			<pubDate>Thu, 02 Dec 2010 14:12:21 +0000</pubDate>
			<guid>https://linuxforum.ru/viewtopic.php?pid=118307#p118307</guid>
		</item>
	</channel>
</rss>
