技术论坛

说说西门子200smart modbus自由口通讯的那些事3

作者 主题
至圣

经验值: 72010
发帖数: 8043
精华帖: 145
主题:【分享】说说西门子200smart modbus自由口通讯的那些事3
精华帖精华帖星级3级 推荐帖


只看楼主 只看精华 楼主 2016-11-30 11:31:20

                               说说西门子200smart modbus自由口通讯的那些事3

   上文说到发送指令XMT及串口调试软件的一些简单应用实例,其目的也是为了理解这个发送指令,熟悉这个指令的常规应用及注意事项或者说是一些特性。我理解modbus自由口通讯自开始以来就一直以打乒乓球理论来理解通讯的,球一旦发过球台中间的网接触对方球台上就需要对方来回应了。记得小时候常常在一块大门板上打球,一些年长的球友每发一个球过来,我每次只要用球拍一接触飞过来的球,这个球就不按我想的运动轨迹回过去,往往被弹飞掉。有一次,我的一个要好同学告诉了我其中的窍门,看对方发球的手势。当对方用力发一个削球过来,你可以将球拍以反方向侧板回击,一试,固然如此,就记下了这个回球的方法,现在应用到这个通讯编程上还仍然可以借鉴。

   关于接收指令RCV的应用,如果仅仅理解该指令,到是与发送指令XMT很相似,可问题的关键的如何应答(接收)是一门大的学问了,也是广大同行一直来在做探究的根源。

接收指令RCV:

TBL:指定了数据接收后存放的寄存器区域,和发送指令XMT一样,第一个数据地址存放着接收所规约的数据个数,最大接收数据个数255个。

PORT:指定接收数据的通讯口,集成的通讯口填0口,扩展的信号板填1口,这个与发送指令XMT也完全一致。

   指令调用与发送指令一致,沿触发或中断子程序中调用就可以了。

   假设,我通过串口调试软件的发送区,发送一串字符“Siemens”到200smart的RCV指令中,指令规约的字符串地址区是VB101开始的7个字节储存区,VB100存放的是接收字符的个数,采用手动发送字符串模式。通讯口参数设置SMB30=16#09

在调用接收指令前先定义好接收指令的控制字节SMB87:


启用起始符和结束符的方式:

根据需要设置SMB87控制字节:SM87.7 = 1(必须设置为1);SM87.6 = 1;SM87.5 = 1,即启用起始符(SMB88);启用结束符(SMB89);启用接收信息功能(SM87.7)。

具体设置:

1)  SMB88 = 16# 3A(起始符)可选

2)  SMB89 = 16# 0A(结束符)可选

3)  SMW94 = 255 (个数据/byte)这个是必填项目

4)  不启用信息定时器和空闲线定时器(空闲线定时器SMW90;信息定时器SMW92)

5)  开接收完成中断,中断事件号:23(port0口);(中断事件号:24(prot1口)对应)

6)  根据接收控制字节设置SMB87 = 16# E0

程序例子:

初始化接收子程序:


中断程序:


主程序:


用起始符和结束符方式的程序就编写完成了,打开串口调试软件,设置通讯参数与SMB30一致,并将要让PLC接收的以起始符开始的字符写入到串口调试软件的发送区,(3A 73 69 65 6D 65 6E 73 0A),其中,红色字体为实际“Siemens”的字符,3A、0A分别为起始符和结束符。图示:


手动点击发送按钮后,监控“状态图表”:


    串口调试软件发送的“Siemens”字符已成功地被PLC所接收到,用起始符和结束符编辑的小程序告诉我们编写接收指令RCV远比发送指令XMT要稍微复杂的多,首先需要定义接收指令的控制字节,按控制字节的要求选择用什么方式作为接收指令数据的开始和结束;其次,必须定义接收数据的个数,这个在论坛中时有看到无法接收数据的原因,是没有定义这个接收数据个数的标志字节SMB94,最后是定义中断和开中断指令与启用接收指令。

启用信息定时器和起始符的方式:

根据启用信息定时器和起始符要求,得:SMB87 = 16# CC

起始符SMB88 = 16# 3A

信息定时器设置:30mS(根据接收的字符长度计算)

