⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 plusecomm-h

📁 RS485通讯,用于PC机与C51单片机通讯,进行运动控制
💻
字号:

#ifndef __PLUSE_COMM_H_ICL__
#define	__PLUSE_COMM_H_ICL__

#include "common.h"

#define		START_CHAR						'%'
#define		END_CHAR						'$'
#define		ACK_CHAR						'!'
#define		NO_ACK_CHAR						'#'

#define		TIME_OVER_CHAR					'*'

#define		PLUSE_READ_MOTOR_STATUS			0x80
#define		PLUSE_READ_ALL_MOTOR_STATUS		0x81

#define		PLUSE_WRITE_ONE_STATUS			0x90
#define		PLUSE_WRITE_CTRL_BYTE			0x91
#define		PUSE_WRITE_STOP_BYTE			0x92
#define		PUSE_WRITE_LOWEST_RATE			0x93

#define		MAX_PLUSE_MOTOR_NUM				6
#define		MAX_PLUSE_BAORD_NUM				6

#define		MAX_STATUS_ITEM_NUM				5

typedef struct
{
	u_char	DirCpl;						// 方向求反标志
	u_char	DdirEnable;					// 双向使能	
	u_char	WriteCtrlFlag;

	u_char	LowestRate;

	u_long	CurPos;						// 当前位置
	u_char	CurCtrl;					// 当前控制
} MOTOR_STATUS_DEF;


typedef struct
{
	int				StartDevNo;							// 设备号
	int				DevNum;								// 设备数量

	int				InitOk;								// 端口初始化标志
	int				CommNo;								// 所用计算机串口号

	HANDLE 			CommId;								// 端口索引
	OVERLAPPED		Overlapped;

	MODE_DEF		Mode;
	
	int				RevStatus;							// 端口接收状态
	BUF_DEF			RecvBuf;							// 端口接收缓冲区
	
	BUF_DEF			PollCmd;							// 下行命令缓冲区
	int				PollCmdTimeConst;					// 轮训指令时间常数
	int				PollCmdTimeCnt;						// 轮训指令时间计数
	
	int				ReadStatusCnt;						

	MOTOR_STATUS_DEF Motor[MAX_PLUSE_BAORD_NUM][MAX_PLUSE_MOTOR_NUM];
	
	int				LastCmdAckFlag;
	int				SendCmdFlag;						// 下发一命令标志
	int				SendTimeConst;						// 下发命令超时时间常数
	int				SendTimeCnt;						// 下发命令时间计数
	int				SendCmdAckFlag;

} PLUSE_MOTOR_DEF;

typedef struct
{
	u_char	Cnt;
	u_char	DirCtrl[MAX_STATUS_ITEM_NUM];
	u_char	Rate[MAX_STATUS_ITEM_NUM];
	u_long	Pluse[MAX_STATUS_ITEM_NUM];
} STATUS_DEF;

void PluseMotorReadConfig( void );
void PluseMotorInitCommPort( void );
int PluseMotorReadCommPort( char *buf, int len );
int PluseMotorWriteCommPort( char *buf, int len );

void PluseMotorDataProcess( void );
void PluseMotorReadCommData( void );
u_char PluseMotorCalCheckSum( u_char *buf, int len );

void PluseMotorMakeReadStatus( int devidx, int motoridx, int cmd );
// dir = 0, 正向, dir = 1, 反向
// rate = 1 - 100, 代表0.1-10Khz ,
// pluse 永远为正数,代表脉冲数量
void PluseMotorMakeWriteStatus( int devidx, int motoridx, int dir, int rate, int pluse, int quick );
void PluseMotorMakeGroupWriteStatus( int devidx, int motoridx, STATUS_DEF *buf );
void PluseMotorMakeWriteCtrl( int devidx, int motoridx );
void PluseMotorMakeWriteStop( int devidx, int motoridx, int all );

void PluseMotorSendCmd( void );

void PluseMotorTimer( void );

u_char GetPluseMotorCurStatusByte( int devidx, int motoridx );
long GetPluseMotorCurPos( int devidx, int motoridx );

#endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -