• «
  • 1
  • 2
  • »
  • Pages: 2/2     Go
zhou1211
级别: 略有小成
精华主题: 1 篇
发帖数量: 205 个
工控威望: 362 点
下载积分: 1172 分
在线时间: 66(小时)
注册时间: 2013-11-04
最后登录: 2024-09-18
查看zhou1211的 主题 / 回贴
12楼  发表于: 2021-01-17 09:41
程序是很简单,但到实际应用的时候有不确定性,通信原理都是一样,协议也只约定规则,这些规则无非就是限制
紧要
1. 数据帧的开始标志
2. 数据长度;
3. 结束标志;
4. 校验方式;
非紧要,在前面4个重点正确的情况下,后面的一般不会有错
5. 故障码;
6. 最大长度

你的问题可能原因
1.  发送缓存区因相近间隔时间进入过多的数据量,导致发送长度不支持,发送失败;
2.  没有检测握手标志(发送完成标志,接收完成标志),每个通讯功能块都有一个Done 位(双工只注意单个done),新手靠拉长收发时间,中手看标志,老手看综合状态;像485线,你发一帧数据,必须等收到信息完成,或者确实超时才能发下一次询问;
检测的方法最直接是用串口调试工具去监测收发数据的实际状态,这样才能判断错出在哪了,有时候你的数据没问题,而通讯的对方可能有问题,比如,你CPU运行速度1ms周期,而对方在处理不同数据时响应时间不一样,以前测试过一款微型伺服,询问状态响应2ms,控制指令响应时间很长,读数组状态的时候响应时间也很长,所有经常被程序认为是发送超时
写程序前先了解被通讯对象的素质也很重要,先用串口工具测试各种你要用到指令,然后加快收发速度,去测试响应极限,别一上去就干到极限,然后闷逼不知道怎么解决。当确实遇到了问题,那么再回过同用通讯工具采样你发和它发的状态找原因
ronkang
倍加福总线
级别: 略有小成
精华主题: 0
发帖数量: 147 个
工控威望: 348 点
下载积分: 914 分
在线时间: 188(小时)
注册时间: 2008-06-24
最后登录: 2024-11-21
查看ronkang的 主题 / 回贴
13楼  发表于: 2021-01-17 10:53
兄弟,我这200的plc按你说法编程太复杂了,
我看1200里面有一个说法是done置1后,必须在发一个空白pkw才可以下一次读写。
200smart确没这说法,关键uss_protocol(v2.1)符号表没有详细介绍。
程序没法进行了,按理说uss没这么复杂,多个uss_ctrl是此功能块自己控制轮询的。参数读写才需要编程轮询。网上很多案例都是这么做的,别人都没问题。见鬼了
zhou1211
级别: 略有小成
精华主题: 1 篇
发帖数量: 205 个
工控威望: 362 点
下载积分: 1172 分
在线时间: 66(小时)
注册时间: 2013-11-04
最后登录: 2024-09-18
查看zhou1211的 主题 / 回贴
14楼  发表于: 2021-01-17 11:22
图片:
所以说你根本看不懂我那个程序,那个程序不复杂,里面数据判断占了大部分,真正收发指令只占了很小的一部分,你写一个通讯程序也是一样的,当然,电机控制用固定功能块做的,或者说你只需要固定控制方式,所以显得简单;
我程序里面包含了通讯参数的修改,首先是修改了通讯默认地址,再就是模仿modbus切换控制字写对象的参数,然后根据不同的控制模式解析对应数据
你做通讯感觉才入门,上图是对应实现的功能
大致就是通讯建立,先读出前排2组数据,那2组如果和实际设备有出入则通过下面的写操作修改掉,其余时间是在读取右边2列有效数据,这个设备没有修改软件,所以得做通讯程序去修改报警范围之类的参数,不是每一个给你的设备都会给你配一个参数修改软件,也不是每一个操作工都知道怎么去修改一个设备,尤其是第三方,那么你就必须在你的HMI上开放一个接口去方便修改
[ 此帖被zhou1211在2021-01-17 11:39重新编辑 ]
ronkang
倍加福总线
级别: 略有小成
精华主题: 0
发帖数量: 147 个
工控威望: 348 点
下载积分: 914 分
在线时间: 188(小时)
注册时间: 2008-06-24
最后登录: 2024-11-21
查看ronkang的 主题 / 回贴
15楼  发表于: 2021-01-17 14:10
感谢楼上兄弟,感谢你热心的帮助。现在问题找到了,就是USS_RPM_R这个指令的问题。读浮点数就是会导致uss_ctrl报错,甚至变频器报警1910,用uss_rpm_w指令责一切正常。目前还不知道具体的原因。我再试试看能不能找到更多的问题。
  • «
  • 1
  • 2
  • »
  • Pages: 2/2     Go