導航:首頁 > 程序命令 > 串口實時輸出文件命令

串口實時輸出文件命令

發布時間:2022-12-26 14:11:32

Ⅰ 如何用cmd窗口(或者批處理.bat文件)向串口(serial port)發送數據

1、首先選擇對應的por選擇匹配的baud rat,輸入輸出應該可以實現了。

Ⅱ vmware虛擬機如何使用串口

如何開啟VMware串口
先前在玩GEC2410時,有個想法,就是在linux下進行調試,由於目標板上電或復位時會發送信息給PC機的串口,這已在windows下實現過,於是想在linux下看看效果,可是當時我在linux下設好串口後,發現一點反應都沒有,當時以為是自己沒有安裝交叉編譯環境,於是昨天晚上把嵌入式 linux下的交叉編譯環境裝好後,心想這下應該可以拉,沒想到我上電目標板,linux下的串口一直沒有反應,郁悶,怎麼這樣呢,既然不適交叉編譯環境的原因,總得有個原因吧,於是我上網搜,先前我也夠笨的,怎麼就不知道上網查呢,呵呵,原來是我沒有把VMware的串口打開,呵呵,馬上關機[關虛擬機下的系統],在VM->Setting......->點擊ADD,把串口加進來,呵呵設置時盡量不要用自動檢測,要選中串口,反正即使你的虛擬系統啟動後可以隨便改的,同時要把串口設為啟動時就連接拉,這樣,linux下的串口在目標板上電或復位後收到和windows下一樣的數據,哈哈,爽!

環境:

宿主機:Windows7 VMware7.1

虛擬機:Fedora12

VMware的串口:

一個虛擬機最多可以添加四個虛擬串口,有如下幾個方法配置虛擬串口:

連接一個虛擬串口到宿主機的物理串口。

連接一個虛擬串口到宿主機上的一個文件。

在兩個虛擬機之間建立一個直接的連接,或者將虛擬機的串口與宿主機的應用程序連接。

為虛擬機添加串口

首先要保證虛擬機處於關機(power off)狀態,選擇菜單中的VM -> Settings... ,在Hardware標簽頁中點擊Add按鈕,在Add Hardware Wizard對話框中選擇Serial Port,點擊next,如圖:

然後要選擇Serial port type,共有三種類型:

1.如果你要使用宿主機的物理串口設備,選擇Use physical serial port on the host,然後點擊next,選擇你要使用的物理串口即可。

2.如果想要將串口數據輸出到一個文件,選擇 Output to file,然後next,選擇輸出文件,該文件是一個txt文本文件。啟動虛擬機後做個測試,在命令行中執行:

echo "asdf" >> /dev/ttyS0,

然後打開輸出文件,即可看到串口輸出的字元串asdf。

3.使用named pipe可以實現兩個虛擬機或虛擬機與宿主機的應用程序通過串口連接。選擇Output to named pipe,點擊next,進入如下界面:

輸入管道名,對於windows宿主機,管道名格式為 //./pipe/ ,必須以 //./pipe/開頭。

輸出調試信息到宿主機上的應用程序:

第一個下拉菜單選擇This end is the server或This end isthe client,在第二個下拉菜單選擇The other end is an application。

輸出調試信息到另一個虛擬機:

第一個下拉菜單選擇This end is the server,第二個下拉菜單選擇The other end is an application。

將兩個虛擬機用串口連接:

在虛擬機上安裝Fedora12和ubuntu10.04,為兩個虛擬機添加串口,

Fedora12的串口設置為:

Ubuntu10.04的串口設置為:

這樣設置後Fedora的串口為serial port 1,設備名為ttyS0,ubuntu的串口為serial port 2,設備名為ttyS1。

測試:

在Fedora下執行:

cat < /dev/ttyS0

在ubuntu下執行:

echo hello > /dev/ttyS1

在Fedora里可以看到收到的字元串hello,說明ubuntu發送和Fedora接收正常,可以互換後做同樣的測試。

語 法
statserial[必要參數][設備]

功 能
statserial 命令:顯示各個接腳的狀態,常用來判斷串口是否正常,Ctrl+C退出
類似命令: stat

相似命令: linux命令

執行許可權: 超級用戶 普通用戶

命令屬性: 網路通訊

參數

必要參數
-n 不循環顯示
-d 十進制顯示
-x 十六進制顯示

選擇參數



範例

範例1:顯示串口狀態

[root@linux ~]# statserial /dev/tty1

範例2:只顯示一次串口狀態

[root@linux ~]# statserial -n /dev/tty1

Ⅲ CMD怎麼將帶有>的命令輸出到串口裡