其余的与启用起始符和结束符例子程序定义一致。

程序:

初始化子程序:


中断程序:


主程序调用初始化子程序:


打开串口调试软件,输入待发送的字符(3A 73 69 65 6D 65 6E 73 ),点击手动发送,监控“状态图标”,图示:


    字符信息被PLC成功接收到。连续、、、、、、



 
以下网友喜欢您的帖子:

  
重要声明:

著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

帖子链接:https://www.ad.siemens.com.cn/club/bbs/post.aspx?a_id=1343343&b_id=64&s_id=0&num=18

至圣

经验值: 69050
发帖数: 12265
精华帖: 59
回复:说说西门子200smart modbus自由口通讯的那些事3


只看楼主 只看精华 1楼 2016-11-30 19:51:58

收藏,等用到SMART的时候,再细读~


Q群:https://jq.qq.com/?k=9BDuEgf6
以下网友喜欢您的帖子:

  
至圣

经验值: 17408
发帖数: 6225
精华帖: 18
回复:说说西门子200smart modbus自由口通讯的那些事3


只看楼主 只看精华 2楼 2016-11-30 21:53:34

和200的通讯指令是一样的吧?


 
以下网友喜欢您的帖子:

  
至圣

经验值: 72010
发帖数: 8043
精华帖: 145
回复:说说西门子200smart modbus自由口通讯的那些事3
推荐帖


只看楼主 只看精华 楼主 3楼 2016-12-01 08:11:16
以下是引用Laohuai在2016-11-30 21:53:34的发言 >2楼

和200的通讯指令是一样的吧?

基本一致。


 
以下网友喜欢您的帖子:

  
奇侠

经验值: 7770
发帖数: 1150
精华帖: 1
回复:说说西门子200smart modbus自由口通讯的那些事3
推荐帖


只看楼主 只看精华 4楼 2017-01-13 10:22:31

W大侠,关于200smart modbus自由口的事3,有个问题想请教一下,请指正,谢谢;

  程序执行过程分析:

   先执行MAIN 程序----调用SBR_0子程序------发生中断后执行INT_0中断程序,接收消息-----INT_0完成后返回再执行接收程序;

请问W大侠,过程是这样吗?

   怎么程序中接收消息有两句程序,为什么呢?谢谢



,,
以下网友喜欢您的帖子:

  
至圣

经验值: 72010
发帖数: 8043
精华帖: 145
回复:说说西门子200smart modbus自由口通讯的那些事3
推荐帖


只看楼主 只看精华 楼主 5楼 2017-01-13 12:57:32
以下是引用2016JR在2017-01-13 10:22:31的发言 >

W大侠,关于200smart modbus自由口的事3,有个问题想请教一下,请指正,谢谢;

  程序执行过程分析:

   先执行MAIN 程序----调用SBR_0子程序------发生中断后执行INT_0中断程序,接收消息-----INT_0完成后返回再执行接收程序;

请问W大侠,过程是这样吗?

   怎么程序中接收消息有两句程序,为什么呢?谢谢


主程序调用初始化通讯子程序,同时启用接收指令,当接收完成后,进入接收完成中断INT_0重复执行,这样PLC接收指令中重复接收到串口调试软件发送过来的字符串了。


 
以下网友喜欢您的帖子:

  
奇侠

经验值: 7770
发帖数: 1150
精华帖: 1
回复:说说西门子200smart modbus自由口通讯的那些事3
推荐帖


只看楼主 只看精华 6楼 2017-01-13 13:49:06
以下是引用WWCWWC在2017-01-13 12:57:32的发言 >5楼

主程序调用初始化通讯子程序,同时启用接收指令,当接收完成后,进入接收完成中断INT_0重复执行,这样PLC接收指令中重复接收到串口调试软件发送过来的字符串了。

以下是引用2016JR在2017-01-13 10:22:31的发言 >:W大侠,关于200smar...

引用详细内容:

W大侠,关于200smart modbus自由口的事3,有个问题想请教一下,请指正,谢谢;

  程序执行过程分析:

   先执行MAIN 程序----调用SBR_0子程序------发生中断后执行INT_0中断程序,接收消息-----INT_0完成后返回再执行接收程序;

