打印

请教485通信思路

[复制链接]
4469|22
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
hopewise|  楼主 | 2012-9-18 09:40 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
1.各位高手,附件是我在搞的产品接线图,它主要有如下功能:调光,彩色变化,渐变,声控,主从功能,DMX控制。除了主从功能没调出来,其它的已调通了。
2.假如采用DMX512控制台的话,则各电脑灯是处于从功能状态,此时DMX512控制台是主机,即所谓的"DMX控制"
3.现假如手上没有DMX512控制台的话,则要从这n台电脑灯选出1个作为主机(没有具体规定方法),其他的则为从机(方法是通过按键设置来规定这个电脑灯是处于从功能).
4.因为没有硬性指定谁是主机(当然此时这台电脑灯不能设为从机),这就产生判断谁是主机问题.
   请教各位高手怎么知道谁是主机?
   备注:所有的处于从机功能状态下的电脑灯的动作都是一样的,由主机控制.

电脑灯接线图.pdf

15.55 KB

相关帖子

沙发
zhm8508| | 2012-9-18 09:50 | 只看该作者
LZ的意思谁看懂了?

使用特权

评论回复
板凳
hopewise|  楼主 | 2012-9-18 10:26 | 只看该作者
抱歉,我再说详细些.
1.假如不采用DMX512控制台(它是一种灯光舞台设备)和主从功能的话,则所有的电脑灯(实际上它是一块电路板,里面有MCU等)各自功能独立,如调光,彩色变化,减变,声控中的某一种。
2.假如采用DMX512控制台的话,则它是主机,所有的电脑灯都处于从机状态,统一受DMX512控制台来控制,即所谓的DMX功能.
3.假如现手上没有DMX512控制台的话,并想达到DMX512控制台类似效果,那么就要从这n台电脑灯中选出一台作为主机,其他的电脑灯处于从功能(通过暗建来设置本电脑灯是处于从功能).
4.我的问题是:怎么知道哪台电脑灯是主机?

使用特权

评论回复
地板
McuPlayer| | 2012-9-18 13:07 | 只看该作者
掌握通讯控制权的是主机

485是主从式通讯,没的主机授权,任何从机不得使用通讯线路。

使用特权

评论回复
5
zhm8508| | 2012-9-18 13:35 | 只看该作者
既然可以设置为独立或从机,不妨再加个主机选项。

使用特权

评论回复
6
zcw9911| | 2012-9-18 13:54 | 只看该作者
看了半天也不是很明白LZ的意思,不过485设备每个都有自己的地址,可以规定某个地址为主机,其它为从机,到时候只要设置地址就可以了

使用特权

评论回复
7
hopewise|  楼主 | 2012-9-18 14:27 | 只看该作者
多谢Zhm8508和Mcuplayer的回复,因为我之前没接触过通信編程,参考网上资料。
假如没有使用DMX512控制台,那么某台电脑灯就有可能处于如下3种状态之一:
a: 从机状态
b: 主机状态
c: 独立运行状态
对于第1种状态,这很好判断----因为要想成为从机,必须通过按键来设定.
对于后面2种状态,不好区分,因为规格书没说明要成为主机或独立运行,必须满足某些条件.我的想法是:主机必须向从机发送命令或数据,是不是从机应向它发送了某些内容,它才成为主机?要不,它是处于独立运行状态,如调光,彩色变化,渐变和声控中的某一功能,当然主机也具有独立运行状态之中一种,还要发送数据给所有从机。
    Mcuplayer说从机不能向主机发送数据。
    备注:当使用DMX512控制台时,所有的电脑灯自动成为从机(不需要按键设置),但要想成为主从功能种的从机(这时没有使用DMX512控制台),必须要通过按键设置后,本机才能成为从机,但这时没有规定谁是主机,这就产生判断谁是主机了问题。

    1.本标准的电气特性除有特殊声明以外,全部采纳EIA-485-A标准

使用特权

评论回复
8
zhm8508| | 2012-9-18 15:17 | 只看该作者
三种情况:
  1、控制台 + 电脑灯
  控制台做主机,向电脑灯发送命令或数据,必须注意的是,电脑灯的地址有可能是全部相同或者不同的;
2、电脑灯独立运行
比如电脑灯多久没收到主机的控制命令,就自动转为独立;
3、电脑灯主从机
随意将一台电脑灯设置为主机,主动发送控制命令,其余电脑灯主动转为从机。

使用特权

评论回复
9
joyme| | 2012-9-18 17:09 | 只看该作者
硬件是否已经固定?从机地址是通过拨码开关做的,还是写到EEPROM里?
简单的思路:
每个电脑灯板上加个模式选择跳线,软件里既有从机功能又有主机功能,靠模式控制其运行从机功能还是主机功能,如果有控制台的情况,所有电脑灯都设置为从机模式

使用特权

评论回复
10
McuPlayer| | 2012-9-18 17:21 | 只看该作者
主机和从机,是逻辑上的
谁先声明自己是主机,谁就是主机了,第二个人是不能强制抢主机待遇的,会总线冲突的

使用特权