使用轉義符(^),對命令行中的特殊字元進行轉義。
比如
^>
^&
這樣即可把>或&當成普通字元來看待,而不是特殊字元。但在命令行中%是一個特殊的存在,它要變成普通字元,不能用^進行轉義,而是用%自身來轉義,比如輸出一個%,那麼就寫成%%

Ⅳ 關於串口通訊

利用串口進行數據通訊在通訊領域重佔有著重要的地位。利用RS232-RS485進行數據信號的採集和傳遞是VC編程的又一大熱點。串口通訊在通訊軟體重有著十分廣泛的應用。如電話、傳真、視頻和各種控制等。在各種開發工具中間,VC由於功能強大和靈活,同時也得到了Microsoft的最大支持,所以在一般進行涉及硬體操作的通訊編程中,大都推薦使用VC作為開發工具。然而工業控制串口通訊這個又不同於一般的串口通訊程序,因為控制外圍設備傳送的大都是十六進制數據(BYTE類型),所以,為了提高程序的運行穩定性,我們在編寫程序進行通訊時可以不考慮傳送BYTE類型數據的工作。
串口通訊目前流行的方法大概有兩種:一是利用Microsoft提供的CMSCOMM控制項進行通訊,不過現在很多程序員都覺應該放棄這種方式。二是利用WINAPI函數進行編程,這種編程的難度最高,要求你要掌握很多的API函數。三是利用現在網路上面提供的一些串口通訊控制項進行編寫,比如CSerial類等。

程序實現:
我在經過許多的項目的開發和實踐中發現,採用WIN API函數進行串口的開發能夠給程序員很大的控制項,並且程序運也很穩定。所以我將與串口接觸的函數進行封裝,然後在各個工程中進行調用,效果還是比較好的,現將各個函數和調用方法列舉出來,希望對各位有所幫助。
一、設置串口相關工作

#define MAXBLOCK 2048
#define XON 0x11
#define XOFF 0x13
BOOL SetCom(HANDLE &m_hCom, const char *m_sPort, int BaudRate, int Databit, CString parity, CString stopbit)
{
COMMTIMEOUTS TimeOuts; ///串口輸出時間 超時設置
DCB dcb; ///與埠匹配的設備
m_hCom=CreateFile(m_sPort, GENERIC_READ | GENERIC_WRITE, 0, NULL,
OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL | FILE_FLAG_OVERLAPPED,
NULL); // 以重疊方式打開串口
if(m_hCom==INVALID_HANDLE_VALUE)
{
AfxMessageBox("設置串口部分,串口打開失敗"); /////重疊方式 非同步通信(INVALID_HANDLE_VALUE)函數失敗。
return FALSE;
}
SetupComm(m_hCom,MAXBLOCK,MAXBLOCK); //設置緩沖區
memset(&TimeOuts,0,sizeof(TimeOuts));
TimeOuts.ReadIntervalTimeout=MAXDWORD; // 把間隔超時設為最大,把總超時設為0將導致ReadFile立即返回並完成操作
TimeOuts.ReadTotalTimeoutMultiplier=0; //讀時間系數
TimeOuts.ReadTotalTimeoutConstant=0; //讀時間常量
TimeOuts.WriteTotalTimeoutMultiplier=50; //總超時=時間系數*要求讀/寫的字元數+時間常量
TimeOuts.WriteTotalTimeoutConstant=2000; //設置寫超時以指定WriteComm成員函數中的
SetCommTimeouts(m_hCom, &TimeOuts); //GetOverlappedResult函數的等待時間*/
if(!GetCommState(m_hCom, &dcb)) ////串口打開方式、埠、波特率 與埠匹配的設備
{
AfxMessageBox("GetCommState Failed");
return FALSE;
}

dcb.fParity=TRUE; //允許奇偶校驗
dcb.fBinary=TRUE;
if(parity=="NONE")
dcb.Parity=NOPARITY;
if(parity=="ODD")
dcb.Parity=ODDPARITY;
if(parity=="EVEN")
dcb.Parity=EVENPARITY;
if(stopbit=="1")//設置波特率
dcb.StopBits=ONESTOPBIT;
//if(stopbit=="0")//設置波特率
// dcb.StopBits=NONESTOPBIT;
if(stopbit=="2")//設置波特率
dcb.StopBits=TWOSTOPBITS;
BOOL m_bEcho=FALSE; ///
int m_nFlowCtrl=0;
BOOL m_bNewLine=FALSE; ///
dcb.BaudRate=BaudRate; // 波特率
dcb.ByteSize=Databit; // 每位元組位數
// 硬體流控制設置
dcb.fOutxCtsFlow=m_nFlowCtrl==1;
dcb.fRtsControl=m_nFlowCtrl==1 ?RTS_CONTROL_HANDSHAKE:RTS_CONTROL_ENABLE;
// XON/XOFF流控制設置(軟體流控制!)
dcb.fInX=dcb.fOutX=m_nFlowCtrl==2;
dcb.XonChar=XON;
dcb.XoffChar=XOFF;
dcb.XonLim=50;
dcb.XoffLim=50;
if(SetCommState(m_hCom, &dcb))
return TRUE; ////com的通訊口設置
else
{
AfxMessageBox("串口已打開,設置失敗");
return FALSE;
}
}

