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

📄 test.bak

📁 自己编的用于工业触摸屏通讯的MODBUS RTU SLAVE 协议源代码
💻 BAK
字号:
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>

#include "profdrv.h"

#define REGCNT    50
#define BITCNT    50
void main()
{
    struct MDS_WORD_STRUCT regbuf[REGCNT];               //字变量缓冲区
    struct MDS_BIT_STRUCT  coilbuf[BITCNT];              //位变量缓冲区
    unsigned short reglen;
    unsigned short regnum;
    unsigned short bitlen;
    unsigned short bitnum;
    unsigned short tmpbit;
    char ch;
    int modbus_sts;
    unsigned short addr_flash;
    unsigned short num_flash;
    unsigned short count;
    for (reglen=0; reglen<REGCNT;reglen++)
    {
        regbuf[reglen].rreg = reglen<<1+2;
        regbuf[reglen].wreg = reglen<<1+2;    
    }
    for (bitlen=0; bitlen<BITCNT;bitlen++)
    {
        coilbuf[bitlen].rcoil = 0;
        coilbuf[bitlen].wcoil = 0;    
    }   
	MDS_Open(1, 1, 19200 );                              //打开串口
	MDS_SetRegisterBuf(regbuf, reglen);                 //设置字变量缓冲区
    MDS_SetCoilBuf(coilbuf, bitlen);                    //设置位变量缓冲区
    printf("\n start proface test! press 'q' exit! \n");
    printf("\n     w:   set register ");
    printf("\n     e:   set coil ");
    printf("\n     q:   quit test\n");
    for ( ; ; )
    {
        modbus_sts = MDS_CheckCommand(&addr_flash, &num_flash);//刷新、处理MODBUS通讯指令
        //处理控制器写数据任务
        if (kbhit())
        {
        	  ch = getch();
        	  if ('q'==ch)
        	  {
        	      exit(0);	
        	  }else if ('w'==ch)
        	  {
        	      printf("\nset register number = ");
        	      scanf("%d", &regnum); 
                printf("\nset register value= ");
                scanf("%d", &regbuf[regnum].rreg); 
                printf("\nset register ok!");
	          }else if ('e'==ch)
	          {
        	      printf("\nset coil number = ");
        	      scanf("%d", &regnum); 
                printf("\nset coil value= ");
                scanf("%d", &tmpbit);

                if (0==tmpbit)
                {
                    coilbuf[regnum].rcoil = 0;	
                }else
                {
		                coilbuf[regnum].rcoil = 1;
                }
                printf("\nset coil ok!");         	
	          }
        }   
        //处理触摸屏写通讯任务 
        if (WRITE_WORD==modbus_sts)
        {
                printf ("\nchange registers first address = %d,  number = %d", addr_flash, num_flash);    	
                for (count=0;count<num_flash;++count)
                {
                    printf ("\nchange register address = %d,  value = %d", addr_flash+count, regbuf[addr_flash+count].wreg);
                    regbuf[addr_flash+count].rreg = regbuf[addr_flash+count].wreg;    	
                }
        }
        if (WRITE_BIT==modbus_sts)
        {
                printf ("\nchange coil first address = %d,  number = %d", addr_flash, num_flash);    	
                for (count=0;count<num_flash;++count)
                {
                    printf ("\nchange coil address = %d,  value = %d", addr_flash+count, coilbuf[addr_flash+count].wcoil);
                    coilbuf[addr_flash+count].rcoil = coilbuf[addr_flash+count].wcoil;    	
                }
        } 
    }
    //if (kbhit())
    //{
		//MDS_Close();
		//exit(0);
    //}    
}

⌨️ 快捷键说明

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