虫虫首页| 资源下载| 资源专辑| 精品软件
登录| 注册

Modbus<b>总线系统</b>

  • 为 了提高用户身份认证和授权管理的灵活性

    为 了提高用户身份认证和授权管理的灵活性,从We b 应用系统的安全性角度出发,讨论了 一 种在. N E T F r a me w o r k下保证应用程序安全性的身份验证和授权模型,并给出了模型的具体实现方法。 该模型利用 F o r ms身份验证方法对用户的身份进行鉴别。在授权处理上,模型结合统一资源定位( u . J f o r m R e s o u r c e L o c a t o r , U R L ) 授权模式和用户所具有的系统角色,分别从页面级和页面操作级对用户的访问进行 控制。该模型在企业局域网环境内能够提供比较灵活的身份认证和基于角色的授权服务。实际应用表明, 基于该模型的We b应用系统能够对用户的访问进行有效的控制,从而保证了系统的安全性

    标签: 用户 授权 身份认证

    上传时间: 2013-12-31

    上传用户:VRMMO

  • 当今时代是飞速发展的信息时代。在各行各业中离不开信息处理

    当今时代是飞速发展的信息时代。在各行各业中离不开信息处理,计算机被广泛应用于B/S系统环境。计算机的好处在于它能够进行信息管理。使用计算机进行信息控制,不仅提高了工作效率,而且大大的提高了安全性。

    标签: 发展 信息时代 信息处理

    上传时间: 2014-01-21

    上传用户:woshiayin

  • what is modbus

    modbus工业总线介绍,内容浅显易懂,很适合初学者对modbus有个大致了解

    标签: modbus

    上传时间: 2016-03-26

    上传用户:Tourist__

  • 12345

    /****************temic*********t5557***********************************/    #include   <at892051.h>     #include   <string.h>    #include   <intrins.h>     #include   <stdio.h>     #define    uchar    unsigned char     #define    uint     unsigned int     #define    ulong    unsigned long     //STC12C2051AD的SFR定义     sfr  WDT_CONTR = 0xe1;//stc2051的看门狗??????     /**********全局常量************/    //写卡的命令     #define    write_command0       0//写密码     #define    write_command1       1//写配置字     #define    write_command2       2//密码写数据     #define    write_command3       3//唤醒     #define    write_command4       4//停止命令     #define    TRUE       1     #define    FALSE      0     #define    OK         0     #define    ERROR      255     //读卡的时间参数us     #define ts_min          250//270*11.0592/12=249//取近似的整数     #define ts_max          304//330*11.0592/12=304     #define t1_min          73//90*11.0592/12=83:-10调整     #define t1_max          156//180*11.0592/12=166     #define t2_min          184//210*11.0592/12=194     #define t2_max          267//300*11.0592/12=276     //***********不采用中断处理:采用查询的方法读卡时关所有中断****************/     sbit p_U2270B_Standby = P3^5;//p_U2270B_Standby PIN=13     sbit p_U2270B_CFE = P3^3;//p_U2270B_CFE     PIN=6     sbit p_U2270B_OutPut = P3^7;//p_U2270B_OutPut  PIN=2     sbit wtd_sck = P1^7;//SPI总线     sbit wtd_si = P1^3;    sbit wtd_so = P1^2;    sbit iic_data = P1^2;//lcd IIC     sbit iic_clk = P1^7;    sbit led_light = P1^6;//测试绿灯     sbit led_light1 = P1^5;//测试红灯     sbit led_light_ok  = P1^1;//读卡成功标志     sbit fengmingqi = P1^5;    /***********全局变量************************************/       uchar data Nkey_a[4] = {0xA0, 0xA1, 0xA2, 0xA3};//初始密码             //uchar idata card_snr[4];   //配置字     uchar data bankdata[28] = {1,2,3,4,5,6,7,1,2,3,4,5,6,7,1,2,3,4,5,6,7,1,2,3,4,5,6,7};     //存储卡上用户数据(1-7)7*4=28     uchar data cominceptbuff[6] = {1,2,3,4,5,6};//串口接收数组ram     uchar command; //第一个命令     uchar command1;//     //uint  temp;     uchar j,i;    uchar myaddr = 8;    //uchar ywqz_count,time_count;             //ywqz jishu:     uchar bdata DATA;    sbit BIT0 = DATA^0;    sbit BIT1 = DATA^1;    sbit BIT2 = DATA^2;    sbit BIT3 = DATA^3;    sbit BIT4 = DATA^4;    sbit BIT5 = DATA^5;    sbit BIT6 = DATA^6;    sbit BIT7 = DATA^7;    uchar bdata DATA1;    sbit BIT10 = DATA1^0;    sbit BIT11 = DATA1^1;    sbit BIT12 = DATA1^2;    sbit BIT13 = DATA1^3;    sbit BIT14 = DATA1^4;    sbit BIT15 = DATA1^5;    sbit BIT16 = DATA1^6;    sbit BIT17 = DATA1^7;    bit i_CurrentLevel;//i_CurrentLevel  BIT 00H(Saves current level of OutPut pin of U2270B)     bit timer1_end;    bit read_ok = 0;    //缓存定时值,因用同一个定时器     union HLint { uint W;    struct   {    uchar H;uchar L;   }   B; };//union HLint idata a     union HLint data a;    //缓存定时值,因用同一个定时器     union HLint0 { uint W;    struct {   uchar H;   uchar L; } B; };//union HLint idata a     union HLint0 data b;    /**********************函数原型*****************/    //读写操作     void f_readcard(void);//全部读出1~7 AOR唤醒     void f_writecard(uchar x);//根据命令写不同的内容和操作     void f_clearpassword(void);//清除密码     void f_changepassword(void);//修改密码     //功能子函数     void write_password(uchar data *data p);//写初始密码或数据     void write_block(uchar x,uchar data *data p);//不能用通用指针     void write_bit(bit x);//写位     /*子函数区*****************************************************/    void delay_2(uint x)    //延时,时间x*10us@12mhz,最小20us@12mhz     {    x--; x--;    while(x)    {      _nop_();      _nop_();      x--;    }    _nop_();//WDT_CONTR=0X3C;不能频繁的复位     _nop_();    }    /////////////////////////////////////////////////////////////////////     void initial(void)    {    SCON = 0x50; //串口方式1,允许接收     //SCON  =0x50;     //01010000B:10位异步收发,波特率可变,SM2=0不用接收到有效停止位才RI=1,     //REN=1允许接收     TMOD = 0x21; //定时器1 定时方式2(8位),定时器0 定时方式1(16位)     TCON = 0x40; //设定时器1 允许开始计时(IT1=1)     TH1 = 0xfD;  //FB 18.432MHz 9600 波特率     TL1 = 0xfD;  //fd 11.0592 9600     IE = 0X90;     //EA=ES=1     TR1 = 1;     //启动定时器     WDT_CONTR = 0x3c;//使能看门狗     p_U2270B_Standby = 0;//单电源     PCON = 0x00;    IP = 0x10;//uart you xian XXXPS PT1 PX1 PT0 PX0     led_light1 = 1;    led_light = 0;    p_U2270B_OutPut = 1;    }    /************************************************/    void f_readcard()//读卡     {    EA = 0;//全关,防止影响跳变的定时器计时     WDT_CONTR = 0X3C;//喂狗     p_U2270B_CFE = 1;//      delay_2(232);  //>2.5ms            /*   //   aor    用唤醒功能来防碰撞   p_U2270B_CFE = 0; delay_2(18);//start gap>150us   write_bit(1);//10=操作码读0页   write_bit(0);       write_password(&bankdata[24]);//密码block7   p_U2270B_CFE =1 ;//    delay_2(516);//编程及确认时间5.6ms   */    WDT_CONTR = 0X3C;//喂狗     led_light = 0;    b.W = 0;    while(!(read_ok == 1))    {             //while(p_U2270B_OutPut);//等一个稳定的低电平?超时判断?              while(!p_U2270B_OutPut);//等待上升沿的到来同步信号检测1       TR0 = 1;      //deng xia jiang       while(p_U2270B_OutPut);//等待下降沿       TR0 = 0;   a.B.H = TH0;   a.B.L = TL0;   TH0 = TL0 = 0;   TR0 = 1;//定时器晚启动10个周期       //同步头       if((324 < a.W) && (a.W < 353)) ;//检测同步信号1                  else     {     TR0 = 0;     TH0 = TL0 = 0;     goto read_error;    }      //等待上升沿        while(!p_U2270B_OutPut);   TR0 = 0;   a.B.H = TH0;   a.B.L = TL0;   TH0 = TL0 = 0;   TR0 = 1;//b.N1<<=8;            if(a.B.L < 195);//0.5p       else     {     TR0 = 0;     TH0 = TL0 = 0;     goto read_error;    }      //读0~7块的数据       for(j = 0;j < 28;j++)      {       //uchar i;                  for(i = 0;i < 16;i++)//8个位        {        //等待下降沿的到来         while(p_U2270B_OutPut);                TR0 = 0;     a.B.H = TH0;     a.B.L = TL0;     TH0 = TL0 = 0;     TR0 = 1;              if(t2_max < a.W/*)&&(a.W < t2_max)*/)//1P          {         b.W >>= 2;//先左移再赋值          b.B.L += 0xc0;                             i++;        }        else if(t1_min < a.B.L/*)&&(a.B.L < t1_max)*/)//0.5p         {         b.W >>= 1;         b.B.L += 0x80;                           }        else      {      TR0 = 0;      TH0 = TL0 = 0;      goto read_error;     }        i++;        while(!p_U2270B_OutPut);//上升                   TR0 = 0;     a.B.H = TH0;     a.B.L = TL0;     TH0 = TL0 = 0;     TR0 = 1;                      if(t2_min < a.W/*)&&(a.W < t2_max)*/)//1P          {         b.W >>= 2;         i++;        }        else if(t1_min < a.B.L/*a.W)&&(a.B.L < t1_max)*/)//0.5P         //else if(!(a.W==0))         {         b.W >>= 1;         //temp+=0x00;          //led_light1=0;led_light=1;delay_2(40000);         }        else      {      TR0 = 0;      TH0 = TL0 = 0;      goto read_error;     }        i++;       }       //取出奇位        DATA = b.B.L;       BIT13 = BIT7;    BIT12 = BIT5;    BIT11 = BIT3;    BIT10 = BIT1;       DATA = b.B.H;       BIT17 = BIT7;    BIT16 = BIT5;    BIT15 = BIT3;    BIT14 = BIT1;       bankdata[j] = DATA1;      }              read_ok = 1;//读卡完成了     read_error:    _nop_();    }       }    /***************************************************/    void f_writecard(uchar x)//写卡     {    p_U2270B_CFE = 1;    delay_2(232);  //>2.5ms            //psw=0 standard write     if (x == write_command0)//写密码:初始化密码     {      uchar i;      uchar data *data p;      p = cominceptbuff;      p_U2270B_CFE = 0;   delay_2(31);//start gap>330us       write_bit(1);//写操作码1:10       write_bit(0);//写操作码0       write_bit(0);//写锁定位0       for(i = 0;i < 35;i++)      {       write_bit(1);//写数据位1       }      p_U2270B_CFE = 1;      led_light1 = 0;   led_light = 1;   delay_2(40000);//测试使用       //write_block(cominceptbuff[4],p);       p_U2270B_CFE = 1;      bankdata[20] = cominceptbuff[0];//密码存入       bankdata[21] = cominceptbuff[1];      bankdata[22] = cominceptbuff[2];      bankdata[23] = cominceptbuff[3];    }    else if (x == write_command1)//配置卡参数:初始化     {      uchar data *data p;      p = cominceptbuff;      write_bit(1);//写操作码1:10       write_bit(0);//写操作码0       write_bit(0);//写锁定位0               write_block(cominceptbuff[4],p);      p_U2270B_CFE=  1;    }    //psw=1  pssword mode     else if(x == write_command2)  //密码写数据    {      uchar data*data p;      p = &bankdata[24];      write_bit(1);//写操作码1:10       write_bit(0);//写操作码0       write_password(p);//发口令       write_bit(0);//写锁定位0       p = cominceptbuff;      write_block(cominceptbuff[4],p);//写数据            }    else if(x == write_command3)//aor    //唤醒 {      //cominceptbuff[1]操作码10 X xxxxxB       uchar data *data p;      p = cominceptbuff;      write_bit(1);//10       write_bit(0);             write_password(p);//密码       p_U2270B_CFE = 1;//此时数据不停的循环传出     }    else //停止操作码     {      write_bit(1);//11       write_bit(1);             p_U2270B_CFE = 1;         }    p_U2270B_CFE = 1;    delay_2(560);//5.6ms     }    /************************************/    void f_clearpassword()//清除密码     {    uchar data *data p;    uchar i,x;          p = &bankdata[24];//原密码     p_U2270B_CFE = 0; delay_2(18);//start gap>150us     //操作码10:10xxxxxxB     write_bit(1);    write_bit(0);              for(x = 0;x < 4;x++)//发原密码     {             DATA = *(p++);      for(i = 0;i < 8;i++)      {       write_bit(BIT0);       DATA >>= 1;      }    }    write_bit(0);//锁定位0:0     p = &cominceptbuff[0];    write_block(0x00,p);//写新配置参数:pwd=0             //密码无效:即清除密码     DATA = 0x00;//停止操作码00000000B     for(i = 0;i < 2;i++)    {    write_bit(BIT7);    DATA <<= 1;    }    p_U2270B_CFE = 1;       delay_2(560);//5.6ms     }    /*********************************/    void f_changepassword()//修改密码            {       uchar data *data p;    uchar i,x,addr;    addr = 0x07;//block7     p = &Nkey_a[0];//原密码     DATA = 0x80;//操作码10:10xxxxxxB     for(i = 0;i < 2;i++)    {      write_bit(BIT7);      DATA <<= 1;    }    for(x = 0;x < 4;x++)//发原密码     {             DATA = *(p++);      for(i = 0;i < 8;i++)      {       write_bit(BIT7);       DATA >>= 1;      }    }    write_bit(0);//锁定位0:0     p = &cominceptbuff[0];    write_block(0x07,p);//写新密码     p_U2270B_CFE = 1;    bankdata[24] = cominceptbuff[0];//密码存入     bankdata[25] = cominceptbuff[1];    bankdata[26] = cominceptbuff[2];    bankdata[27] = cominceptbuff[3];    DATA = 0x00;//停止操作码00000000B     for(i = 0;i < 2;i++)    {      write_bit(BIT7);      DATA <<= 1;    }    p_U2270B_CFE = 1;       delay_2(560);//5.6ms     }    /***************************子函数***********************************/    void write_bit(bit x)//写一位     {    if(x)    {      p_U2270B_CFE = 1;   delay_2(32);//448*11.0592/120=42延时448us       p_U2270B_CFE = 0;   delay_2(28);//280*11.0592/120=26写1     }    else    {      p_U2270B_CFE = 1;   delay_2(92);//192*11.0592/120=18       p_U2270B_CFE = 0;   delay_2(28);//280*11.0592/120=26写0     }    }    /*******************写一个block*******************/    void write_block(uchar addr,uchar data *data p)    {    uchar i,j;        for(i = 0;i < 4;i++)//block0数据     {             DATA = *(p++);      for(j = 0;j < 8;j++)      {       write_bit(BIT0);       DATA >>= 1;      }    }    DATA = addr <<= 5;//0地址     for(i = 0;i < 3;i++)    {      write_bit(BIT7);      DATA <<= 1;    }                   }    /*************************************************/    void write_password(uchar data *data p)    {    uchar i,j;        for(i = 0;i < 4;i++)//     {             DATA = *(p++);      for(j = 0;j < 8;j++)      {       write_bit(BIT0);       DATA >>= 1;      }    }        }   /*************************************************/   void main()    {    initial();    TI = RI = 0;    ES = 1;    EA = 1;  delay_2(28);   //f_readcard();     while(1) {   f_readcard();      //读卡   f_writecard(command1);  //写卡    f_clearpassword();   //清除密码     f_changepassword();    //修改密码 } }

    标签: 12345

    上传时间: 2017-10-20

    上传用户:my_lcs

  • 用IO模拟SPI总线

    1.1系统设计说明本设计使用普通10口模拟标准SPI总线,实现SPMC65P2404A的多机通信。SPI(Serial Peripheral Interface)总线系统是一种同步串行外设接口,它使用4条线:串行时钟线(SCK)、数据输出线、输入线和片选线(SS),支持同步全双工通信方式。在本设计中,用1号从机采集按键,2号从机通过一个拨码开关控制一个计数器进行计数,从机获得的键值和计数值将送主机,主机用4个数码管显示。主机显示的形式为:从机号+键值(或计数值).1.2系统框图1.3通信时序SPI采用同步全双工通信方式,时钟信号SCK由主机产生。主从机的通信时序图分别如图1-2和图1-3所示:当待发送数据写入发送缓冲器后,便启动数据发送,数据接收和发送以字节为单位。时序图中,Sample Strobe为输入数据采样点,例如从机在SCK的上升沿对输入数据进行采样接收,主机在SCK的下降沿对输入数据进行采样接收。SPIF是发送或接收完一字节数据后产生的标志,主机或从机传输完一字节的数据后该标志被置为1,可以用于主程序查询或产生SPI中断,在中断服务程序中或查询程序之后需将该标志写0,以清除该标志位。ss为从机的片选线,当SS-0时,该从机有效,接收主机发送的命令;当SS-1时,该从机的输出端(SDO)处于悬浮状态。

    标签: io模拟 spi总线

    上传时间: 2022-06-19

    上传用户:wangshoupeng199

  • 汽车can总线系统原理 ,设计与应用

    关于can总线的学习书籍。适合入门的初学者。高手请绕道。

    标签: 汽车can总线

    上传时间: 2022-06-27

    上传用户:

  • 智能水位计的研究开发.rar

    水位计广泛应用于水利、石油、化工、冶金、电力等领域的自动检测和控制系统中.本文设计的智能水位计是吸收了国内外最新智能化仪表的设计经验,采用工业控制单片机,集水位采集、存储、显示及远程联网于一体,适用于各种液位及闸门开度的测量.它具有高精度、高可靠性、多功能和智能化等特点.针对研制任务的要求,课题期间研制了下位机系统硬件和软件,开发了上位机监控软件,其中所作的具体工作包括:测量原理的研究和在系统中的实现,在本次设计中用三种方法来进行水位测量,分别是旋转编码器法、液位压力传感器法和可变电阻器法;主控芯片的选择,我们选用了高集成度的混合信号系统级芯片C8051F021;实现了信号的采集和处理,包括信号的转换和在单片机内的运算;高集成度16位模数转换芯片AD7705在系统中的应用,我们完成了它与单片机的接口设计及程序编制任务;精确时钟芯片DS1302在系统中的应用,在此,我们实现了用单片机的I/O口与DS1302的连接和在软件中对时序的模拟,该芯片的应用给整台仪器提供了时间基准,方便了仪器的使用;另外,针对研制任务的要求,还给系统加上了一路4~20mA模拟信号电流环的输出电路来提供系统监测,该部分的实现是通过采用AD421芯片来完成的,本设计中完成了AD421与单片机的SPI接口任务,协调了它与AD7705芯片和单片机共同构成的SPI总线系统的关系,并完成了程序设计;与上位机的通信接口设计,该部分通过两种方法实现:RS232通信方式和RS485通信方式;系统设计方面还包括报警电路设计、操作键盘设计、电源监控电路设计、电压基准电路的设计.在硬件设计的基础上,对系统进行了软件设计,软件部分包括下位机单片机程序的设计和上位机监控软件的设计.在软硬件充分结合的情况下,实现了系统设计要求,很好地解决了以往的水位计中存在的问题,达到了高精度水位测量仪器的各项标准.

    标签: 水位计

    上传时间: 2013-06-20

    上传用户:libenshu01

  • PIC单片机在低压永磁真空断路器监控中的应用.rar

    低压断路器是电力系统中低压配电网中的主要电器开关之一,它不仅可以接通和分断正常负载电流和过载电流,而且可以接通和分断短路电流。主要在频繁操作的低压配电线路或开关柜中作为电源开关使用,并对线路、电器设备等实行保护,当它们发生严重过流、过载、短路、断相、漏电等故障时,能自动切断线路,起保护作用,应用十分广泛。智能控制器是断路器上的保护装置,也是断路器的核心控制装置。 20世纪90年代,随着电力电子技术、微电子技术、计算机技术和通信技术的飞速发展,断路器的保护装置己由传统的电磁式过流脱扣器发展成采用集成电路的电子式脱扣器,直至目前出现了带高性能微处理器的智能控制器。新一代的智能控制器采用了模块化结构设计,集测量、监视、控制、通信、保护等功能于一体,在低压系统中得到了广泛的应用。 在本课题中,该智能控制器在硬件上以美国Microchip公司推出的公司生产的PIC148F448为核心处理器,主要进行数据的实时采集处理和断路器的故障保护,实时显示线路运行时电流或故障信息等。利用带有CAN接口的高性能的PIC18F448单片机设计了CAN总线接口,给出了CAN接口的硬件电路、软件流程。该电路具有硬件设计简单、可靠性高、实时性强等特点。实现了智能控制器与PC机的双向通信功能,通过总线系统达到遥调、遥控的目的,使得智能控制器的性能得到增强,符合配电系统的要求,达到了本课题研究要求。

    标签: PIC 单片机 低压

    上传时间: 2013-04-24

    上传用户:kjgkadjg

  • 基于ARM的PROFIBUSDP主站设计与研究

    本文针对目前国内基于PROFIBUS-DP的产品价格昂贵,安装和维护成本高等缺点,以山西某大型煤矿的空压机监控系统自动化改造工程为例,在重点研究了PROFIBUS-DP协议的基础上自行提出了一套PROFIBUS-DP现场总线控制系统,并详细设计了该系统中的PROFIBUS-DP主站部分。 本文首先提出了一套基于PROFIBUS-DP技术的现场总线控制系统并在其基础上完成了PROFIBUS-DP主站的总体设计。其次本文选用ARM+PROFIBUS主站协议芯片的开发方式,重点论述了主站的硬件设计。再次本文根据PROFIBUS-DP协议的结构设计PROFIBUS-DP主站软件模块,确定各模块间关系并详细设计了主站与主站用户之间的共享数据结构。接着本文讨论了PROFIBUS-DP主站软件在μC/OS-Ⅱ操作系统上可靠运行需注意的几个技术细节。最后本文给出了基于ARM的PROFIBUS-DP主站的调试方案。 研究结果表明基于ARM的PROFIBUS-DP主站能够在不降低系统稳定性的基础上有效降低成本。使基于PROFIBUS-DP的现场总线系统得到大面积推广成为可能。

    标签: PROFIBUSDP ARM 主站

    上传时间: 2013-06-27

    上传用户:hank

  • 基于ARM嵌入式平台的X86译码SoC架构设计.pdf

    SoC(System On a Chip)又称为片上系统,是指将微处理器、模拟IP核、数字IP核和存储器(或片外存储器接口)集成在单一芯片上。SoC产品不断朝着体积小、功能强的方向发展,芯片内部整合越来越多的功能。ARM架构作为嵌入式系统流行的应用,其应用的扩展面临软件扩充的问题,而X86平台上却有很多软件资源。若将已有的X86软件移植到ARM平台,则可以在一定程度上解决软件扩充的问题。 本论文针对X86指令在ARM中兼容的应用,以智能手机的应用为例,提出了基于ARM嵌入式平台,使用X86指令到ARM指令的二进制翻译模块,达到对X86指令的兼容。主要研究ARM公司的片上总线系统——AMBA AHB和AMBA APB片上总线标准。对Multi-layer总线结构进行研究,分析了Multi-layer AHB系统中使用的Bus Matrix模块的结构,从Bus Matrix模块的内部矩阵结构和系统架构两方面针对系统的特点作出优化。 最后介绍了论文采用的事物级模型与Verilog HDL协同仿真的方法和系统的控制过程,通过仿真结果的比较,验证了利用二进制翻译模块实现X86指令执行的可行性和优化后的架构较适合于X86翻译系统的应用。

    标签: ARM X86 SoC

    上传时间: 2013-06-28

    上传用户:钓鳌牧马