二、讀串口操作:
int ReadCom(HANDLE hComm, BYTE inbuff[], DWORD &nBytesRead, int ReadTime)
{
DWORD lrc; ///縱向冗餘校驗
DWORD endtime; /////////jiesuo
static OVERLAPPED ol;
int ReadNumber=0;
int numCount=0 ; //控制讀取的數目
DWORD dwErrorMask,nToRead;
COMSTAT comstat;
ol.Offset=0; ///相對文件開始的位元組偏移量
ol.OffsetHigh=0; ///開始傳送數據的位元組偏移量的高位字,管道和通信時調用進程可忽略。
ol.hEvent=NULL; ///標識事件,數據傳送完成時設為信號狀態
ol.hEvent=CreateEvent(NULL,TRUE,FALSE,NULL);
endtime=GetTickCount()+ReadTime;//GetTickCount()取回系統開始至此所用的時間(毫秒)
for(int i=0;i<2000;i++)
inbuff[i]=0;
Sleep(ReadTime);
ClearCommError(hComm,&dwErrorMask,&comstat);
nToRead=min(2000,comstat.cbInQue);
if(int(nToRead)<2)
goto Loop;
if(!ReadFile(hComm,inbuff,nToRead,&nBytesRead,&ol))
{
if((lrc=GetLastError())==ERROR_IO_PENDING)
{
///////////////////
endtime=GetTickCount()+ReadTime;//GetTickCount()取回系統開始至此所用的時間(毫秒)
while(!GetOverlappedResult(hComm,&ol,&nBytesRead,FALSE))//該函數取回重疊操作的結果
{
if(GetTickCount()>endtime)
break;
}
}
}
return 1;
Loop: return 0;
}

三、寫串口命令
int WriteCom(HANDLE hComm, BYTE Outbuff[], int size, int bWrite[])
{
DWORD nBytesWrite,endtime,lrc;
static OVERLAPPED ol;
DWORD dwErrorMask,dwError;
COMSTAT comstat;
ol.hEvent=CreateEvent(NULL,TRUE,FALSE,NULL);
ol.Offset=0;
ol.OffsetHigh=0;
ol.hEvent=NULL; ///標識事件,數據傳送完成時,將它設為信號狀態
ClearCommError(hComm,&dwErrorMask,&comstat);
if(!WriteFile(hComm,Outbuff,size,&nBytesWrite,&ol))
{
if((lrc=GetLastError())==ERROR_IO_PENDING)
{
endtime=GetTickCount()+1000;
while(!GetOverlappedResult(hComm,&ol,&nBytesWrite,FALSE))
{
dwError=GetLastError();
if(GetTickCount()>endtime)
{
AfxMessageBox("寫串口時間過長,目前串口發送緩沖區中的數據數目為空");
break;
}
if(dwError=ERROR_IO_INCOMPLETE)
continue; //未完全讀完時的正常返回結果
else
{
// 發生錯誤,嘗試恢復!
ClearCommError(hComm,&dwError,&comstat);
break;
}
}
}
}
FlushFileBuffers(hComm);
PurgeComm(hComm,PURGE_TXCLEAR);
bWrite=0;
return 1;
}

四、調用方法很簡單,只需要將你的串口參數進行簡單的設置就可以了。比如:
BOOL Main_OpenCom()//設置COM
{
int Boundrate=9600;//波特率
CString StopBits="1";//停止位
int DataBits=8;//數據位
CString Parity="ODD";//奇偶校驗
CString m_Port="COM1";
return SetCom(m_hCom1,m_Port,Boundrate,DataBits,Parity,StopBits);
}

void Main()
{
int SIZE;
DWORD BytestoRead=52*Count+6;//要11個位元組
int BWRITE[2];
int ReadTime=2000;
BYTE Outbuff[12]={0xff,0x00,0xea,0xff,0xea,0xff,0,0,0,0,0,0};
SIZE=sizeof(Outbuff);
WriteCom(m_hCom,Outbuff,SIZE,BWRITE);
ReadCom(m_hCom,m_Inbuff,BytestoRead,ReadTime);
//進行湘陰的解包處理
}

