📄 comunic.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 + -