评论回复
11
hopewise|  楼主 | 2012-9-18 19:05 | 只看该作者
多谢各位的回答,我的想法是当没有采用DMX512控制台时,如果某台电脑灯设为从机(通过按键判断),就发8字节内容,其中第8字节内容为判断用内容(供主机之用,其他从机也发同样8字节内容),其他电脑灯要是已设为从机的话,则不作处理.要是某台电脑灯不是被设为从机,收到8字节内容后,就自动发送自己当前进行的操作(如调光,彩变,渐变,声控中的一种),来控制所有从机的操作功能一样,即此时此台电脑灯是主机,否则则独立运行。这样做可否?

使用特权

评论回复
12
qq65411253| | 2012-9-18 19:51 | 只看该作者
如果要从机自己竞争主机,软件上面比较麻烦。但是换个方式解决起来就比较简单。
固定使用一个主机,主机装在一个单独的盒子里并跟其他电脑灯连接。然后主机再作为PC端的从机。即分了三层,电脑灯->主机->PC。这样就不存在选择主机的问题了。
常见的ID卡离线交易系统都是这种做法。

使用特权

评论回复
13
hopewise|  楼主 | 2012-9-18 20:10 | 只看该作者
qq65411253说的很对,特别是第1次搞通信编程的。但qq65411253的建议方法不现实,因为产品有不同客户的。

使用特权

评论回复
14
uyuway| | 2012-9-18 21:56 | 只看该作者
学习了 自己也不懂

使用特权

评论回复
15
uyuway| | 2012-9-18 21:56 | 只看该作者
怎么下载不了 A

使用特权

评论回复
16
yseehe| | 2012-9-19 07:44 | 只看该作者
下载看看,不错

使用特权

评论回复
17
渤海三叠浪| | 2012-9-19 18:51 | 只看该作者
1# hopewise
就一个主  。你让那个是主 那个就是主。分别不出来 可以给主贴个标签。硬件一样又不让贴标签的话,可以让主的CPU灯闪的快点

使用特权

评论回复
18
hopewise|  楼主 | 2012-9-20 11:27 | 只看该作者
1思路是想出来了,不知能否有效。
2今天每个主周期里就发送数据一次给从机(当然本电脑灯没有被设为从机或DMX模式,只发送),从机就只管接收(通过UART中断)。
3 但程序就不工作,确认为是发送出了问题。
4 我的程序结构是时间轮那种,见下面,主周期是4ms,即主机每隔4ms发送数据给从机。假如所有的电脑灯没有处于从机模式和dmx模式,则所有的电脑灯独立运行,即使它们互相每隔4ms发数据,但因为我在程序里把SN75176只设为发送,故不会乱影响对方。
5。请问,你们是不是时刻发送数据给从机?比如,现本电脑灯处于主机状态(我个人认为处于独立运行状态的,就认是主机)中的调光功能,就在主程序相关子函数里发送数据给从机(即每次执行完所有程序,都要发送数据给从机),可它就死机了,请问这样做行吗?
void  main()
{
   .
   .
   .
      while(1)
     {
             while(t_us >= 32)                  //4ms(主周期时间,故定不变的,为4ms)
            {
                     t_us = 0;
                     key_scan();                    //按键扫描
                     display();                       //显示部分
                     key_deal();                    //按键处理
                     fade_man();                   //渐变管理
                     dis_man();                     //显示管理
                     buz_man();                    //蜂鸣器管理
                     led_drive_man();             //LED灯驱动管理
                     rtc_man();                     //实时时钟管理
                     DMX512_man();             //DMX512信号管理
                     change_man();               //彩色变化管理
                     strobe_man();                //频闪管理
                     brightness_man();         //半亮/全亮管理
                     dmx_strobe_man();       //dmx模式的频闪管理
            }           
}
}

使用特权

评论回复
19
hopewise|  楼主 | 2012-9-20 11:38 | 只看该作者
补上:
//**************led灯驱动管理*****************
//*****************************************
void led_drive_man()
{
       if(f_dimming==1)                                //调光(按键模式)
       {
            tab01_master_to_slave[7]=1;         //发送第8字节内容
            SendBytes();                                 //串口通信口方式3发送数据
            PWM0_set(r_bright);                      //PWM调红光
            PWM1_set(g_bright);     
            PWM2_set(b_bright);     
      }
      .
      .
      .
}
//******发送DMX数据(主机发送,从机接收)*********
//*********************************************
void SendBytes(void)
{
  
    SCON=0xC0;  //串口UART工作于方式3(即9位UART),TB8=0,并禁止串行接收.
      PCON=0;
       SBUF=0xff;
       while(!TI){;}                //发送OXFF,要是TI=0,则等待
       TI=0;
       SBUF=tab01_master_to_slave[7];
       while(!TI){;}
       TI=0;
       SCON=0xD0;           //发送内容后,允许uart串行接收产生中断
}

使用特权

评论回复
20
wyw880829| | 2013-3-4 23:41 | 只看该作者
每一个485芯片都可以设置自己的地址的

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

46

主题

468

帖子

3

粉丝