请问W大侠,过程是这样吗?

   怎么程序中接收消息有两句程序,为什么呢?谢谢


W大侠

  “主程序调用初始化通讯子程序,同时启用接收指令,当接收完成后,进入接收完成中断INT_0重复执行,这样PLC接收指令中重复接收到串口调试软件发送过来的字符串了。"

     您的意思是,在初始化子程序中,已经通过设置SMB87控制字已经启动接收,并且正在接收消息,在子程序中,第一个循环只要接收消息一完成,就会执行中断程序了哦。

     那么,中断程序中的RCV指令和完成中断后的往下的RCV指令只是给接收消息提供了一个存储地址,并不是从这句开始执行接收哦。

非常感谢,终于懂了,谢谢;



,,
以下网友喜欢您的帖子:

  
至圣

经验值: 72010
发帖数: 8043
精华帖: 145
回复:说说西门子200smart modbus自由口通讯的那些事3
推荐帖


只看楼主 只看精华 楼主 7楼 2017-01-14 08:09:02
以下是引用2016JR在2017-01-13 13:49:06的发言 >

W大侠

  “主程序调用初始化通讯子程序,同时启用接收指令,当接收完成后,进入接收完成中断INT_0重复执行,这样PLC接收指令中重复接收到串口调试软件发送过来的字符串了。"

     您的意思是,在初始化子程序中,已经通过设置SMB87控制字已经启动接收,并且正在接收消息,在子程序中,第一个循环只要接收消息一完成,就会执行中断程序了哦。

     那么,中断程序中的RCV指令和完成中断后的往下的RCV指令只是给接收消息提供了一个存储地址,并不是从这句开始执行接收哦。

非常感谢,终于懂了,谢谢;


很高兴让你明白其中、醉在其中、乐在其中、、、、、、


 
以下网友喜欢您的帖子:

  
侠圣

经验值: 3804
发帖数: 500
精华帖: 3
回复:说说西门子200smart modbus自由口通讯的那些事3


只看楼主 只看精华 8楼 2017-05-03 10:51:16

子程序中的RCV指令主要目的是触发中断事件23。

中断子例程中的RCV指令接受的数据覆盖V区才是确定的数据吧。


示例中中断子例程是反复执行的吧。实际使用要关中断吧。




 
以下网友喜欢您的帖子:

  
游民

经验值: 55
发帖数: 11
精华帖: 0
回复:说说西门子200smart modbus自由口通讯的那些事3


只看楼主 只看精华 9楼 2017-07-05 13:45:44
以下是引用WWCWWC在2016-11-30 11:31:20的发言 >楼主

                               说说西门子200smart modbus自由口通讯的那些事3

   上文说到发送指令XMT及串口调试软件的一些简单应用实例,其目的也是为了理解这个发送指令,熟悉这个指令的常规应用及注意事项或者说是一些特性。我理解modbus自由口通讯自开始以来就一直以打乒乓球理论来理解通讯的,球一旦发过球台中间的网接触对方球台上就需要对方来回应了。记得小时候常常在一块大门板上打球,一些年长的球友每发一个球过来,我每次只要用球拍一接触飞过来的球,这个球就不按我想的运动轨迹回过去,往往被弹飞掉。有一次,我的一个要好同学告诉了我其中的窍门,看对方发球的手势。当对方用力发一个削球过来,你可以将球拍以反方向侧板回击,一试,固然如此,就记下了这个回球的方法,现在应用到这个通讯编程上还仍然可以借鉴。

   关于接收指令RCV的应用,如果仅仅理解该指令,到是与发送指令XMT很相似,可问题的关键的如何应答(接收)是一门大的学问了,也是广大同行一直来在做探究的根源。

接收指令RCV:

TBL:指定了数据接收后存放的寄存器区域,和发送指令XMT一样,第一个数据地址存放着接收所规约的数据个数,最大接收数据个数255个。

PORT:指定接收数据的通讯口,集成的通讯口填0口,扩展的信号板填1口,这个与发送指令XMT也完全一致。

   指令调用与发送指令一致,沿触发或中断子程序中调用就可以了。

   假设,我通过串口调试软件的发送区,发送一串字符“Siemens”到200smart的RCV指令中,指令规约的字符串地址区是VB101开始的7个字节储存区,VB100存放的是接收字符的个数,采用手动发送字符串模式。通讯口参数设置SMB30=16#09

