1,vw1272寄存器中输入02,我用的ITA指令将0写入一个vb寄存器中,将2写入另一个寄存器中,但是这两个寄存器写的数都是10进制的,通讯要求输入时16进制的,不知道怎么弄,
2,通讯协议要求检查和就是把前几个16进制的数加起来,200smart能进行16进制加减吗?
望大神帮忙解答。
问题补充:
看了大家的回答,是我的疏忽,没有阐述明白,
1,vw1272是一个在hmi上可输入的一个寄存器,范围是0-20之间的整数,比如我现在输入的是5,监控状态图表是正确的,16进制ascll码为30,35,但是用到程序中就是10进制的了,我想变成16进制输入,跟上下程序一样,
2,整数运算不能用vb的寄存器,只能vw,我想把vb寄存器中的16进制数,进行加运算,得出来的数也是16进制的,
望解答,谢谢各位,
图片说明:
最佳答案
此回答已完善
不需要,你考虑的太多了,十进制,十六进制实际都是按照二进制存储的,只是显示格式的区别而已。
四则运算没有问题。
补充:你会不会提问呀?告诉你了十进制还是十六进制只是一个显示格式而已,实际运算都是按照二进制来运算的。比如你输入一个十进制的15,你看作十六进制的就是F看作十进制的就是15,看作二进制就是2#1111.你想显示成什么格式就用什么,通讯你的运算有什么关系?一个萝卜一个坑,你把数据保存到数据交换区就完了,对方也直接读出来就行了。你管的有点太宽了,你io域输入一个十六进制的acfe,你能马上反映出来你这个是什么数吗?
提问者对于答案的评价:
不是的,我跟一个流量计进行通讯,他要求必须是16进制的ascll码发送过去,每一个ascll码占用一个vb寄存器,最后发送的ascll码是检查和,就是把前几个发送的ascll码加起来取后两位在转化为ascll码,比如检查和是283,就是取8和3转化为ascll码是38和33,发送过去,现在的问题是,我用b-i指令全转化为vw寄存器,进行加减,得出的数是10进制的,要转化为16进制,在取后两位转化为ascll码写进去,比如我运算得数为550,550的16进制是226,取2和6的ascll码,不知道怎么550转化为226,因为不能取550的后两位,取550的后两位这个数就是发送不过去的,或者我程序不应该这么写?有没有什么别的办法呢,这个流量计要求都是16进制的ascll码,求教,万分感谢。
最佳答案作者回复:
用/和mod求商和余数方式,只要商大于等于16就再次求商和余数,你第N次求的余数就是你的十六进制的第N位的值。
原创文章,作者:ximenziask,如若转载,请注明出处:https://www.zhaoplc.com/plc279695.html