串口服务器怎么读数据
⑴ 求教各位大神怎么将串口收到的数据读出来
串口收到的数据,用笨的方法可以连接一个采集卡读卡器。然后用采集卡采集数据,然后用采集卡读卡器软件读出来。也可以用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通讯指令库就可完成对外部设备数据的读写功能。