在调用接收指令前先定义好接收指令的控制字节SMB87:


启用起始符和结束符的方式:

根据需要设置SMB87控制字节:SM87.7 = 1(必须设置为1);SM87.6 = 1;SM87.5 = 1,即启用起始符(SMB88);启用结束符(SMB89);启用接收信息功能(SM87.7)。

具体设置:

1)  SMB88 = 16# 3A(起始符)可选

2)  SMB89 = 16# 0A(结束符)可选

3)  SMW94 = 255 (个数据/byte)这个是必填项目

4)  不启用信息定时器和空闲线定时器(空闲线定时器SMW90;信息定时器SMW92)

5)  开接收完成中断,中断事件号:23(port0口);(中断事件号:24(prot1口)对应)

6)  根据接收控制字节设置SMB87 = 16# E0

程序例子:

初始化接收子程序:


中断程序:


主程序:


用起始符和结束符方式的程序就编写完成了,打开串口调试软件,设置通讯参数与SMB30一致,并将要让PLC接收的以起始符开始的字符写入到串口调试软件的发送区,(3A 73 69 65 6D 65 6E 73 0A),其中,红色字体为实际“Siemens”的字符,3A、0A分别为起始符和结束符。图示:


手动点击发送按钮后,监控“状态图表”:


    串口调试软件发送的“Siemens”字符已成功地被PLC所接收到,用起始符和结束符编辑的小程序告诉我们编写接收指令RCV远比发送指令XMT要稍微复杂的多,首先需要定义接收指令的控制字节,按控制字节的要求选择用什么方式作为接收指令数据的开始和结束;其次,必须定义接收数据的个数,这个在论坛中时有看到无法接收数据的原因,是没有定义这个接收数据个数的标志字节SMB94,最后是定义中断和开中断指令与启用接收指令。

启用信息定时器和起始符的方式:

根据启用信息定时器和起始符要求,得:SMB87 = 16# CC

起始符SMB88 = 16# 3A

信息定时器设置:30mS(根据接收的字符长度计算)

其余的与启用起始符和结束符例子程序定义一致。

程序:

初始化子程序:


中断程序:


主程序调用初始化子程序:


打开串口调试软件,输入待发送的字符(3A 73 69 65 6D 65 6E 73 ),点击手动发送,监控“状态图标”,图示:


    字符信息被PLC成功接收到。连续、、、、、、


你好,我就是按照你接收指令的程序,用的STC-ISP的串口助手发送,状态表里面一直是0,发送指令都调试可以了的,应该不是硬件问题,能加个Q帮我看下吗


 
以下网友喜欢您的帖子:

  
至圣

经验值: 72010
发帖数: 8043
精华帖: 145
回复:说说西门子200smart modbus自由口通讯的那些事3


只看楼主 只看精华 楼主 10楼 2017-07-05 14:00:49
以下是引用冰封刑天在2017-07-05 13:45:44的发言 >9楼

你好,我就是按照你接收指令的程序,用的STC-ISP的串口助手发送,状态表里面一直是0,发送指令都调试可以了的,应该不是硬件问题,能加个Q帮我看下吗

以下是引用WWCWWC在2016-11-30 11:31:20的发言 >楼主:            ...

引用楼主详细内容:

                               说说西门子200smart modbus自由口通讯的那些事3

   上文说到发送指令XMT及串口调试软件的一些简单应用实例,其目的也是为了理解这个发送指令,熟悉这个指令的常规应用及注意事项或者说是一些特性。我理解modbus自由口通讯自开始以来就一直以打乒乓球理论来理解通讯的,球一旦发过球台中间的网接触对方球台上就需要对方来回应了。记得小时候常常在一块大门板上打球,一些年长的球友每发一个球过来,我每次只要用球拍一接触飞过来的球,这个球就不按我想的运动轨迹回过去,往往被弹飞掉。有一次,我的一个要好同学告诉了我其中的窍门,看对方发球的手势。当对方用力发一个削球过来,你可以将球拍以反方向侧板回击,一试,固然如此,就记下了这个回球的方法,现在应用到这个通讯编程上还仍然可以借鉴。

   关于接收指令RCV的应用,如果仅仅理解该指令,到是与发送指令XMT很相似,可问题的关键的如何应答(接收)是一门大的学问了,也是广大同行一直来在做探究的根源。

