发布于 2008-09-10 22:44:06
0楼
谢谢dcount107!这么说,冬日朋友的思路似乎不错.
今天考虑还是要把昨天的程序实验做透彻,有些体会,与朋友们分享。就实际效果来说,本贴的目的应该已经实现.这也是万版说的"不要把思路局限在两次调用上。"
实验硬件条件:CPU314PtP(手头器材),CP341,北京迅威公司RS232/485转换器,MOXA公司RS485接口光电转换器和一段光缆。PC机一台,运行STEP7和仿真测试软件。通过CP5611调试程序。通过COM口建立的仿真通讯,可以建立多个MODBUS从站。
实验目的:继续观察调用一个FB8,利用时序脉冲连续修改“DB1.DBB0”,“DB1.DBB1”,“DB1.DBW4”的数值,考察对通讯程序运行结果影响。程序中对FB7,FB8的EN端没有控制,保持TRUE。LEN=18没有改变。
DB1数据实际内容(LEN=18):
01 10 00 00 00 06 00 0A 00 0B 00 0C 00 0D 00 0E 00 0F
下面代码加粗字体(第1,2,6字节)是在OB1利用MOVE指令对DB1相应单元修改部分,DB1其他字节没有改变。
希望执行如下指令(不含CRC校验):
01 10 00 00 00 06 0C 00 0A 00 0B 00 0C 00 0D 00 0E 00 0F ;对1号站写10个数
02 10 00 00 00 04 0C 00 0A 00 0B 00 0C 00 0D ;对2号站写4个数
03 03 00 00 00 06 ;读3号站6个数
04 03 00 00 00 03 ;读4号站3个数
执行结果,符合预期。使用SSCOM32接收代码如下。说明修改“DB1.DBB0”就可以切换从站,修改“DB1.DBB1”实现功能的切换,在“DB1.DBB1”保持不变的情况下(确定了功能代码),例如16功能,“DB1.DBW4”决定实际发送代码长度,而不是LEN决定实际发送代码长度。
01 10 00 00 00 06 0C 00 0A 00 0B 00 0C 00 0D 00 0E 00 0F 98 39
02 10 00 00 00 04 08 00 0A 00 0B 00 0C 00 0D FB 7C
03 03 00 00 00 06 C4 2A
04 03 00 00 00 03 05 9E
01 10 00 00 00 06 0C 00 0A 00 0B 00 0C 00 0D 00 0E 00 0F 98 39
02 10 00 00 00 04 08 00 0A 00 0B 00 0C 00 0D FB 7C
03 03 00 00 00 06 C4 2A
04 03 00 00 00 03 05 9E
01 10 00 00 00 06 0C 00 0A 00 0B 00 0C 00 0D 00 0E 00 0F 98 39
02 10 00 00 00 04 08 00 0A 00 0B 00 0C 00 0D FB 7C
03 03 00 00 00 06 C4 2A
04 03 00 00 00 03 05 9E