合信论坛

快捷导航
查看: 3775|回复: 0

C37与SM277C后的模拟量模块通信

[复制链接]

50

主题

51

帖子

3720

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
3720
发表于 2023-8-30 16:08:25 | 显示全部楼层 |阅读模式
使用设备:C37-000S1、SM277C
使用软件:CODESYS SP4
目的:实现C37与SM277C后的模拟量模块通信
步骤:
1. 新建项目,添加CANbus,光标定位C37右击选择添加设备,选择CANbus,
添加CANbus.png CANbus.png

2. 添加CANopen,光标定位CANbus右击选择添加设备,选择CANopen_Manager
CANOPEN.png CANopen-1.png

3. 添加EM277C,光标定位CANopen右击选择添加设备,选择EM277C
+277c.png EM277C.png

4. 组态canopen网络,本次项目设置波特率为1M,277C地址为2
图片1.png 图片2.png

5. “服务数据对象”页面,选择“新建”,在弹出的对象目录中选择添加“16#2200:16#00”下的“:16#01”,注意:如果不添加此索引将不能与277C通信成功
图片3.png 图片4.png

6. 277C实际的波特率拨码为1M,地址为2,并断电重启
7. 读写3个模拟量模块通道值,SM277C+2路输出模块(232-0HB)+普通8路输入模块(231-0HF)+8路温度模块(231-7NF)
C37对于CANopen上扩展模拟量I/O的访问不需要在SM277C后组态相应的模块,只需实际挂上相应的模块然后通过使用SDO读写指令来执行,且不能读写其中的某个模块每次必须读完SM277C后的所有模块,因此读写缓冲区长度要与实际环境组态的相一致。
例如:当前实际环境中组态了16路模拟量输入和2路模拟量输出,因此就要定义32个字节大小的读缓冲区和4个字节大小的写缓冲区,定义“arry0”和“arry1”分别为写、读缓冲区地址,“datelen0”和“datelen1”分别为写、读缓冲区长度。
图片5.png

定义完所需变量后就可以编写SDO功能块用以SDO的读写操作了,需要用“CIA405.SDO_WRITE”和“CIA405.SDO_READ”2条指令,这里要注意的是
针对SM277C,SDO读指令的“INDEX”需设置为16#6500,
“SUBINDEX”需设置为1;
SDO写指令的“INDEX”需设置为16#6600,
“SUBINDEX”需设置为1;
DEVICE参数为CANopen 设备的节点ID即SM277C的节点ID为2,
CHANNEL为SDO 通道编号,缺省值 = 1。
MODE为数据传输模式,缺省值0 表示自动模式选择,
其他参数值按下图设置,输出CONFIRM位当完成时置1
图片6.png 图片7.png

8. SDO都配置完成后就可以下载并运行工程通过SM277C访问其后的扩展IO了,注意模拟量输入输出值的高低字节是颠倒的,因此结果需要特别注意,232-0HB的第1路输出接231-0HF的前4路输入,232-0HB的第2路输出接231-0HF的后4路输入
    如果输出通道写10#32000和10#16000,高低字节相反且由于输入通道值有波动,因此低字节的波动会变成高字节的波动,会导致10进制数值有较大的偏差,结果非常不好确认,因此将数值转换为16进制,可以比较明显看出结果。
如果输出通道写16#7D00(10#32000)和16#3E80(10#16000),由于高低字颠倒则实际写入值为16#007D(10#125)和16#803E(10#-32760),由于231-0HF默认单极性输入0-10V(全量程0-32000),因此后1通道写入的值超过量程读回来的为0,
如下图所示,左边为C37后的结果,右边图为在H36后的结果。
图片8.png

因此如果要给输出写10#32000(16#7D00),则需要写的值应该是10#125(16#007D),给输出写10#16000(16#3E80),则需要写的值应该是10#32830(16#803E)。结果如下图所示

9.10.png
补充说明:
1.SDO指令的读写缓存区长度必须大于等于实际组态环境总输入输出字节数
2.由于在组态上SM277C后没有组态模块对后面所挂的模块不会做检测,即如果SM277C后面挂的不是CH200扩展模块SM277C也不会报错,因此如果指令不能读写模拟量数据可能是后面挂的模块不是CH200扩展模块而是CTSC-200扩展模块引起(如果EM扩展模块挂在SM277C后的第一个位置,SDO指令会报错不能读写任何数据;如果EM扩展模块挂在SM277C的最后一个位置,SDO指令不会报错但其他SM模块数据可以正确读写但EM扩展模块数据不能读写)
3.如果模块没电源SM277C的SF灯亮读回来数据16#FE7F(高低字颠倒为10#32766);模块超量程SM277C的SF灯不亮但模拟量输入模块SF灯亮,读回来数据16#F07F(10#32752)
4.可以通过EM277C.CANopenState来判断SM277C通信是否断开


C37与SM277C后的模拟量模块通信.docx

1.37 MB, 下载次数: 2065

CANopen.project

390.52 KB, 下载次数: 1772

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

客服热线
400-700-4858 周一至周五:09:00 - 18:00
深圳市南山区打石一路深圳国际创新谷6栋A座9层

深圳市合信自动化技术有限公司(简称“合信技术”)成立于2003年,高新技术企业,专注于工业自动化产品的研发、生产、销售和技术服务,依靠高质量、高性能的自动化控制产品与方案为客户创造最大价值,立志于成为全球领先的工业自动化解决方案供应商。

Archiver|手机版|小黑屋|COTRUST Inc. ( 粤ICP备13051915号 )

GMT+8, 2025-5-3 12:25 , Processed in 0.166108 second(s), 25 queries .

快速回复 返回顶部 返回列表