接收指令RCV:

TBL:指定了数据接收后存放的寄存器区域,和发送指令XMT一样,第一个数据地址存放着接收所规约的数据个数,最大接收数据个数255个。

PORT:指定接收数据的通讯口,集成的通讯口填0口,扩展的信号板填1口,这个与发送指令XMT也完全一致。

   指令调用与发送指令一致,沿触发或中断子程序中调用就可以了。

   假设,我通过串口调试软件的发送区,发送一串字符“Siemens”到200smart的RCV指令中,指令规约的字符串地址区是VB101开始的7个字节储存区,VB100存放的是接收字符的个数,采用手动发送字符串模式。通讯口参数设置SMB30=16#09

在调用接收指令前先定义好接收指令的控制字节SMB87:


启用起始符和结束符的方式:

根据需要设置SMB87控制字节:SM87.7 = 1(必须设置为1);SM87.6 = 1;SM87.5 = 1,即启用起始符(SMB88);启用结束符(SMB89);启用接收信息功能(SM87.7)。

具体设置:

1)  SMB88 = 16# 3A(起始符)可选

2)  SMB89 = 16# 0A(结束符)可选

3)  SMW94 = 255 (个数据/byte)这个是必填项目

4)  不启用信息定时器和空闲线定时器(空闲线定时器SMW90;信息定时器SMW92)

5)  开接收完成中断,中断事件号:23(port0口);(中断事件号:24(prot1口)对应)

6)  根据接收控制字节设置SMB87 = 16# E0

程序例子:

初始化接收子程序:


中断程序:


主程序:


用起始符和结束符方式的程序就编写完成了,打开串口调试软件,设置通讯参数与SMB30一致,并将要让PLC接收的以起始符开始的字符写入到串口调试软件的发送区,(3A 73 69 65 6D 65 6E 73 0A),其中,红色字体为实际“Siemens”的字符,3A、0A分别为起始符和结束符。图示:


手动点击发送按钮后,监控“状态图表”:


    串口调试软件发送的“Siemens”字符已成功地被PLC所接收到,用起始符和结束符编辑的小程序告诉我们编写接收指令RCV远比发送指令XMT要稍微复杂的多,首先需要定义接收指令的控制字节,按控制字节的要求选择用什么方式作为接收指令数据的开始和结束;其次,必须定义接收数据的个数,这个在论坛中时有看到无法接收数据的原因,是没有定义这个接收数据个数的标志字节SMB94,最后是定义中断和开中断指令与启用接收指令。

启用信息定时器和起始符的方式:

根据启用信息定时器和起始符要求,得:SMB87 = 16# CC

起始符SMB88 = 16# 3A

信息定时器设置:30mS(根据接收的字符长度计算)

其余的与启用起始符和结束符例子程序定义一致。

程序:

初始化子程序:


中断程序:


主程序调用初始化子程序:


打开串口调试软件,输入待发送的字符(3A 73 69 65 6D 65 6E 73 ),点击手动发送,监控“状态图标”,图示:


    字符信息被PLC成功接收到。连续、、、、、、


那你发一个接收程序我看看。


 
以下网友喜欢您的帖子:

  
游民

经验值: 55
发帖数: 11
精华帖: 0
回复:说说西门子200smart modbus自由口通讯的那些事3


只看楼主 只看精华 11楼 2017-07-05 14:16:40
以下是引用WWCWWC在2017-07-05 14:00:49的发言 >10楼

那你发一个接收程序我看看。

以下是引用冰封刑天在2017-07-05 13:45:44的发言 >9楼:你好,我就是按照你...

引用9楼详细内容:

你好,我就是按照你接收指令的程序,用的STC-ISP的串口助手发送,状态表里面一直是0,发送指令都调试可以了的,应该不是硬件问题,能加个Q帮我看下吗

以下是引用WWCWWC在2016-11-30 11:31:20的发言 >楼主:            ...

