1. 从零开始:为什么你需要掌握PLC1200的Modbus从站通信?
如果你正在工业自动化领域摸爬滚打,或者刚刚接手一个需要将西门子S7-1200 PLC作为数据采集终端接入现有系统的项目,那么“Modbus从站”这个概念你一定绕不开。我见过太多工程师朋友,一提到自己写Modbus通信程序就头疼,尤其是面对RS485这种半双工总线,总觉得配置复杂、调试玄学。今天,我就以最经典的“S7-1200 PLC + CB1241 RS485通讯板”组合为例,手把手带你走一遍从硬件接线、软件组态到程序调试的全过程。这不是一篇枯燥的手册翻译,而是我踩过无数坑、接过无数调试电话后,总结出的实战经验。我们的目标很简单:让你看完就能动手,做完就能通。
简单来说,这个场景就是让你的PLC变身成为一个“应答者”。想象一下,你的PLC车间里有一台智能仪表(比如流量计、温控器),或者上位机监控系统(如组态王、WinCC),它们作为“主站”(Master),会主动发问:“1号站,你的第一个温度值是多少?”这时,你的PLC作为“从站”(Slave),就需要根据问询,准确地从自己的数据区里找到对应的温度值,并通过RS485线路回答出去。CB1241这块板卡,就是给PLC装上了一个标准的RS485“嘴巴”和“耳朵”。掌握了这套方法,你就能轻松地将各种支持Modbus协议的设备接入到以PLC为核心的系统中,极大地扩展了数据采集和控制的范围。
2. 硬件准备与接线:别让第一步就“翻车”
工欲善其事,必先利其器。硬件是通信的物理基础,这里出问题,软件调死也没用。我们先来清点一下需要的家伙事儿,并搞清楚怎么把它们连在一起。
核心硬件清单:
- S7-1200 PLC 一台:CPU型号不限,1211C、1214C、1215C都可以,记得给它配上电源。
- CB1241 (RS485) 通讯板一块:型号就是6ES7241-1CH30-1XB0。这块板子需要插在CPU正面的通信板槽位上,它是实现RS485物理接口的关键。
- RS485转USB调试线一根:用于连接你的电脑和CB1241,进行程序下载和通信测试。常见品牌如川宇、力特的都行,注意是RS485转USB,不是RS232。
- Modbus调试助手软件:安装在电脑上,用于模拟主站,发送和接收Modbus报文。这个软件网上很多,比如“Modbus Poll”和“Modbus Slave”的搭配,或者一些国产的串口调试助手也集成了Modbus功能。
- 导线若干:用于连接CB1241和调试线或最终的主站设备。
关键一步:硬件组态 打开博途(TIA Portal)软件,新建项目,添加你的S7-1200 CPU。这步大家都会。重点来了:在“设备视图”中,点击CPU正面那个空白的槽位,然后在右侧的“硬件目录”里,依次展开“通信模块”->“点到点”->“CB 1241 (RS485)”。找到型号6ES7241-1CH30-1XB0,双击或拖拽添加到CPU上。添加成功后,你会在设备视图里看到CPU上多了一块CB1241的图标。这个过程相当于在软件里告诉PLC:“嘿,你身上插了这么一块通信卡。”
重中之重:接线细节,90%的通信故障源于此 接线错了,一切白搭。CB1241板卡上有三个接线端子:T/RA(端子1)、T/RB(端子2)和GND(端子3)。对于RS485通信,我们通常使用端子1和2。
这里有一个极其容易混淆的点,也是我早期踩过的大坑:信号定义与颜色惯例。
- 从站(我们的PLC)视角:CB1241的 T/RA(端子1)对应的是B-,而 T/RB(端子2)对应的是A+。这个定义是站在PLC发送信号的角度看的。
- 调试线/主站设备视角:市面上多数的RS485转USB线或第三方设备,会遵循“A+, B-”的标签,并且常用棕色线(或红色)接A+,蓝色线接B-。
那么怎么接?记住一个简单的“交叉”原则(不完全是电气交叉,而是名称对应): 将CB1241的T/RA(B-)连接到调试线的B-(蓝色线)上。 将CB1241的T/RB(A+)连接到调试线的A+(棕色/红色线)上。 GND端子视情况连接,如果通信距离近、环境干扰小,有时不接也能通,但规范做法是接上,以保证共地。
我强烈建议你给这两根线贴上标签,写上“A+”和“B-”。很多通信不稳定的问题,最后查下来就是这两根线接反了或者接触不良。接线完成后,最好用万用表通断档测一下,确保从PLC端子到调试线插头是导通的。
3. 软件组态与关键参数设置:让PLC“听懂”Modbus语言
硬件连好了,接下来就要在博途软件里进行“软配置”,告诉PLC用什么样的“语言规则”(协议)和“语速”(波特率)来通信。
创建数据块:为通信准备“数据仓库” 在开始调用通信指令前,我们先要规划好一块内存区域,专门用来存放要与主站交换的数据。在项目树中,右键“程序块”->“添加新块”,选择一个全局数据块(DB),我习惯命名为“DB_Modbus_HoldReg”。在这个DB块里,我们创建一个数组。比如,创建一个名为Hold_Register的数组,类型为Int,长度设为100个元素(从Hold_Register[0]到Hold_Register[99])。这100个整数(每个16位)就对应了Modbus协议中的“保持寄存器”(4x寄存器)区域,地址是40001到40100。主站读写的就是这个数组里的数据。
调用并配置核心指令:Modbus_Comm_Load 这个指令块(FB)的作用是初始化CB1241的通信端口,相当于给端口设定工作模式。在“指令”面板中,找到“通信”->“通信处理器”->“MODBUS”文件夹,你会看到两个指令:Modbus_Comm_Load 和 Modbus_Slave。注意,我们选择的是“MODBUS”下的,而不是“MODBUS RTU”下的。在S7-1200/1500的Modbus RTU通信中,端口组态和从站功能是由这两个指令分开完成的。
-
在Main(OB1)中调用
Modbus_Comm_Load:REQ(请求):这里需要接一个上升沿脉冲。最常用的做法是,在第一个扫描周期触发一次。你可以使用FirstScan系统位(M1.0),或者自己创建一个Bool变量,在初始化组织块OB100中将其置位一次。它的作用是“上电初始化一次端口”。PORT(端口):填写CB1241的硬件标识符。这个值在哪里看?回到设备视图,点击CB1241模块,在它的属性栏“常规”->“点对点”里就能找到,通常是267或270。务必填写你自己项目里实际生成的这个数字。BAUD(波特率):设置通信速率。这里填9600,必须和后续主站设备的设置完全一致。常见的还有19200、38400等。PARITY(奇偶校验):填0,表示无校验。MB_DB:这是指向Modbus_Slave指令背景数据块的指针。我们还没调用Modbus_Slave,所以可以先空着,等调用完再回来填写。
-
调用并配置核心指令:Modbus_Slave 这个指令块才是实现从站功能的核心,它需要一直循环执行。
- 在
Modbus_Comm_Load下方,调用Modbus_Slave指令。 - 系统会提示你为这个指令分配一个背景数据块(Instance DB),比如就叫
DB_Modbus_Slave。这个DB块非常重要,它存储了从站的所有运行状态和配置。 - 关键参数配置:
MB_ADDR(从站地址):设置你的PLC在Modbus网络中的站号,范围1-247。这里设为1。MB_HOLD_REG:这是整个配置的灵魂!它是指向我们在第一步创建的“数据仓库”(那个Int数组)的指针。点击这个引脚,选择“新建”一个形参,然后将其连接到我们之前创建的DB_Modbus_HoldReg数据块中的Hold_Register数组。这样,Modbus_Slave就知道主站要读写的保持寄存器数据实际存放在PLC内存的哪个地方了。
- 在
-
完成回路连接: 现在,回到
Modbus_Comm_Load指令,将它的MB_DB引脚,指向刚才为Modbus_Slave创建的背景数据块DB_Modbus_Slave。这样就完成了两个指令块的关联。
参数表格总结
| 参数项 | 所在指令块 | 设定值 | 说明与注意事项 |
|---|---|---|---|
| 波特率 (BAUD) | Modbus_Comm_Load | 9600 | 必须与主站设备严格一致,常用值有9600, 19200, 38400, 57600, 115200。 |
| 数据位 (DATA_BITS) | Modbus_Comm_Load | 8 | Modbus RTU标准为8位。 |
| 停止位 (STOP_BITS) |


237

被折叠的 条评论
为什么被折叠?