Ⅳ 易語言,怎樣用串口命令,請說得詳細點!謝謝!!

詳細點也就是
串口.啟動.
串口.發送數據({1,2,3})

串口收到數據並進行響應即可,,,主要是看你的串口協議是怎麼樣的,這里就怎麼發送數據就好了...

Ⅵ 如何通過串口把一個程序發給linux

使用串口協議登錄Linux終端控制台,通過Zmodem文件傳輸協議接收一個外部文件。
命令:rz -y會彈出文件瀏覽窗口,選擇要上傳的文件即可。
-y
表示若文件已存在,則覆蓋。

Ⅶ 怎樣在串口打開時自動發送幾個命令

你好!
可以採用定時器,一直判斷串口是不是打開!
如果串口打開,就發送數據!

Ⅷ 使用VB,串口發送大文件,串口設置怎麼寫

建議使用 二進制讀取文件的方式發送。
Open "TESTFILE" For Binary Access Write As #1

Close #1

在二進制訪問模式中,可以把文件指針移到文件的任何地方。文件剛被打開時,文件指針指向第一個位元組,以後將隨著文件處理命令的執行而移動。

收到 # 你就繼續讀取文件發送,收到!你就停止讀取。如此循環,直到文件結束,
判斷文件結束的命令為 eof(#1)=true

我只能告訴你這個方法,具體代碼自己寫吧。
照抄別人的代碼不如自己寫的代碼學到東西的東西多。

Ⅸ 藍牙串口助手使用方法

藍牙串口助手是一款基於RFCOMM藍牙串口服務的傳輸軟體,通過該軟體可以連接藍牙串口模塊進行通信,實現手機串口連接。類似計算機的串口助手,是電子工程師的開發利器

(1)實時模式:基本輸入輸出。發送字元串實時獲取信息

(2)鍵盤模式:可以自定義9個按鈕名稱和內容,實現點擊按鈕即可發送相應內容

(3)命令行模式:可設定命令結束符,用於通信調試。

(1)發現和連接藍牙串口模塊

(2)接收和發送數據

(3)可選擇ASCII碼顯示或者是HEX十六進制顯示

(5)發送十六進制數據

(6)將串口接收到的數據保存成txt文件

Ⅹ 在linux系統下怎麼讀取串口伺服器的實時數據

Linux串口讀寫:
#include <stdio.h> /*標准輸入輸出定義*/
#include <stdlib.h> /*標准函數庫定義*/
#include <unistd.h> /*Unix 標准函數定義*/
#include <sys/types.h>
#include <sys/stat.h>
#include "string.h"
#include <fcntl.h> /*文件控制定義*/
#include <termios.h> /*PPSIX 終端控制定義*/
#include <errno.h> /*錯誤號定義*/

#define FALSE -1
#define TRUE 0

/*********************************************************************/
int OpenDev(char *Dev)
{
int fd = open( Dev, O_RDWR | O_NOCTTY ); //| O_NOCTTY | O_NDELAY
if (-1 == fd)
{
perror("Can't Open Serial Port");
return -1;
}
else
return fd;
}

/**
*@brief 設置串口通信速率
*@param fd 類型 int 打開串口的文件句柄
*@param speed 類型 int 串口速度
*@return void
*/
int speed_arr[] = { B38400, B19200, B9600, B4800, B2400, B1200, B300,
B38400, B19200, B9600, B4800, B2400, B1200, B300, };
int name_arr[] = {38400, 19200, 9600, 4800, 2400, 1200, 300, 38400,
19200, 9600, 4800, 2400, 1200, 300, };
void set_speed(int fd, int speed)
{
int i;
int status;
struct termios Opt;
tcgetattr(fd, &Opt);
for ( i= 0; i < sizeof(speed_arr) / sizeof(int); i++) {
if (speed == name_arr[i]) {
tcflush(fd, TCIOFLUSH);
cfsetispeed(&Opt, speed_arr[i]);
cfsetospeed(&Opt, speed_arr[i]);
status = tcsetattr(fd, TCSANOW, &Opt);
if (status != 0) {
perror("tcsetattr fd1");
return;
}
tcflush(fd,TCIOFLUSH);
}
}
}

/**
*@brief 設置串口數據位,停止位和效驗位
*@param fd 類型 int 打開的串口文件句柄
*@param databits 類型 int 數據位 取值 為 7 或者8
*@param stopbits 類型 int 停止位 取值為 1 或者2
*@param parity 類型 int 效驗類型 取值為N,E,O,,S
*/
int set_Parity(int fd,int databits,int stopbits,int parity)
{
struct termios options;
options.c_lflag &= ~(ICANON | ECHO | ECHOE | ISIG); /*Input*/
options.c_oflag &= ~OPOST; /*Output*/
if ( tcgetattr( fd,&options) != 0) {
perror("SetupSerial 1");
return(FALSE);
}
options.c_cflag &= ~CSIZE;
switch (databits) /*設置數據位數*/
{
case 7:
options.c_cflag |= CS7;
break;
case 8:
options.c_cflag |= CS8;
break;
default:
fprintf(stderr,"Unsupported data size/n"); return (FALSE);
}
switch (parity)
{
case 'n':
case 'N':
options.c_cflag &= ~PARENB; /* Clear parity enable */
options.c_iflag &= ~INPCK; /* Enable parity checking */
break;
case 'o':
case 'O':
options.c_cflag |= (PARODD | PARENB); /* 設置為奇效驗*/
options.c_iflag |= INPCK; /* Disnable parity checking */
break;
case 'e':
case 'E':
options.c_cflag |= PARENB; /* Enable parity */
options.c_cflag &= ~PARODD; /* 轉換為偶效驗*/
options.c_iflag |= INPCK; /* Disnable parity checking */
break;
case 'S':
case 's': /*as no parity*/
options.c_cflag &= ~PARENB;
options.c_cflag &= ~CSTOPB;break;
default:
fprintf(stderr,"Unsupported parity/n");
return (FALSE);
}
/* 設置停止位*/
switch (stopbits)
{
case 1:
options.c_cflag &= ~CSTOPB;
break;
case 2:
options.c_cflag |= CSTOPB;
break;
default:
fprintf(stderr,"Unsupported stop bits/n");
return (FALSE);
}
/* Set input parity option */
if (parity != 'n')
options.c_iflag |= INPCK;
tcflush(fd,TCIFLUSH);
options.c_cc[VTIME] = 150; /* 設置超時15 seconds*/
options.c_cc[VMIN] = 0; /* Update the options and do it NOW */
if (tcsetattr(fd,TCSANOW,&options) != 0)
{
perror("SetupSerial 3");
return (FALSE);
}
return (TRUE);
}

int main(int argc, char **argv)
{

int fd;
int nread;
char buff[512];
char *dev = "/dev/ttyS0"; //串口二
fd = OpenDev(dev);
set_speed(fd,4800);
if (set_Parity(fd,8,1,'N') == FALSE)
{
printf("Set Parity Error/n");
exit (0);
}
int i;
i = getchar();
if ( i == '1')
{
while (1) //循環讀取數據
{
while((nread = read(fd, buff, 512))>0)
{
printf("/nLen %d/n",nread);
buff[nread+1] = '/0';
printf( "/n%s", buff);
}
}
}
if ( i == '2')
{
while (1) //循環寫入數據
{

gets(buff);

printf("------buff--->%s<--------/n",buff);
int num = strlen(buff);
printf("--------num---->%d<--------------/n",num);
if ( num > 0)
{
printf("Wirte num not NULL./r/n");
nread = write(fd, buff ,num);
if(nread == -1)
{
printf("Wirte sbuf error./n");
}
printf("--nread---->%d<-----------/n",nread);
}

}
}
close(fd);
//exit (0);
}

閱讀全文

與串口實時輸出文件命令相關的資料

熱點內容
dvd光碟存儲漢子演算法 瀏覽:757
蘋果郵件無法連接伺服器地址 瀏覽:963
phpffmpeg轉碼 瀏覽:672
長沙好玩的解壓項目 瀏覽:145
專屬學情分析報告是什麼app 瀏覽:564
php工程部署 瀏覽:833
android全屏透明 瀏覽:737
阿里雲伺服器已開通怎麼辦 瀏覽:803
光遇為什麼登錄時伺服器已滿 瀏覽:302
PDF分析 瀏覽:486
h3c光纖全工半全工設置命令 瀏覽:143
公司法pdf下載 瀏覽:382
linuxmarkdown 瀏覽:350
華為手機怎麼多選文件夾 瀏覽:683
如何取消命令方塊指令 瀏覽:350
風翼app為什麼進不去了 瀏覽:779
im4java壓縮圖片 瀏覽:362
數據查詢網站源碼 瀏覽:151
伊克塞爾文檔怎麼進行加密 瀏覽:893
app轉賬是什麼 瀏覽:163