引用楼主详细内容:

                               说说西门子200smart modbus自由口通讯的那些事3

   上文说到发送指令XMT及串口调试软件的一些简单应用实例,其目的也是为了理解这个发送指令,熟悉这个指令的常规应用及注意事项或者说是一些特性。我理解modbus自由口通讯自开始以来就一直以打乒乓球理论来理解通讯的,球一旦发过球台中间的网接触对方球台上就需要对方来回应了。记得小时候常常在一块大门板上打球,一些年长的球友每发一个球过来,我每次只要用球拍一接触飞过来的球,这个球就不按我想的运动轨迹回过去,往往被弹飞掉。有一次,我的一个要好同学告诉了我其中的窍门,看对方发球的手势。当对方用力发一个削球过来,你可以将球拍以反方向侧板回击,一试,固然如此,就记下了这个回球的方法,现在应用到这个通讯编程上还仍然可以借鉴。

   关于接收指令RCV的应用,如果仅仅理解该指令,到是与发送指令XMT很相似,可问题的关键的如何应答(接收)是一门大的学问了,也是广大同行一直来在做探究的根源。

接收指令RCV:

TBL:指定了数据接收后存放的寄存器区域,和发送指令XMT一样,第一个数据地址存放着接收所规约的数据个数,最大接收数据个数255个。

PORT:指定接收数据的通讯口,集成的通讯口填0口,扩展的信号板填1口,这个与发送指令XMT也完全一致。

   指令调用与发送指令一致,沿触发或中断子程序中调用就可以了。

   假设,我通过串口调试软件的发送区,发送一串字符“Siemens”到200smart的RCV指令中,指令规约的字符串地址区是VB101开始的7个字节储存区,VB100存放的是接收字符的个数,采用手动发送字符串模式。通讯口参数设置SMB30=16#09

在调用接收指令前先定义好接收指令的控制字节SMB87:


启用起始符和结束符的方式:

根据需要设置SMB87控制字节:SM87.7 = 1(必须设置为1);SM87.6 = 1;SM87.5 = 1,即启用起始符(SMB88);启用结束符(SMB89);启用接收信息功能(SM87.7)。

具体设置:

1)  SMB88 = 16# 3A(起始符)可选

2)  SMB89 = 16# 0A(结束符)可选

3)  SMW94 = 255 (个数据/byte)这个是必填项目

4)  不启用信息定时器和空闲线定时器(空闲线定时器SMW90;信息定时器SMW92)

5)  开接收完成中断,中断事件号:23(port0口);(中断事件号:24(prot1口)对应)

6)  根据接收控制字节设置SMB87 = 16# E0

程序例子:

初始化接收子程序:


中断程序:


主程序:


用起始符和结束符方式的程序就编写完成了,打开串口调试软件,设置通讯参数与SMB30一致,并将要让PLC接收的以起始符开始的字符写入到串口调试软件的发送区,(3A 73 69 65 6D 65 6E 73 0A),其中,红色字体为实际“Siemens”的字符,3A、0A分别为起始符和结束符。图示:


手动点击发送按钮后,监控“状态图表”:


    串口调试软件发送的“Siemens”字符已成功地被PLC所接收到,用起始符和结束符编辑的小程序告诉我们编写接收指令RCV远比发送指令XMT要稍微复杂的多,首先需要定义接收指令的控制字节,按控制字节的要求选择用什么方式作为接收指令数据的开始和结束;其次,必须定义接收数据的个数,这个在论坛中时有看到无法接收数据的原因,是没有定义这个接收数据个数的标志字节SMB94,最后是定义中断和开中断指令与启用接收指令。

启用信息定时器和起始符的方式:

根据启用信息定时器和起始符要求,得:SMB87 = 16# CC

起始符SMB88 = 16# 3A

信息定时器设置:30mS(根据接收的字符长度计算)

其余的与启用起始符和结束符例子程序定义一致。

程序:

初始化子程序:


中断程序:


主程序调用初始化子程序:


打开串口调试软件,输入待发送的字符(3A 73 69 65 6D 65 6E 73 ),点击手动发送,监控“状态图标”,图示:


    字符信息被PLC成功接收到。连续、、、、、、


