工控菜鸟
菜鸟一只
级别: 论坛先锋
精华主题: 0
发帖数量: 951 个
工控威望: 1127 点
下载积分: 13852 分
在线时间: 294(小时)
注册时间: 2017-04-12
最后登录: 2024-11-17
查看工控菜鸟的 主题 / 回贴
楼主  发表于: 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
发帖数量: 951 个
工控威望: 1127 点
下载积分: 13852 分
在线时间: 294(小时)
注册时间: 2017-04-12
最后登录: 2024-11-17
查看工控菜鸟的 主题 / 回贴
1楼  发表于: 2020-01-01 19:16
大神都过节去了,如果我用LOBYTE 和HIBYTE函数拆分数据是不是可以实现,明天试下
工控菜鸟
菜鸟一只
级别: 论坛先锋
精华主题: 0
发帖数量: 951 个
工控威望: 1127 点
下载积分: 13852 分
在线时间: 294(小时)
注册时间: 2017-04-12
最后登录: 2024-11-17
查看工控菜鸟的 主题 / 回贴
2楼  发表于: 2020-01-14 23:14
试过了,我已经做出来了