mysql串口转网口_网关--串口接收数据转送到网口发送到PC机

先上代码吧:

/*--------------------------------------------------------------

日期:2012/1/1

功能:串口接收转发到网络

--------------------------------------------------------------*/

#include

#include

#include

#include "rs232.h"

#include

#include

#include

#include

#include

#include

#include

#include

#define PORT 3000

//#define PACKET_SIZE 8192

#define PACKET_SIZE 6

static int count=0;

static unsigned int second;

static unsigned int sum;

void display()

{

printf("\n");

printf("Transfer complete !\n");

printf("Total size:%d !\n",sum);

printf("Speed:%d Mbps\n",8*sum/second/0x100000);

exit(0);

}

/*-----------------------------------------

client 192.168.2.111 –t 1 –p 1

argv[0] = client

argv[1] = 172.16.22.155

argv[2] = –t

argv[3] = 1

argv[4] = -p

argv[5] = 1

------------------------------------------*/

void Tcp()

{

int argc_data;

char *argv_data[6];

int sockfd;

int recv_bytes;

//unsigned int buf[PACKET_SIZE];

unsigned int *Tcp_buf;

struct hostent *he;

struct sockaddr_in srvaddr;

unsigned int uiip;

unsigned int nsecond,packet_size;

sum=0;

argc_data = 6;

argv_data[0] = "client";

argv_data[1] = "172.16.22.155";

argv_data[2] = "-t";

argv_data[3] = "1";

argv_data[4] = "-p";

argv_data[5] = "1";

if(argc_data< 4 ){

perror("Usage: client -t time -p PACKET_SIZE\n");

exit(2);

}

packet_size=PACKET_SIZE;

second=atoi(argv_data[3]);

if(argc_data==6)

packet_size=atoi(argv_data[5]);

printf("packet_size=%d\n",packet_size);

Tcp_buf = malloc(packet_size);

he=gethostbyname(argv_data[1]);

sockfd=socket(AF_INET,SOCK_STREAM,0);

bzero(&srvaddr,sizeof(srvaddr));

srvaddr.sin_family=AF_INET;

srvaddr.sin_port=htons(PORT);

srvaddr.sin_addr=*((struct in_addr *)he->h_addr);

//aiptoi(argv[1],&uiip);

//srvaddr.sin_addr.s_addr=uiip;

if(connect(sockfd,

(struct sockaddr *) &srvaddr, sizeof(struct sockaddr))== -1){

perror("Connect error!\n");

exit(1);

}

//nsecond = htonl(second);

nsecond = 0x01020304;

if(write(sockfd,&nsecond,sizeof(nsecond))== -1){

perror("Error when send second!\n");

exit(1);

}

printf("Data Transfering!\n");

/*while (1){

if((recv_bytes=read(sockfd,buf,packet_size))<=0){

printf("Connection closed!\n");

break;

}

sum+=recv_bytes;

}

*/

while(1)

{

write(sockfd, &nsecond, sizeof(nsecond));

sleep(5);

}

close(sockfd);

free(Tcp_buf);

display();

//return 0;

}

main(int argc, char *argv[])