1.png

你好


 
以下网友喜欢您的帖子:

  
至圣

经验值: 72010
发帖数: 8043
精华帖: 145
回复:说说西门子200smart modbus自由口通讯的那些事3


只看楼主 只看精华 楼主 12楼 2017-07-05 14:49:39
以下是引用冰封刑天在2017-07-05 14:16:40的发言 >11楼

1.png

你好

以下是引用WWCWWC在2017-07-05 14:00:49的发言 >10楼:那你发一个接收程序...

引用10楼详细内容:

那你发一个接收程序我看看。

以下是引用冰封刑天在2017-07-05 13:45:44的发言 >9楼:你好,我就是按照你...

引用9楼详细内容:

你好,我就是按照你接收指令的程序,用的STC-ISP的串口助手发送,状态表里面一直是0,发送指令都调试可以了的,应该不是硬件问题,能加个Q帮我看下吗

以下是引用WWCWWC在2016-11-30 11:31:20的发言 >楼主:           ...

引用楼主详细内容:

                               说说西门子200smart modbus自由口通讯的那些事3

   上文说到发送指令XMT及串口调试软件的一些简单应用实例,其目的也是为了理解这个发送指令,熟悉这个指令的常规应用及注意事项或者说是一些特性。我理解modbus自由口通讯自开始以来就一直以打乒乓球理论来理解通讯的,球一旦发过球台中间的网接触对方球台上就需要对方来回应了。记得小时候常常在一块大门板上打球,一些年长的球友每发一个球过来,我每次只要用球拍一接触飞过来的球,这个球就不按我想的运动轨迹回过去,往往被弹飞掉。有一次,我的一个要好同学告诉了我其中的窍门,看对方发球的手势。当对方用力发一个削球过来,你可以将球拍以反方向侧板回击,一试,固然如此,就记下了这个回球的方法,现在应用到这个通讯编程上还仍然可以借鉴。

   关于接收指令RCV的应用,如果仅仅理解该指令,到是与发送指令XMT很相似,可问题的关键的如何应答(接收)是一门大的学问了,也是广大同行一直来在做探究的根源。

接收指令RCV:

TBL:指定了数据接收后存放的寄存器区域,和发送指令XMT一样,第一个数据地址存放着接收所规约的数据个数,最大接收数据个数255个。

PORT:指定接收数据的通讯口,集成的通讯口填0口,扩展的信号板填1口,这个与发送指令XMT也完全一致。

   指令调用与发送指令一致,沿触发或中断子程序中调用就可以了。

   假设,我通过串口调试软件的发送区,发送一串字符“Siemens”到200smart的RCV指令中,指令规约的字符串地址区是VB101开始的7个字节储存区,VB100存放的是接收字符的个数,采用手动发送字符串模式。通讯口参数设置SMB30=16#09

在调用接收指令前先定义好接收指令的控制字节SMB87:


启用起始符和结束符的方式:

根据需要设置SMB87控制字节:SM87.7 = 1(必须设置为1);SM87.6 = 1;SM87.5 = 1,即启用起始符(SMB88);启用结束符(SMB89);启用接收信息功能(SM87.7)。

具体设置:

1)  SMB88 = 16# 3A(起始符)可选

2)  SMB89 = 16# 0A(结束符)可选

3)  SMW94 = 255 (个数据/byte)这个是必填项目

4)  不启用信息定时器和空闲线定时器(空闲线定时器SMW90;信息定时器SMW92)

5)  开接收完成中断,中断事件号:23(port0口);(中断事件号:24(prot1口)对应)

6)  根据接收控制字节设置SMB87 = 16# E0

程序例子:

初始化接收子程序:


中断程序:


主程序:


用起始符和结束符方式的程序就编写完成了,打开串口调试软件,设置通讯参数与SMB30一致,并将要让PLC接收的以起始符开始的字符写入到串口调试软件的发送区,(3A 73 69 65 6D 65 6E 73 0A),其中,红色字体为实际“Siemens”的字符,3A、0A分别为起始符和结束符。图示:


