Lib.rar
原贴见:https://www.ad.siemens.com.cn/club/bbs/post_1872900_64_0_31.html#anch
由于原MODBUS轮询库是基于200的源码修改,使用上有一些和SMART原版库不一致的地方(不支持PORT 1,不支持>400000的寄存器地址),现由网友“不欲勿施”提供SMART源码,修改更正发布第二版。已测试。若有问题,请回贴。
此版包含两个库文件,对应原版的两个MODBUS库。也即是说,使用这版如果你的SMART PLC有两个串口,可以两个串口同时作MODBUS 主站,进行通讯。如果没有此需求,可以使用上一版库。
顺便说一下此库编程思路。
此库不维护通讯需要轮询的数组。库中有一个位RING,表示是否有某条MSG正在占用。
CTRL初始化后,程序第一条MSG检查RING,发现未占用,则置位RING,并置位其IN_OUT变量myRING.(为什么要有myRING,各位可以自己思考一下),然后是正常的MODBUS状态机,直到结束。结束后,复位RING,复位myRING.其下一条EN=TRUE的MSG发现RING已未占用。则执行相同的操作。如在过程中,RING=TRUE,且myRING=FALSE,MSG直接RET。此过程和多线程程序编写有异曲同工之处。
若是普通的轮询操作,可以以SM0.0顺序调用MSG指令即可!
若要控制MSG的优先级,可以控制MSG的EN。可利用之处包括:
若某条信息急需处理,则可置一个位,令其它MSG的En不能为TRUE。
若某条信息可以延时处理,则可以在此信息处理过后,延时使其EN=TRUE
注意:myRING=TRUE表示此信息已经在处理中,此时不要(也不能)更改其EN。