{

int ret,portno,nWritten,nRead;

char buf[5] = "hell";

/*网口实现部分*/

int argc_data;

char *argv_data[6];

int sockfd;

int recv_bytes;

//unsigned int buf[PACKET_SIZE];

unsigned int *Tcp_buf;

struct hostent *he;

struct sockaddr_in srvaddr;

unsigned int uiip;

unsigned int nsecond,packet_size;

sum=0;

argc_data = 6;

argv_data[0] = "client";

argv_data[1] = "172.16.22.155";

argv_data[2] = "-t";

argv_data[3] = "1";

argv_data[4] = "-p";

argv_data[5] = "1";

portno=0;

if(argc_data< 4 ){

perror("Usage: client -t time -p PACKET_SIZE\n");

exit(2);

}

packet_size=PACKET_SIZE;

second=atoi(argv_data[3]);

if(argc_data==6)

packet_size=atoi(argv_data[5]);

printf("packet_size=%d\n",packet_size);

Tcp_buf = malloc(packet_size);

he=gethostbyname(argv_data[1]);

sockfd=socket(AF_INET,SOCK_STREAM,0);

bzero(&srvaddr,sizeof(srvaddr));

srvaddr.sin_family=AF_INET;

srvaddr.sin_port=htons(PORT);

srvaddr.sin_addr=*((struct in_addr *)he->h_addr);

//aiptoi(argv[1],&uiip);

//srvaddr.sin_addr.s_addr=uiip;

if(connect(sockfd,

(struct sockaddr *) &srvaddr, sizeof(struct sockaddr))== -1){

perror("Connect error!\n");

exit(1);

}

//nsecond = htonl(second);

/*

nsecond = 0x01020304;

if(write(sockfd,&nsecond,sizeof(nsecond))== -1){

perror("Error when send second!\n");

exit(1);

}

printf("Data Transfering!\n");

*/

/*while (1){

if((recv_bytes=read(sockfd,buf,packet_size))<=0){

printf("Connection closed!\n");

break;

}

sum+=recv_bytes;

}

*/

/*while(1)

{

write(sockfd, &nsecond, sizeof(nsecond));

sleep(5);

}

close(sockfd);

free(Tcp_buf);

display();

*/

//return 0;

/*--------------------------------------------------------------------*/

while(1)

{

ret=OpenCom(portno,"/dev/ttyS1",115200);

if(ret==-1)

{

perror("The /dev/ttyS1 open error.");

exit(1);

}

/*while(1)

{

nWritten=ComWrt(portno,"abc",3);

}

*/

printf("\n/dev/ttyS1 has send %d chars!\n",nWritten);

printf("\nRecieving data!***\n");

fflush(stdout);

//buf[5] = "hell";

while(1)

{

/*nRead=ComRd(0,buf,256,3000);

if(nRead>0)

{

printf("*****OK\n");

nWritten = ComWrt(portno, buf, sizeof(buf));

}*/

printf("******start***********\n");

printf("*****ComRd*****\n");

//ComRd(0, buf, 256, 3000);

nRead = ComRd(0, buf, 256, 3000);

if(nRead > 0)

{

printf("The Rddata is: %s\n",buf);

/*---串口部分-----*/

ComWrt(portno, buf, sizeof(buf));

printf("The ComWrt data is: %s\n",buf);

/*网口部分*/

//nsecond = 0x01020304;

if(write(sockfd,buf,sizeof(buf))== -1)

{

perror("Error when send second!\n");

exit(1);

}

//printf("Data Transfering!\n");

write(sockfd, buf, sizeof(buf));

printf("send to sockfd :%s\n",buf);

sleep(1);

printf("*****************end*****************\n");

}

/*else

printf("Timeout\n");

*/

}

if((ret=CloseCom(portno)==-1))

{

perror("Close com");

exit(1);

}

printf("\n\n");

}

printf("Exit now.\n");

/*网口部分*/

close(sockfd);

//free(Tcp_buf);

display();

/*----------------------------------*/

return;

}

上面就是全部的主程序代码了

还有一个是RS232串口部分的代码:

/*

** File: rs232.c

**

** Description:

** Provides an RS-232 interface that is very similar to the CVI provided

** interface library

*/

#include

#include

#include "rs232.h"

#include

#include

#include

#include

#include

#define DEBUG

struct PortInfo ports[MAX_PORTS];

/*

** Function: OpenCom

**

** Description:

** Opens a serial port with default parameters

**

** Arguments:

** portNo - handle used for further access

** deviceName - the name of the device to open

**

** Returns:

** -1 on failure

*/

int OpenCom(int portNo, const char deviceName[],long baudRate)

{

return OpenComConfig(portNo, deviceName, baudRate, 1, 8, 1, 0, 0);

}

/*

*/

long GetBaudRate(long baudRate)

{

long BaudR;

switch(baudRate)

{

case 115200:

BaudR=B115200;

break;

case 57600:

BaudR=B57600;

break;

case 19200:

BaudR=B19200;

break;

case 9600:

BaudR=B9600;

break;

default:

BaudR=B0;

}

return BaudR;

}

/*

** Function: OpenComConfig

**

** Description:

** Opens a serial port with the specified parameters

**

** Arguments:

** portNo - handle used for further access

** deviceName - the name of the device to open

** baudRate - rate to open (57600 for example)

** parity - 0 for no parity

** dataBits - 7 or 8

** stopBits - 1 or 2

** iqSize - ignored

** oqSize - ignored

**

** Returns:

** -1 on failure

**

** Limitations:

** parity, stopBits, iqSize, and oqSize are ignored

*/

int OpenComConfig(int port,

const char deviceName[],

long baudRate,

int parity,

int dataBits,

int stopBits,

int iqSize,

int oqSize)