手动点击发送按钮后,监控“状态图表”:


    串口调试软件发送的“Siemens”字符已成功地被PLC所接收到,用起始符和结束符编辑的小程序告诉我们编写接收指令RCV远比发送指令XMT要稍微复杂的多,首先需要定义接收指令的控制字节,按控制字节的要求选择用什么方式作为接收指令数据的开始和结束;其次,必须定义接收数据的个数,这个在论坛中时有看到无法接收数据的原因,是没有定义这个接收数据个数的标志字节SMB94,最后是定义中断和开中断指令与启用接收指令。

启用信息定时器和起始符的方式:

根据启用信息定时器和起始符要求,得:SMB87 = 16# CC

起始符SMB88 = 16# 3A

信息定时器设置:30mS(根据接收的字符长度计算)

其余的与启用起始符和结束符例子程序定义一致。

程序:

初始化子程序:


中断程序:


主程序调用初始化子程序:


打开串口调试软件,输入待发送的字符(3A 73 69 65 6D 65 6E 73 ),点击手动发送,监控“状态图标”,图示:


    字符信息被PLC成功接收到。连续、、、、、、


大致看了一下你的程序,应该没有问题的。因为手头没有硬件无法测试你的程序,等有硬件我测试一下。

另外,请问你串口发送信息里包含有信息的起始和结束符?

就是3A和0A这2个信息。


 
以下网友喜欢您的帖子:

  
游民

经验值: 55
发帖数: 11
精华帖: 0
回复:说说西门子200smart modbus自由口通讯的那些事3


只看楼主 只看精华 13楼 2017-07-05 14:58:21

W大侠:

   这个程序就是你这篇文章的程序,我用串口助手有发那两个字节数据的,可以加下我Q吗,最近这个接收调了几天了,有点急~我QQ:282311568


 
以下网友喜欢您的帖子:

  
至圣

经验值: 72010
发帖数: 8043
精华帖: 145
回复:说说西门子200smart modbus自由口通讯的那些事3


只看楼主 只看精华 楼主 14楼 2017-07-05 15:02:23

你现在方便QQ?


 
以下网友喜欢您的帖子:

  
侠圣

经验值: 3246
发帖数: 460
精华帖: 0
回复:说说西门子200smart modbus自由口通讯的那些事3


只看楼主 只看精华 15楼 2017-07-24 12:03:50

我是用MODBUS模拟主站软件调试的,开始还是正常的,但是30--40分钟红颜提示通讯超时,软件因素基本排除了。

我的硬件是PLC----DP接头----485转232-----232转USB----模拟主站。我把485转232、232转USB逐一更换了;DP接头是我仿造的,根据文档测量针脚电阻没有问题;AB电压一直保持1.12。

我想怎么能找到根源,PLC端口怎么判断是否完好。


不退 不降 不悔
以下网友喜欢您的帖子:

  
侠客

经验值: 799
发帖数: 31
精华帖: 0
回复:说说西门子200smart modbus自由口通讯的那些事3


只看楼主 只看精华 16楼 2017-08-17 13:08:56

 W侠,第一个子程序中的触发条件SM0.1是否要改为SM0.0.


态度决定成就。
以下网友喜欢您的帖子:

  
奇侠

经验值: 5577
发帖数: 300
精华帖: 0
回复:说说西门子200smart modbus自由口通讯的那些事3


只看楼主 只看精华 17楼 2017-08-17 13:33:56


 不错先收藏了。


 
以下网友喜欢您的帖子:

  
至圣

经验值: 72010
发帖数: 8043
精华帖: 145
回复:说说西门子200smart modbus自由口通讯的那些事3


只看楼主 只看精华 楼主 18楼 2017-08-19 11:35:28
以下是引用苏溪在2017-08-17 13:08:56的发言 >16楼

 W侠,第一个子程序中的触发条件SM0.1是否要改为SM0.0.

原理是一致的。

用SM0.0编辑,再后用SM0.1调用或者用SM0.1编辑,再后用SM0.0调用原理是一致的,目的就是调用一次通讯的初始化。


 
以下网友喜欢您的帖子:

  
  • 上一页
  • 1
  • 下一页
收起
说说西门子200smart modbus自由口通讯的那些事3
您收到0封站内信:
×
×
信息提示
很抱歉!您所访问的页面不存在,或网址发生了变化,请稍后再试。