前段时间来了个项目,要求实现PROFIBUS协议在一个带串口的单片机上,要做一块带485的电路板,挂接12个从站,唉呀,这下头可大了,苦苦冥思了好几个月想出了一个方法,485总线走187.5K速度(硬件配置:AVR单片机MEGA16+MAX485加三个光藕,据说串口速度可以跑到1.5M的呀,不过不能跑那么高),差不多够快了哈,然后跟据PROFIBUS标准的协议放从站连发了三颗炮弹,还真管用,努力没有白费呀,数据总算是读出来了呀,钱也赚到手了,还不少,一般的场合还是可以应用的呀,西门子说的果然没错,在任意带串口的单片机上都可以实现.WWW.PLCJS.COM——可编程控制器技术门户
第一步发送:从站状态查询桢,也就是看看从站是死是活,(如果从站波特率是自适的话,那这一步得来两次,不然他不认识你的),正常情况下,发完第二次时从站已有回应了,回应的桢和发送的差不多的只是先后地址反了,OK,下一步...plcjs.技.术_网
第二步发送:读取查询从站的诊断报文,一般发出去后得到的数比发出去的数要多不少的,收到后下一步WWW_PLCJS※COM-PLC-技.术_网(可※编程控※制器技术门户)
第三步发送:从站参数化报文帧,如果没有问题的话会返回一个E5,记得一定要把西门子的狗给打死啊.WW.W_PLC※JS_C,OM-PL,C-技.术_网
接下来的事情也就是进行数据交换了,读完高后再读低呀.plcjs.技.术_网
第二与第三步不分次序WWW_PLCJS※COM-PLC-技.术_网(可※编程控※制器技术门户)
WWW.PLCJS.COM——可编程控制器技术门户
以下是真正的主站与从站交换数据的过程WWW_PL※CJS_COM-PLC-技.术_网
P_L_C_技_术_网——可——编——程——控-制-器-技——术——门——户
该状态机中有四个状态:P_L_C_技_术_网——可——编——程——控-制-器-技——术——门——户
1、Power_On(上电)状态WWW_P※LCJS_CO※M-PLC-技-.术_网
在上电后从站进入Power_On状态,在这个状态下从站首先需要进行初始化,设置各项参数如站地址和报文缓冲区等等。WWW_PLCJS@_COM%-PLC-技.术_网
2、Wait-Prm(等待参数化)状态P_L_C_技_术_网——可——编——程——控-制-器-技——术——门——户
初始化完毕后,从站进入Wait-Prm状态,等待来自一个主站的Set_Prm报文。通俗地讲,参数化相当于一个主站告诉一个从站,你是属于我的,同时也指定了从站的一些运行参数。主站只对被它参数化的从站进行数据轮询。W1WW_P4LCJS_COM-PLC-技.术_网
3、Wait_Cfg(等待组态)状态WWW_PLCJS_COM-PLC-技.术_网
在进行正确的参数化后,从站进入Wait_Cfg状态,等待Check_Cfg报文。Check_Cfg报文规定输入和输出字节数,也就是主站和从站每次交换的数据量。P.L.C.技.术.网——可编程控制器技术门户
4、Data_Exchange(数据交换)状态WWW_PLC※JS_COM-PLC-技.术_网(可编程控※制器技术门户)
当进行正确的参数化和组态后,从站进入Data_Exchange状态,这个时候从站才可以和主站进行正常的数据交换。P.L.C.技.术.网——可编程控制器技术门户
下面是我从一个PROFIBUS-DP网络中采集下来的部分报文数据,该网络中有一站地址为1的主站和站地址为3的从站。我结合有关报文解释一下从站3的工作机制。(报文数据为16进制)WWW_PLCJ-S_COM-PLC-技.术_网(可-编程控-制器技术-门户)
......WWW_P※LCJS_CO※M-PLC-技-.术_网
(从站已经完成初始化)WW.W_PLC※JS_C,OM-PL,C-技.术_网
P_L_C_技_术_网——可——编——程——控-制-器-技——术——门——户
......P.L.C.技.术.网——可编程控制器技术门户
WWW_PLCJS※COM-PLC-技.术_网(可※编程控※制器技术门户)
10 03 01 49 4D 16WW.W_PLCJS_COM-PLC-技.术_网
(该报文为主站1发给从站3的请求帧,查询从站3的FDL状态,即从站3是否“活着”。)WWW.PLCJS.COM——可编程控制器技术门户
10 01 03 00 04 16WWW_PLC※JS_COM-PLC-技.术_网(可编程控※制器技术门户)
(该报文为从站3对主站1的应答帧,告诉主站1“我活着呢”。)P_L_C_技_术_网——可——编——程——控-制-器-技——术——门——户
WWW_PLCJS@_COM%-PLC-技.术_网
.....WWW_PLC※JS_COM-PLC-技.术_网(可编程控※制器技术门户)
WWW_PLCJS@_COM%-PLC-技.术_网
68 05 05 68 83 81 6D 3C 3E EB 16WWW_P※LCJS_CO※M-PLC-技-.术_网
(该报文为主站1发给从站3的请求帧,读取查询从站3的诊断报文,以获取从站3的进一步信息。)WWW※PLCJS_COM-PL#C-技.术_网(可编※程控※制器技术门户)
68 0B 0B 68 81 83 08 3E 3C 02 05 00 FF 00 08 94 16——可——编——程——控-制-器-技——术——门——户
(该报文为从站3对主站1的应答帧,其中包含6个字节的诊断数据:02 05 00 FF 00 08,具体含义可参阅协议,其中第四字节为FF表明从站3尚未被任何主站所参数化。)WWW_PLCJS@_COM%-PLC-技.术_网
WWW_P※LCJS_COM-PLC-)技.术_网
......WWW_PLCJS_COM-PLC-技.术_网
WWW_PLCJS※COM-PLC-技×术_网(可编程控※制器技术门户)
68 11 11 68 83 81 5D 3D 3E 88 02 FD 0B 00 08 00 00 00 00 00 00 76 16WWW※PLCJS_COM-PL#C-技.术_网(可编※程控※制器技术门户)
(该报文为主站1发给从站3的参数化报文帧,包含12个字节的参数化数据: 88 02 FD 0B 00 08 00 00 00 00 00 00)WWW_PL※CJS_COM-PLC-技.术_网
E5WWW_PLCJ-S_COM-PLC-技.术_网(可-编程控-制器技术-门户)
(该报文为从站3对主站1的短应答帧,告诉主站1参数化成功。)P_L_C_技_术_网——可——编——程——控-制-器-技——术——门——户
WWcW_PLCJS_COM-PLC-技.术_网
......WWW※PLCJS_COM-PL#C-技.术_网(可编※程控※制器技术门户)
WWW_PLCJ-S_COM-PLC-技.术_网(可-编程控-制器技术-门户)
68 07 07 68 83 81 7D 3E 3E 11 21 2F 16W1WW_P4LCJS_COM-PLC-技.术_网
(该报文为主站1发给从站3的组态报文帧,包含2个字节的组态数据: 11 21,表明从站3应有两个字节输入和两个字节输出。)——可——编——程——控-制-器-技——术——门——户
E5WW.W_PLC※JS_C,OM-PL,C-技.术_网
(该报文为从站3对主站1的短应答帧,告诉主站1组态成功。)WW.W_PLC※JS_C,OM-PL,C-技.术_网
WW.W_PLC※JS_C,OM-PL,C-技.术_网
......WWW_PL※CJS_COM-PLC-技.术_网
plcjs.技.术_网
68 05 05 68 83 81 5D 3C 3E DB 16WWW_PLCJS※COM-PLC-技×术_网(可编程控※制器技术门户)
(该报文为主站1发给从站3的请求帧,读取查询从站3的诊断报文。)plcjs.技.术_网
68 0B 0B 68 81 83 08 3E 3C 00 0C 00 01 00 08 9B 16WWW_PLCJ-S_COM-PLC-技.术_网(可-编程控-制器技术-门户)
(该报文为从站3对主站1的应答帧,其中包含6个字节的诊断数据:00 0C 00 01 00 08,其中第四字节为01表明从站3已经被主站1成功地参数化,从站3进入数据交换状态。)WWW_PLCJS※COM-PLC-技×术_网(可编程控※制器技术门户)
WWW_PLCJS※COM-PLC-技.术_网(可※编程控※制器技术门户)
......WWW.PLCJS.COM——可编程控制器技术门户
WW.W_PLC※JS_C,OM-PL,C-技.术_网
68 05 05 68 03 01 7D 00 00 81 16WWW_PLC※JS_COM-PmLC-技.术_网
(该报文为主站1发给从站3的请求帧,包含两个字节的输出数据:00 00, 并请求从站3的输入数据。此后主站1周期性地发送此报文)WWW.PLCJS.COM——可编程控制器技术门户
68 05 05 68 01 03 08 00 00 8C 16WWW_PLC※JS_COM-PLC-技.术_网(可编程控※制器技术门户)
(该报文为从站3对主站3的应答帧,包含两个字节的输入数据:00 80)