TIA博途S7-1200中实现高低字节或高低字调换的4种方法介绍.docx
TlA博途S7-1200中实现高低字节或高低字调换的几种方法介绍例如S7-1200与某些上位机进行通信时,读写的浮点数的存储方式与上位机不同,即高低字或字节是相反的,此时读取的数据是不对的,需要将高低字进行调换之后,才可以正常显示。下面就总结几种高低字或字节调换的方法,供大家参考。在TIA博途中,一个浮点型数据REAL占用4个字节,BPDWORDo一、通过间接寻址,片段访问的方式以DWORD的高低字调换为例进行说明(WORD的高低字节同理):如下图所示,新建一个FC块,块的接口变量如下图所示,SCL程序如下图所示,将输入变量的高字赋值给输出变量的低字,输入变量的低字赋值给输出变量的高字-:*2G”“9a-T苹%、卜Sd咛”“*Sm新0&Btn磔BUlu-anc_<cruuoooo1.施雌H«««£*心OUtM%GEkd斯博席加用加惭较1。zpulf>AteOW>dHvn:3HMw*I>C1r1一一-'._IllAlIIAffHUflKiI*限字曲Data和OUtPIl.tJJ4尸rG>g八1,/:,f,CffeTn<K4.W,"Uq'Aftto,M.V:IFB2O0IeM9g.OUT.2FU01"MgCEpNpbWOJ AmlocccxvtIVOUTFOll MJoUaJ魄02 SM2FB2S4ZoflLLY2.DD网A3g公Ma在数据块中添加两个变量input1IREGQNJ(字调换2MoutputData%W1:«WWiputData%W0;3WoutputDiita.%W0:WmputDt.,K>W1;45END.REGION6tData,数据类型为Real浮点型,如下图所示,回口名和效羯臭盟起始侑保持1<DPSUtc«3motor1B<Jmotor?Boolfae<DmotsBOOlfa<uOimrxvmaoedBOOl6(9"valueIMr<0v«1m040v«r2m0<Dvar3<DfMUtmtQ<.Irtf2OMlPULDJgRejl<3QUtputDdURgl0.014铳塔、耳在OBl中调用该FC块,如下图所示,并给块的管脚连接数据块中的变量,靖目3溥加新横电&4和网咯nr.cronecococIYlmH1*ttH*»,MWMwercU三.配方Ffi! K内一N_Y;>M90l MI肛o<W3<nI,AnII«9(«WMjMfM0,AnjtoQCorwM-OJTF501| We.tMwt7W0J.5IH.TO5(FKH|*»»1»»11vuto9.*.V<0D*l如下图所示,inputData赋值为16#IllI2222时,输出值为16#2222Im,实现了高低字的诵奂(这里仅以十六进制作为监视查看,实际使用中直接就可以查看浮点型的数据,选中变量后,右键一变量格式一选择自己需要的数据类型即可)催序号1;注许16#IllL22,r.inputData%FC3岛他字M换ENENO16B2222JIIl数据块_正inputDataOutputData-OutputData程序段2:二、通过SWAP指令如下图所示,新建一个FC块,块的接口变量如下图所示,SCL程序如下图所示,将输入变量的高字赋值给输出变量的低字,输入变量的低字赋值给输出变量的高字回价ISl*,靖加淳设备kiflfinnnIKCJ(CRJUHCDooc/(XJW三>fl.WaJAfOtH,布博伊 6加新BMQMeAKTWHruMeeiAlNjA04Mrs;Ki|配方处W,Ul 3他NeV2“200】MgJXJ.V2m”-M*½f* ek)gCwe<lL0UrM。” Mk.CmFM02 $2-FF62必 »F»WFB1 AAaxW-VJeOBjDW Ml皿OUTMJ)go七三忸S2.L1”-9J77拈,、rG.''一.KiL字Ueii»2名雄曲叱欠/Ba.Ij皿rmMDs,9Trmp嘀口iY*,tJ?JJia'XJtU.三Mm,qTeiregionj低字谪族22MoutputData.三SWAP(nputData)J34END_REGION5如下图所示,inputData赋值为16#mi2222时,输出值为16#22221IlL实现了高低二 HE O « - st >> ¾5t ir=5l" M! / 5,: "不 AV*R 116*1111 2222 ,lftiiH.r. j npuQta在OBl中调用该FC块,如下图所示,并给块的管脚连接数据块中的变量,*4.rfitllfi田倭和冈崎RCeIICWWIKDO<×>Crwtffi博加品WIWI鹿fl*,S1急僵了»?,Jl *Mirn<ttPC1nttirca aJLrvoo*<*-vr.v:fwomAM09CgnKIMSOOlwo)<g八OUTFS01)he.MutFM02 内5>$>B2M) 靠N*新FBUArFlNVgM300»OVLVLDD21XMK"f2a7字的调换摄目3w.a设色1。再珞,Ji叱CMJWK0000(X1ITf«8«;SHfIItIi幅停中 ,初M承 3Ml 梅依人(R0tl*) Kntt4IFQI M>>蚓 AiMie«.(X11.V2)FVOI*,wh Mk>9c0fwLcuKnlMMaxmetox SlMLNKF<l祟中则MIrI)ZoftJM>JOQRMiOQL(11>2.0Wl0-J一一一Je»4Aw*t三、通过AT访问变量覆盖的方式如下图所示,新建一个FC块,块的接口变量如下图所示,SCL程序如下图所示,通过AT变量覆盖的方式,将DWORD变量的高低字分别存放在数组中,利用数组实现高低字的调换,最后再给输出变量赋值,*4hOdtputD怪 WtEp2;ENo.REGION。目3½fnn皿(Mrgabu*IBklQ穆扉,1加HRMnMM AMXtIBKBIXU3H" AM4m>r&KN兴电费S QHioriN SM,IXr?# *(c4e0 m'a*W" 一irM(K) ch.VipgHARBbUoUtMJ3。" K*9<1b,W Utmoi.3<WJFWM g&MJHI Clt*ElC0>VLSI8M .”.mw*MLX3n CERaIDI<.OuMUMDtt92FMIM)1REoQN合期字府3*tf11p1AnpvIDaUi:三Tmp2|0:<Tnp1(1);WTemp_2|1);<Tmp1(0)j在OBl中调用该FC块,如下图所示,并给块的管脚连接数据块中的变量,女口3PLJJCPUDQDqDcl占后堪Main。口”'7号巾帧议AfiftIOHMVAHkTA包J-3.11U.ncnmuDOOOOdhus、Uiiiour-eff*加断堵Mkx01*Mtrc)MTn<*iHkrctl*MlWibfHCM方K1-3叽MVJFUOOl Ak-0l.V2l»B?OM 3Ce<vEZ(r500 M*BCvrVoUrFM01a-rM.o<AcFM025K,*75(Fj* HtttPJtfrB1Arto-h-V2.oeOWJ,WteBmb牌Rr.«小丁JMi!inputDat败播块Jlinput>4tCEJMU:%FC5eAftiNAIaENOOutputDaU)故擢块1.OUtputDetaAre®OUr-VZ-PBjDe2如下图所示rfr(3Wata赋值为1S#11112222时,输出值为16#22221111,实现了高低字的调换健自3ar4A3»¢&*",和冈络JeujKtvuncoouocqTrtWi*HWtoMQeXATiaitIKiie*AYarc4XftTUIIt)r11l-IKii2QLrW”203uq»EOIlM6rdsooAn*PCwrt,OUTZXJMKltFoHWA.TOIFWHjnnm11t MatogL-qmi Afasoa-OUeViJMDlDl AMkgCcrwrv>LM71 fUto9C0>rV0UT.D611>MIYGill1MIMll11.2222,iSMUk.r.inputDatainputDatarF5sUVSq,,rG8"Wlrft».*"'PFee<e«>«,)%FC5低,3慢3KfM/ENOutputDdU16«22221111ft<Jk.1",OutputData四、循环左移16位,实现高低字调换(高低字节的话,就是循环左移8位)如下图所示新建一个Fd块,块的接口变量如下图所示,SCL程序如下图所示,叫目J力心斯中 41(CXI U1SCD<JtXCJff tStt* IHIOir*济30wcMIe« MT 4» FOI e1«.Y«»2|K4| A 快窜 UB