工控菜鸟
菜鸟一只
级别: 论坛先锋
精华主题: 0
发帖数量: 919 个
工控威望: 1095 点
下载积分: 13851 分
在线时间: 281(小时)
注册时间: 2017-04-12
最后登录: 2024-04-15
查看工控菜鸟的 主题 / 回贴
楼主  发表于: 2020-01-01 18:29
图片:
上图是变频器的通讯帧,下图是别人写的和单片机通讯宏
。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
//主程序
macro_command main()
bool on = true, off = false
//PCB I点状态
unsigned short PCB_I
//PCB O点状态
unsigned short PCB_O
//接收长度
unsigned short inLength
//接收CRC校验结果
unsigned char inCRC
//通讯计次
unsigned int comTime
//通讯帧头
outArr[0] = 0x80
outArr[1] = 0xEB
outArr[2] = 0x90
outArr[3] = 0x30
//获取PCB O点控制的状态
GetData(PCB_O,"Local HMI",LW,11,1)
LOBYTE(PCB_O,outArr[4])                       这一行只是写了个低八位到数据1,如果我是和变频器通讯需要写高八位和低八位要怎么写,怎么定义变量呢?
outArr[5] = 0x00
//CRC
outArr[6] = PCB_CRC(5,0)
。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
下行帧结构,及说明
设备地址    同步码1    同步码2    控制字    数据1    数据2    校验码
80H       EBH           90H        30H           00H          00H          CRC
设备地址: 80 固定地址
同步码:EB 90 上位机与单片机同步字段
控制字:30 指执行这个类型的命令
数据2:无意义,默认填00H
数据1:每个bit对应控制单片机上的继电器吸合
校验码:8位的查表校验
[ 此帖被工控菜鸟在2020-01-01 18:38重新编辑 ]
工控菜鸟
菜鸟一只
级别: 论坛先锋
精华主题: 0
发帖数量: 919 个
工控威望: 1095 点
下载积分: 13851 分
在线时间: 281(小时)
注册时间: 2017-04-12
最后登录: 2024-04-15
查看工控菜鸟的 主题 / 回贴
1楼  发表于: 2020-01-01 19:16
大神都过节去了,如果我用LOBYTE 和HIBYTE函数拆分数据是不是可以实现,明天试下
梦雨天涯
微信hui530527   &
级别: 网络英雄
精华主题: 0
发帖数量: 3761 个
工控威望: 7106 点
下载积分: 12984 分
在线时间: 2483(小时)
注册时间: 2016-10-31
最后登录: 2024-04-26
查看梦雨天涯的 主题 / 回贴
2楼  发表于: 2020-01-07 21:20
引用
引用第1楼工控菜鸟于2020-01-01 19:16发表的  :
大神都过节去了,如果我用LOBYTE 和HIBYTE函数拆分数据是不是可以实现,明天试下

试过了吗
微信hui530527      b站账号,梦雨天涯1991
请不要随意加我,不会随便通过。QQ群942493953
工控菜鸟
菜鸟一只
级别: 论坛先锋
精华主题: 0
发帖数量: 919 个
工控威望: 1095 点
下载积分: 13851 分
在线时间: 281(小时)
注册时间: 2017-04-12
最后登录: 2024-04-15
查看工控菜鸟的 主题 / 回贴
3楼  发表于: 2020-01-14 23:14
试过了,我已经做出来了