linux下多线程多串口数据转发程序
来源:互联网 发布:汉字域名有什么坏处 编辑:程序博客网 时间:2024/06/05 14:23
linux下多线程多串口数据转发程序
#include <sys/types.h>#include <sys/socket.h>#include <linux/in.h>#include <linux/un.h>#include <string.h>#include <signal.h>#include <stdio.h>#include <stdlib.h>#include <malloc.h>#include <errno.h>#include <unistd.h>#include <unistd.h>#include <signal.h>#include <sys/ioctl.h>#include <pthread.h>#include <sys/time.h>#include <sys/select.h>#include <fcntl.h>#include <unistd.h>#include"modbus.h"void *modbus_server_client_thread(){ while(1) { sleep(1); modbus_t *mb; int16_t tab_reg[32]={0}; mb = modbus_new_rtu("/dev/ttySAC2",19200,'N',8,1);//open port modbus_set_slave(mb,1);//set slave address modbus_connect(mb); struct timeval t; t.tv_sec=0; t.tv_usec=1000000;//set modbus time 1000ms modbus_set_response_timeout(mb,&t); int regs=modbus_read_registers(mb, 30, 10, tab_reg); printf("%d %d %d %d %d %d %d %d %d %d %d\n",regs,tab_reg[0],tab_reg[1],tab_reg[2],tab_reg[3],tab_reg[4],tab_reg[5],tab_reg[6],tab_reg[7],tab_reg[8],tab_reg[9]); modbus_free(mb); modbus_close(mb); }}void *modbus_server_slave_thread(){ while(1) { int socket; modbus_t *ctx; modbus_mapping_t *mb_mapping; int rc; int use_backend; ctx = modbus_new_rtu("/dev/ttySAC3", 19200, 'N', 8, 1); modbus_set_slave(ctx, 1); modbus_connect(ctx); mb_mapping = modbus_mapping_new(MODBUS_MAX_READ_BITS, 0, MODBUS_MAX_READ_REGISTERS, 0); if (mb_mapping == NULL) { fprintf(stderr, "Failed to allocate the mapping: %s\n", modbus_strerror(errno)); modbus_free(ctx); return ; } for(;;) { uint8_t query[MODBUS_TCP_MAX_ADU_LENGTH]; rc = modbus_receive(ctx, query); if (rc >= 0) { modbus_reply(ctx, query, rc, mb_mapping); printf("%d,%d,%d,%d, %d,%d,%d,%d, %d,%d,%d,%d, %d,%d,%d,%d, %d,%d,%d,%d\n",query[0],query[1],query[2],query[3],query[4],query[5],query[6],query[7],query[8],query[9],query[10],query[11],query[12],query[13],query[14],query[15],query[16],query[17],query[18],query[19]); } else { /* Connection closed by the client or server */ break; } } printf("Quit the loop: %s\n", modbus_strerror(errno)); modbus_mapping_free(mb_mapping); close(socket); modbus_free(ctx); }}void main(){ int ret; pthread_t modbus_client_thread,modbus_slave_thread; pthread_create(&modbus_client_thread,NULL,modbus_server_client_thread,NULL); pthread_create(&modbus_slave_thread,NULL,modbus_server_slave_thread,NULL); /*等待线程结束*/ pthread_join(modbus_client_thread,NULL);//pthread_join会阻塞主线程,等待子线程结束。 pthread_join(modbus_slave_thread,NULL); return;}
一个线程串口当主机采集数据,另一个线程串口当从机发送数据。利用libmodbus库,动态编译生成后,运行程序。
1 0
- linux下多线程多串口数据转发程序
- linux下自己写的网卡数据转发程序
- linux下TCP与RTU数据转发程序
- linux多线程下打开串口发送和接收数据
- linux多线程下打开串口发送和接收数据
- linux多线程下打开串口发送和接收数据
- Qt 转发两串口数据(二、桌面程序版)
- windows下,C++实现串口编程,串间口转发数据
- windows下,C++实现串口编程,串间口转发数据
- linux下串口程序测试
- Linux下串口程序开发
- Linux下串口程序开发
- Linux下串口程序开发
- linux 下串口程序编写
- linux下的串口通信程序详解
- LINUX下java串口程序环境配置
- Linux下串口程序开发(二)
- Linux下串口程序开发 转帖
- 【考研备考】中山大学考研备考手册
- Javascript 严格模式详解 "use strict"
- 更新MBProgressHUD后的基本使用方法
- 微信测试号申请
- POJ_1753
- linux下多线程多串口数据转发程序
- 吐血推荐珍藏的 Chrome 插件
- [software]Pomodairo 使用攻略
- signal hubs 404问题解决方案
- Delphi控件开发浅入深出(一)
- JAVA设计模式之:命令模式
- (二)02模拟应用商店创建应用程序下载界面
- 队列
- HTML/Ajax/XML数据交互:HTML通过Ajax读取XML的存储信息