分类:work
【转】modbus协议中的线圈、寄存器等的解释
公司业务需要,用到modbus协议,本质上很简单,只是第一次接触,被这些词语搞得云里雾里的。这里整理一下,方便以后查询:
0x01: 读线圈寄存器
0x02: 读离散输入寄存器
0x03: 读保持寄存器
0x04: 读输入寄存器
0x05: 写单个线圈寄存器
0x06: 写单个保持寄存器
0x0f: 写多个线圈寄存器
0x10: 写多个保持寄存器
如上所示一共8种功能码。这其中有涉及到线圈、离散输入、保持、输入四种寄存器。
线圈寄存器:实际上就可以类比为开关量(继电器状态),每一个bit对应一个信号的开关状态。所以一个byte就可以同时控制8路的信号。比如控制外部8路io的高低。 线圈寄存器支持读也支持写,写在功能码里面又分为写单个线圈寄存器和写多个线圈寄存器。对应上面的功能码也就是:0x01 0x05 0x0f
离散输入寄存器:如果线圈寄存器理解了这个自然也明白了。离散输入寄存器就相当于线圈寄存器的只读模式,他也是每个bit表示一个开关量,而他的开关量只能读取输入的开关信号,是不能够写的。比如我读取外部按键的按下还是松开。所以功能码也简单就一个读的 0x02
保持寄存器:这个寄存器的单位不再是bit而是两个byte,也就是可以存放具体的数据量的,并且是可读写的。一般对应参数设置,比如我我设置时间年月日,不但可以写也可以读出来现在的时间。写也分为单个写和多个写,所以功能码有对应的三个:0x03 0x06 0x10
输入寄存器:这个和保持寄存器类似,但是也是只支持读而不能写,一般是读取各种实时数据。一个寄存器也是占据两个byte的空间。类比我我通过读取输入寄存器获取现在的AD采集值。对应的功能码也就一个 0x04
Java 脚本化编程和表达式引擎(Nutz)
免费开源可商用CMS系统推荐
RK3399配置build.prop
准备
1.启动root模式
adb root
2.重新挂载文件系统
adb remount
3.拷贝文件
adb pull /system/build.prop
修改
1.修改硬件屏幕方向
ro.sf.hwrotation=0
2.修改屏幕分辨率
persist.sys.framebuffer.main=1920×1080
3.隐藏虚拟按键
qemu.hw.mainkeys=1
配置
1.覆盖文件
adb push build.prop /system
参考链接:
【转】[RK3399—Android7.1] 默认屏幕显示方向
转载自:[RK3399—Android7.1] 默认屏幕显示方向
/system/build.prop
文件中 ro.sf.hwrotation=0
这里可以90、180、270
修改后同步,重启,可调整默认旋转方向。
镜像直接默认修改:device/rockchip/rk3399/build.prop 中 ro.sf.hwrotation=0 属性
NFC之PN532使用
1.唤醒PN532:
PC->PN532: 55 55 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ff 03 fd d4 14 01 17 00 PN532->PC: 00 00 FF 00 FF 00 00 00 FF 02 FE D5 15 16 00
2.获取卡UID,也就是卡的唯一ID号,全球就这一个(理论上)
PC->PN532: 00 00 FF 04 FC D4 4A 02 00 E0 00
匹配手机号码及运营商校验
JAVA合并多个byte[]为一个byte[]
private static byte[] byteMergerAll(byte[]... args) {
int length_byte = 0;
for (byte[] b : args) {
length_byte += b.length;
}
byte[] all_byte = new byte[length_byte];
int countLength = 0;
for (byte[] b : args) {
System.arraycopy(b, 0, all_byte, countLength, b.length);
countLength += b.length;
}
return all_byte;
}
参考链接: