[西门子] 最近做了一个C#与PLC项目

[复制链接]
查看153 | 回复0 | 7 天前 | 显示全部楼层 |阅读模式

公司给项目配了一台工控一体机,显示器和主机一体,使用起来比较方便。

 

硬件资源

工控一体机是四核四线程处理器;有4个DB9接口(COM1-COM4),其中COM1和COM2支持RS232和RS485,COM3和COM4只支持RS232;以太网口有2路,由于只连接PLC,没有连接其它设备,只用了第一路网口。

 

工控一体机需要与3台设备交互:PLC、温度变送器、伺服驱动器。

与PLC的交互采用ModbusTCP

与变送器、伺服驱动器均采用ModbusRTU

 

硬件上的连接方式如下图所示


由于设备连接的硬件比较少,且工控一体机的硬件资源足够,虽然一路RS485可以接变送器和伺服驱动器,但是为了程序考虑,就使用2个COM口带2台ModbusRTU设备。


在上位机软件开发上,工控机拥有四核四线程CPU,所以一路通讯占用一路线程。这样做的好处在于当某一路通讯无连接时,防止软件卡顿及数据交互不及时。

 

软件要实现的功能就是读写PLC,读取两台ModbusRTU设备数据,工控机的作用和人机界面一样,多了逻辑处理、文件保存、参数保存功能。PLC只作为执行机构,不做参数保存功能。

 

调试的时候,遇到一个问题:要读取伺服驱动器内的累计脉冲数量,根据反馈编码器脉冲数、减速比,从而计算当前电机所带的产品旋转所在的角度数值。想要得到的角度数值取值0.00-360.00度。


当时计算角度时,计算的结果一直是0,即使电机转动,数值也是固定的几个数值在跳动。一开始以为是读取的电机脉冲数是一个INT64的一个长整形数值太大,计算结果有问题,就在 [工业技术互联交流群] 微信群中询问,@万物生 和我一起解决。后来发现,实际忽略了一个小问题,就是在换算角度的时候,不仅需要用double类型的数据承载计算结果,并且整数除以整数时候,得到的结果不会产生double类型,需要将除数更改为double类型,即可得到角度数据。例如:double A = 5/7.0 就会得到一个带小数的值,但是double A = 5/7 得到的数值结果就是0,之前就是将7.0写成了7,才导致这个问题。

 

当时在群里说,我读取到了一个很大的当前脉冲数据,后来查看伺服驱动器内的数据,也不过14382,而我读取出来的数据却非常大,用十进制表示足有十几位,第一反应就是获取的数据高低位解析有问题。我将原来的数据解析由ABCD改为CDAB后,解决读取编码器反馈量大问题。


经过一系列的程序优化,目前设备在正常运行。




免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册哦

x
您需要登录后才可以回帖 登录 | 注册哦

本版积分规则