串口伺服器怎麼讀數據
⑴ 求教各位大神怎麼將串口收到的數據讀出來
串口收到的數據,用笨的方法可以連接一個採集卡讀卡器。然後用採集卡採集數據,然後用採集卡讀卡器軟體讀出來。也可以用COM轉USB,USB能連接的東西就比較多了。
⑵ 怎麼樣正確讀取串口發過來的數據,並轉成數據
1、通信至少需要兩台設備。
2、單片機的串口可以連接到另外一台具有UART功能的設備,如另一台單片機或電腦。
3、讀進的數據並不是單片機本身的內容,而是另一台設備發出的。
4、符合非同步串列通信幀格式和約定波特率的字元。
⑶ 怎樣利用serialport控制項讀取串口中的數據
不是 有 接收 事件處理函數 嗎?serialport 實現過程(1)新建一個項目,命名為Ex13_01,默認窗體為Form1。(2)在Form1窗體中,主要添加兩個Button控制項,分別用於執行發送數據和接受數據,添加兩個TextBox控制項,用於輸入發送數據和顯示接收數據。(3)主要程序代碼。private void button1_Click(object sender, EventArgs e){serialPort1.PortName = "COM1";serialPort1.BaudRate = 9600;serialPort1.Open();byte[] data = Encoding.Unicode.GetBytes(textBox1.Text);string str = Convert.ToBase64String(data);serialPort1.WriteLine(str);MessageBox.Show("數據發送成功!","系統提示");}private void button2_Click(object sender, EventArgs e){byte[] data = Convert.FromBase64String(serialPort1.ReadLine());textBox2.Text = Encoding.Unicode.GetString(data);serialPort1.Close();MessageBox.Show("數據接收成功!","系統提示");}
⑷ 如何讀取串口設備返回的數據
首先,串口設備一般都是獨享的,如果你用screen打開了,那麼可能所有的接收到的信息會都傳向screen,你的串口即使能打開,也未必有數據。
其次,從PC角度來看,串口接收確實是read()函數,不需要額外的函數的,至於中斷之類的對於你上位機編程不知道也無所謂。一般串口接收會用一個單獨的線程,建議樓主也是用另一個線程來接收
第三,關於串口的設置。謹慎猜測一下,對於這種定位設備,即使你不去設置它,它可能也會定期的輸出數據的,這是從設備易用性角度猜的。所以,可能,你之前盡管認為你的串口寫是有效的,實際未必。這里就涉及到串口的設置問題,最常見的設置如115200bps, 8N1格式,這些還是需要你在串口打開後設置的,具體設置的方法網上一堆,你可以根據你的編譯環境查一下。針對你的設備,還是要建議你看一下設備手冊
⑸ 使用串口伺服器連接電腦與PLC後,如何實現PLC數據的讀寫
首先,需要熟悉PLC的通信協議;其次可以用PLC廠家提供的測試軟體,或者用通用的通信測試軟體,如格西烽火軟體等,根據plc協議進行測試即可。
⑹ 如何通過串口讀取plc的數據
串口編程的學習應該從以下幾個方面入手:1.就是上位機的編程,使用c語言或者vc,vb等語言進行上位機的編程實現,主要就是操作串口,理解通信波特率,奇偶校驗位,停止位的概念。如果使用單片機或者c語言開發的話,就會有一定麻煩,如果使用vb或者vc的話,就可以調用微軟的串口通信控制項進行串口的編程,這樣的例子網上很多,你可以下載下來分析一下。2.下位機的編程,就是plc的編程,主要是要理解通信協議為前提,首先把通信的協議搞定了,才可以進行通信的編程。例如:西門子的編程有自由口的通信,就必須編寫下位機的梯形圖程序;松下的話就簡單很多了。只要理解通信協議就可以編程了。3.在編程中,好的通信工具很重要:串口調試助手。可以幫助我們更好的進行串口的調試。4.西門子和松下的資料,我比較多,要是需要的話,給你分享一下。
⑺ 如何從串口伺服器845讀取數據
將串口轉換成網口工具,編寫通訊協議,建立連接對回碼包解析拆分存儲。
讀取串口伺服器數據,總體上的思路如下。
1、應用串口轉網口工具,將串口通訊轉換成網口通訊。
2、根據不同通訊協議,編寫相關通訊協議,建立連接,讀取伺服器端回碼。
3、對回碼進行數據包解析拆分。
4、將回碼的數據要麼進行轉發或者存儲資料庫。
⑻ 在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);
}
⑼ c#如何實現串口通信讀取數據
使用System.IO.Port.SerialPort類實現串口通信
System.IO.Port.SerialPort類介紹
System.IO.Port.SerialPort是.NET Framework提供的操作串列埠的類,裡面提供了一些方法、屬性和和事件供開發者調用操作串口。
調用流程
1. 直接調用SerialPort的靜態方法GetPortNames()獲取當前計算機的串列埠名稱數組
2.根據串口名稱,初始化SerialPort對象,設置參數,調用Open()方法打開串口
3.調用Write()方法發送數據
4.注冊接收數據的監聽,獲取數據(或者另起線程循環讀取接收數據,本文使用注冊監聽方式接收數據)
具體代碼實現
⑽ PLC怎樣通過串口讀取外部設備的數據
首先看外部設備的通訊協議PLC是否支持。
如西門子200PLC有RS485串口,可以支持ModbusRTU,就可以和帶該通訊協議的外部設備連接。
利用200PLC的Modbus通訊指令庫就可完成對外部設備數據的讀寫功能。