S7-200 可以通过自由口通讯方式支持 Modbus 协议,在
Micro 'n Power 中也提供了一个适用于 S7-200 的免费库。但库太过于 S7-200 化了,为了简化在 S7-200 上的应用,该库对 Modbus 协议进行了过多的包装。比如人为对地址进行分类,通过地址前缀将功能码和寄存器地址合二为一,对于熟知 S7-200 且多用于 S7-200 之间通讯的开发者来说,使用是很方便的,但对于那些对 Modbus 一知半解的人来说,就容易产生迷惑性。
为了达到代码重用的目的,本人写了个基于原始协议的 RTU 库。本库将功能码和寄存器分开,使用者需要了解 Modbus 协议,知道何种地址使用哪一类功能码。在同多个不同品牌不同类型的从站网络通讯时使用较为方便,不需要进行地址转换,也不需要针对“Modbus 地址进行 +1 处理”,只需要直接查具体从站的手册按手册中的地址填写即可。
本库使用方式、要求均与 Micor 'n Power 提供的库相同:提供 MBUS_CTRL 和 MBUS_MSG 两个子程序,需要在每个扫描周期调用。
另外提供一个独立的 MBUS_CRC 子程序用于其它地方的 CRC 检验码计算。
子程序的用法:
1、MBUS_CTRL

附件:
您所在的用户组无法下载或查看附件入口参数:
EN : 调用使能位,须始终接通
fMode : 通讯口模式,0=恢复PPI、1=Modbus,参数类型:位
dBaud : 通讯波特率,1200/2400/.../115200等,参数类型:双字
bParity : 校验方式, 0=无校验,,1=奇校验,2=偶校验,参数类型:字节
nTimeout : 超时时间,单位:毫秒,参数类型:字
出口参数:
fDone :完成位状态,0=忙碌中、1=已完成,参数类型:位
bError :返回代码,0=无错,非零为出错(详见POU注释),参数类型:字节
2、MBUS_MSG

附件:
您所在的用户组无法下载或查看附件入口参数:
EN : 调用使能位,须始终接通
fFirst : 一个消息帧的开始,须用 EN 的上升沿调用,参数类型:位
bSlave : 从站地址,参数类型:字节
bFunction : 功能码,参数类型:字节
wAddr : 寄存器地址,参数类型:字
wCount : 读写数据长度(字数),参数类型:字
pDataBuf :数据缓冲区首地址,参数类型:双字
出口参数:
fDone :完成位状态,0=忙碌中、1=已完成,参数类型:位
bError :返回代码,0=无错,非零为出错(详见POU注释),参数类型:字节
3、MBUS_CRC

附件:
您所在的用户组无法下载或查看附件入口参数:
EN : 调用使能位
pBuf :待计算报文的首地址(第一字节指明数据字节数),参数类型:双字
bExchg : 是否交换结果的高低字节位,0=不交换、1=交换,参数类型:字节
bPutBack :结果是否写入缓冲区,0=不写,1=写入,参数类型:字节
出口参数:
wCrc :计算结果,参数类型:字