资源简介
linux tcpmodbus服务端 输入寄存器(0x04)离散输入寄存器(0x02)保持寄存器(0x03(读) 0x06(单个写) 0x10(多个写))

代码片段和文件信息
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include “linux_thread.inc“
#define MAX_MODBUS_REVLEN 4096
#define MAX_CLIENT_CNT 10
#define STATUS_ON 1
#define STATUS_OFF 0
char modbus_sockt_state[MAX_CLIENT_CNT];
unsigned int modbus_sockt_timer[MAX_CLIENT_CNT];
int modbus_client_sockptr[MAX_CLIENT_CNT];
struct sockaddr_in Server_Addr Client_addr;
int modbus_sockptr;
unsigned short int test_keep[10]={12345678910};
void UINT16ToBigEndien(unsigned short int u16_data unsigned char *dat_out)
{
dat_out[0] = u16_data >> 8;
dat_out[1] = u16_data;
}
unsigned char GetStatusInput(unsigned short addrunsigned char* err)//添加自己点表 离散输入寄存器0x02
{
unsigned char ret;
ret = 0;
*err=0;
if ((addr >=0)&&(addr<10))
{
ret = 1;
}
else
{
*err=2;
}
return (ret);
}
unsigned short GetKeepInput(unsigned short addrunsigned char *err)//添加自己点表 读保持寄存器0x03
{
unsigned short ret;
unsigned char *uc_point;
unsigned char *uc_point2;
*err=0;
ret = 0;
if((addr>=0)&&(addr<10))
{
ret=test_keep[addr];
}
else
{
*err=2;
}
return (ret);
}
unsigned short GetModbusInput(unsigned short addrunsigned char *err)//添加自己点表 输入寄存器0x04
{
unsigned short ret;
*err=0;
if((addr>=0)&&(addr<10))
{
ret=addr+1;
}
else
{
*err=2;
}
return (ret);
}
int SetModbus(unsigned short addr unsigned int datasetunsigned char *err)//添加自己点表 设置保持寄存器0x06 或0x10
{
unsigned char *uc_point;
unsigned char *uc_point2;
*err=0;
if((addr>=0)&&(addr<10))
{
if(dataset<255)
test_keep[addr]=dataset;
else
*err=3;
}
else
{
*err=2;
}
return 1;
}
int AnalysModbus(unsigned char *datain unsigned short len unsigned char *dataout)
{
unsigned short event;
unsigned short protocol;
unsigned short length;
unsigned char *datap;
unsigned char *datapout;
unsigned char addr;
unsigned char cmd;
unsigned short startaddr;
unsigned short regcnt;
unsigned short regaddr;
unsigned short setvalue;
unsigned char setlen;
unsigned short uitemp;
unsigned char *ctp;
unsigned char result;
unsigned short bat_no;
time_t timep_save;
unsigned char time_buf_save[6]err;
char tempc_buf[50];
int grp_no;
int index;
int i j;
index = 0;
while (index < len - 6)
{
datap = (unsigned char *)(&datain[index]);
event = datap[0] * 0x100 + datap[1];
protocol = datap[2] * 0x100 + datap[3];
length = datap[4] * 0x100 + datap[5];
if (protocol == 0 && length >= 2)
{
dataout[0] = event >> 8;
dataout[1] = event;
dataout[2] = protocol >> 8;
dataout[3] = protocol;
dataout[4] = 0;//later
dataout[5] = 0;//later
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 883 2018-07-25 09:13 Makefile.server
文件 12762 2018-07-25 09:12 tcpmodbusserver
文件 12402 2018-07-25 09:16 tcpmodbusserver.c
文件 2487 2018-07-25 09:30 linux_thread.inc
----------- --------- ---------- ----- ----
28534 4
相关资源
- FTP课程设计(服务端+客户端)
- uboot到linux logo显示不间断 补丁
- UNIX/LINUX编程实践教程的源码
- Linux任务管理器
- linux应用层的华容道游戏源代码
- ubuntu9.10 可加载内核模块和字符设备驱
- MP3文件ID3v2ID3v2APEv2标签读取
- 操作系统实验——虚存管理实验
- linux下的发包工具sendip
- 尚观培训linux许巍关于c 的笔记和讲义
- 尚观培训linux董亮老师关于数据结构的
- linux 线程池源码 c 版
- linux C 电梯程序练习
- linux下用多进程同步方法解决生产者
- Linux 操作系统实验(全)
- Linux From Scratch 中文手册
- linux 网络实验 ftp程序
- Linux命令大全离线版&在线版
- 操作系统共享内存实验
- dos 下运行Linux 命令--gnu_utils
- linux 0.12内核源代码
- linux简易shell C实现
- linux实验报告及心得体会
- 基于GTK的Linux环境下的简易任务管理器
- socket小工具(可方便建立TCP UDP的soc
- 61850客户端服务端测试程序
- linux扫雷游戏代码
- CAN Linux驱动代码
- Linux系统教材
- radmin服务端win10亲测可用,带破解方法
评论
共有 条评论