{

struct termios newtio;

long BaudR;

ports[port].busy = 1;

strcpy(ports[port].name,deviceName);

if ((ports[port].handle = open(deviceName, O_RDWR, 0666)) == -1)

{

perror("open");

// assert(0);

}

/* set the port to raw I/O */

newtio.c_cflag = CS8 | CLOCAL | CREAD ;

newtio.c_iflag = IGNPAR;

// newtio.c_oflag = 0;

// newtio.c_lflag = 0;

newtio.c_oflag = ~OPOST;

newtio.c_lflag = ~(ICANON | ECHO | ECHOE | ISIG);

newtio.c_cc[VINTR] = 0;

newtio.c_cc[VQUIT] = 0;

newtio.c_cc[VERASE] = 0;

newtio.c_cc[VKILL] = 0;

newtio.c_cc[VEOF] = 4;

newtio.c_cc[VTIME] = 0;

newtio.c_cc[VMIN] = 1;

newtio.c_cc[VSWTC] = 0;

newtio.c_cc[VSTART] = 0;

newtio.c_cc[VSTOP] = 0;

newtio.c_cc[VSUSP] = 0;

newtio.c_cc[VEOL] = 0;

newtio.c_cc[VREPRINT] = 0;

newtio.c_cc[VDISCARD] = 0;

newtio.c_cc[VWERASE] = 0;

newtio.c_cc[VLNEXT] = 0;

newtio.c_cc[VEOL2] = 0;

cfsetospeed(&newtio, GetBaudRate(baudRate));

cfsetispeed(&newtio, GetBaudRate(baudRate));

tcsetattr(ports[port].handle, TCSANOW, &newtio);

return 0;

}

/*

** Function: CloseCom

**

** Description:

** Closes a previously opened port

**

** Arguments:

** The port handle to close

**

** Returns:

** -1 on failure

*/

int CloseCom(int portNo)

{

if (ports[portNo].busy)

{

close(ports[portNo].handle);

ports[portNo].busy = 0;

return 0;

}

else

{

return -1;

}

}

/*

** Function: ComRd

**

** Description:

** Reads the specified number of bytes from the port.

** Returns when these bytes have been read, or timeout occurs.

**

** Arguments:

** portNo - the handle

** buf - where to store the data

** maxCnt - the maximum number of bytes to read

**

** Returns:

** The actual number of bytes read

*/

int ComRd(int portNo, char buf[], int maxCnt,int Timeout)

{

int actualRead = 0;

fd_set rfds;

struct timeval tv;

int retval;

if (!ports[portNo].busy)

{

assert(0);

}

/* camp on the port until data appears or 5 seconds have passed */

FD_ZERO(&rfds);

FD_SET(ports[portNo].handle, &rfds);

tv.tv_sec = Timeout/1000;

tv.tv_usec = (Timeout%1000)*1000;

retval = select(16, &rfds, NULL, NULL, &tv);

if (retval)

{

actualRead = read(ports[portNo].handle, buf, maxCnt);

}

#ifdef DEBUG

if(actualRead>0)

{

unsigned int i;

for (i = 0; i < actualRead; ++i)

{

if ((buf[i] > 0x20) && (buf[i] < 0x7f))

{

// printf("

printf("%c",buf[i]);

}

else

{

// printf("

printf("%02X",buf[i]);

}

}

printf("\n");

}

fflush(stdout);

#endif /* DEBUG */

return actualRead;

}

/*

** Function: ComWrt

**

** Description:

** Writes out the specified bytes to the port

**

** Arguments:

** portNo - the handle of the port

** buf - the bytes to write

** maxCnt - how many to write

**

** Returns:

** The actual number of bytes written

*/

int ComWrt(int portNo, const char *buf, int maxCnt)

{

int written;

if (!ports[portNo].busy)

{

assert(0);

}

#ifdef DEBUG

{

int i;

for (i = 0; i < maxCnt; ++i)

{

if ((buf[i] > 0x20) && (buf[i] < 0x7f))

{

// printf(">'%c'", buf[i]);

printf("%c",buf[i]);

}

else

{

// printf(">%02X", buf[i]);

printf("%02X",buf[i]);

}

}

printf("\n");

}

fflush(stdout);

#endif /* DEBUG */

written = write(ports[portNo].handle, buf, maxCnt);

return written;

}

然后再看头文件:

#ifndef _RS232_H_

#define _RS232_H_

/* the maximum number of ports we are willing to open */

#define MAX_PORTS 4

/*this array hold information about each port we have opened */

struct PortInfo{

int busy;

char name[32];

int handle;

};

int OpenCom(int portNo,const char deviceName[],long baudRate);

int CloseCom(int portNo);

int ComRd(int portNo,char buf[],int maxCnt,int Timeout);

int ComWrt(int portNo,const char * buf,int maxCnt);

//long GetBaudRate(long baudRate);

//int OpenComConfig(int port,

// const char deviceName[],

// long baudRate,

// int parity,

// int dataBits,

// int stopBits,

// int iqSize,

// int oqSize);

#endif

再看效果图:

3f716a985184265663635156aa283876.png

23473c32e54edb767293c7482472a4c8.png

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值