- 各位大神,请教大家一个问题,我这边想用MCGS的触摸屏用tcpip的协议通讯 ab 1766系列plc,读取数据! 试了好几个协议都不行,通讯不了,读取不出来! 大神们有好的建议给指导下吗
- 各位大师傅想问一下我一个永磁电供水突然停电,水泵反转会不会烧坏变频器,或电机谢谢
- 2800转和1400转电机配安川变频器参数有哪些不同 这个电箱,我用1400转的电机,一点问题都没有,很正常 但是换成 电机 如图后 就不行 设置是50hz, 实际上只有hz17
- 三菱FX5U报错代码:H21A0 文件指定异常, 初始化内存,清除PLC数据 都不行
- 请教5000中一个INT数据如何拆分成两个SINT?仪表需要把采集到的INT数据的高低字节分开,网上搜可以使用.H或.L,试了下不行,大家都怎么处理这种情况的?
请教5000中一个INT数据如何拆分成两个SINT?仪表需要把采集到的INT数据的高低字节分开,网上搜可以使用.H或.L,试了下不行,大家都怎么处理这种情况的?
联系人:15609536173197
电话/手机:联系客服
发布时间:2025-10-14 19:10
浏览:158次



















































方法 1(首选):COP 指令按字节拷贝
建 2 个字节的数组:MyBytes : SINT[2]
执行:
Source = MyInt(类型 INT)
Dest = MyBytes[0](类型 SINT)
Length = 1 ← 注意:长度是“源类型的元素个数”,拷 1 个 INT=2 字节
在 Logix(小端序)里:
MyBytes[0] = 低字节(LOW)
MyBytes[1] = 高字节(HIGH)
想把两个 SINT 合回 INT,也用一条 COP:Source=MyBytes[0]、Dest=MyInt、Length=1(拷 1 个 INT 的字节数)。
提示:如果你看到大于 127 的字节会以负数显示,这是 SINT 有符号显示 的问题;实际发出去的字节是对的。把显示基数改成 HEX 或改用 USINT(若固件支持)。
方法 2:按位运算(屏蔽+移位)
// 拆分
LowByte : USINT; // 或 SINT
HighByte : USINT;
LowByte := USINT(DINT(MyInt) AND 16#00FF);
HighByte := USINT((DINT(MyInt) >> 8) AND 16#00FF);
// 组回
MyInt := INT( (DINT(HighByte) << 8) OR DINT(LowByte) );
先转成 DINT 再移位,避免有符号移位的坑。
用 AND 16#00FF 保证只取 8 位。
方法 3:COP 到更长的字节缓冲
对需要连续处理一批数据的场景,可以把 INT[N] 一次 COP 到 SINT[2*N],再按索引取高/低字节即可。
常见坑
COP.Length 写成 2 以为是 2 字节,其实变成拷 2 个 INT(4 字节)→ 结果错。
目的地址没有对齐或类型错(用 INT/DINT 去接 SINT 字节)。
看值时用十进制导致误判(>127 显负数)。
这样做基本就能跟仪表对上“高低字节分开”的需求了。