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

📄 comunic.h

📁 profibus主站及从站源代码
💻 H
字号:
#include <alloc.h>
#include <stdlib.h>
#include <dos.h>
#include <stdio.h>
#include <string.h>
#include <fcntl.h>
#include <io.h>
#include <sys\stat.h>

#ifndef __PROFIBUS_SERIAL_COMUNICATION_H
#define __PROFIBUS_SERIAL_COMUNICATION_H


#define NR	2
//define start delimitators
#define	SD1	0x10
#define	SD2	0x68
#define	SD3	0xa2
#define	SD4	0xdc

//define end delimitator
#define ED	0x16

//define single caracter
#define	SC	0xE5

//definitii pentru transmisie seriala
#define EMIS_G  0x20
#define RECP_C  0x1
#define TMOUT	1000 //time out pentru recv

//tipuri de telegrame
#define TI_FARA_DATE	1  // telegrama interogare cu lungime fixa fara date
#define TR_FARA_DATE	2  // telegrama raspuns cu lungime fixa fara date
#define TI_LF_CU_DATE   3  // telegrama interogare cu lungime fixa cu camp de date
#define TR_LF_CU_DATE   4  // telegrama raspuns cu lungime fixa cu camp de date
#define TI_LV_CU_DATE   5  // telegrama interogare cu lungime variabila cu camp de date
#define TR_LV_CU_DATE   6  // telegrama raspuns cu lungime variabila cu camp de date

#define TOKEN		11 // token
#define T_RASPUNS_SCURT 12 // telegrama raspuns scurt

#define TELEGRAMA_NECUNOSCUTA 21;

#define TELEGRAM_ERROR	-1 // formatul telegramei nu corespunde cu tipul ei
#define MALLOC_ERROR	-2 // eroare la alocarea spatiului de memorie
#define UNKNOWN_COM	-4 // com necunoscut

#define TIMEOUT		-8
#define RECVOK		1

// definire structura telegrama...
// la telegramele fara date campurile data si length vor fi NULL, resp. 0
// la cele cu lungime fixa length va fi 8

typedef struct telegrama{
	unsigned char sa; // source address
	unsigned char da; // destination address
	char *data; // the data
	int length; // the length of the data
} TEL;

// functii de codare si decodare stringuri
unsigned char *encode(unsigned char *text,int len,int *retlen);
// codifica un text folosind caracterele pe 11 biti ale PROFIBUS-ului
// completeaza cu biti de 0 pana ce umple ultimul caracter
// returneaza sirul codat
// parametrii: text - textul de codat
//  	       len  - lungimea textului de codat
//             retlen - lungimea textului codat

unsigned char *decode(unsigned char *text,int len,int *retlen,int *error);
// decodifica un text din caracterele pe 11 biti ale PROFIBUS-ului in caractere normale
// inversul lui encode
// returneaza sirul decodata
// parametrii: text - textul codat
//	       len  - lungimea textului codat
//             retlen - lungimea textului returnat
//					error - 1 in caz ca a aparut eroare la decodare, 0 altfel


// functii de trimitere si receptie telegrame

int send(int com,TEL *tel,int type);
// parametrii:
// com : numarul comului : 0 pt COM1 si 1 pt COM2
// tel : telegrama... NULL pt TOKEN and SINGLE CHARACTER
// type : tipul telegramei
// returneaza coduri de eroare definite mai sus or tipul telegramei trimise
//    or TELEGRAMA_NECUNOSCUTA


TEL *recv(int com,int *type);
// parametrii:
// com : numarul comului : 0 pt COM1 si 1 pt COM2
// type: tipul datagramei primite sau codurile de eroare definite mai sus
// returneaza un pointer la telegrama primita sau NULL in caz de eroare,
//    token sau single caracter
// functia asculta pe COM si intoarce tipul telegramei primite in type
// returnand un pointer la telegrama daca e cazul

void init_port(int port);
// initializeaza portul 1 pt COM1 si 2 pt COM2


// functii implementate de modulul master

void init();
// initializeaza portul (apeleaza functia init_port)
// si pune poll_list pe 0

void broadcast();
// face broadcast de master - trimite la toti slaves adresa masterului

int request_status(int i);
// intoarce 1 sau 0 dupa cum slave-ul i este prezent sau nu

TEL* request_data(int i);
// cere slave-ului i sa se identifice
// intoarce telegrama de identificare primita de la slave

TEL* send_request_data(int i, int pos);
// masterul trimite slave-ului numele unui fisier apoi pozitia curenta de citire din acesta
// iar slave-ul ii trimite ce citeste din fisier
// functia intoarce telegrama primita de la slave

void explore_polllist();
// exploreaza poll_list si vede ce slave este prezent

void message_cycle();
// cea mai importanta functie a masterului - ciclul de mesaje
// se realizeaza mai intai servirea cererii de prioritate mare - transmitere fisier
// apoi se exploreaza poll_list
// si in final serviciul de identificare - prioritate joasa
#endif

⌨️ 快捷键说明

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