技术论坛

1500连接阿里云物联网平台成功

作者 主题
至圣

经验值: 19062
发帖数: 8894
精华帖: 39
主题:【分享】1500连接阿里云物联网平台成功
精华帖精华帖星级5级 推荐帖


只看楼主 只看精华 楼主 2020-05-16 15:22:45

物联网、万物互联不是很潮的一个概念嘛,看到了阿里云的物联网平台,在西门子这边也看到了MQTT Client库,就想着把 PLC 直接连接到阿里云的物联网平台,经过几天测试,终于成功

西门子的 mqtt client 库

发布消息


平台接收到消息



具体过程后续再慢慢发。


参考了三个文档,一个是阿里云的 通过MQTT.FX客户端连接阿里云物联网平台,一个是西门子LMQTT的手册,还有就是mqtt协议


使用MQTT.fx接入物联网平台

FB "LMQTT_Client" for SIMATIC S7-CPU

mqtt协议很早之前就下载打印好了的,链接就不发了,自己也容易找


上述测试是在PLCSIM ADVANCED上完成


 
精华帖版主置评: 非常好的分享。赞一个 -yming
以下网友喜欢您的帖子:

  
重要声明:

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

帖子链接:http://www.ad.siemens.com.cn/club/bbs/post.aspx?a_id=1623906&b_id=66

至圣

经验值: 77841
发帖数: 17104
精华帖: 594
回复:1500连接阿里云物联网平台成功
推荐帖


只看楼主 只看精华 1楼 2020-05-16 15:41:39

搬把椅子,坐等下文


 
以下网友喜欢您的帖子:

  
至圣

经验值: 19062
发帖数: 8894
精华帖: 39
回复:1500连接阿里云物联网平台成功
推荐帖


只看楼主 只看精华 楼主 2楼 2020-05-16 15:59:54

今天先发一下阿里云平台的设置

首先创建一个产品,我的就叫 S7-1500,品类选自定义,节点类型选直连设备,联网方式选以太网,数据格式选透传/自定义,认证方式选设备密钥。

我们的PLC几本书网关,也不是网关下的子设备,所以选直连设备

联网方式没啥好说的,通过CPU自带的网口出来,所以选以太网

数据格式选透传,如果选标准格式也不是不行,这样PLC组织数据的工作量会比较大,要把数组转换成字符串,然后以json格式发送出去,而这部分工作PLC又不是强项

认证方式选择 设备密钥,有三种方式,ID2需要购买,我测试就用不着了,X.509需要涉及到证书啥的,没研究过,之后再说

然后保存,产品就创建好了。


然后就是在产品之下添加一个设备

设备是属于产品的,如果之前创建了不止一个产品,添加设备的时候需要选择添加到哪个产品下面

我在S7-1500的产品下面添加了一个设备叫 PLC1



这就是我添加的设备


注意红圈中的内容,这是认证设备要用到的信息,阿里叫他 三元组,信息需要保密,特别是其中的 DeviceSecret,不能外泄,否则别人可以冒充你的设备联网了。

然后是Topic列表,之后我们订阅/发布消息需要用到,只能发布/订阅列表内的主题,我们测试只用其预定义好的就可以了

阿里云这边的设置基本就是这些了



 
以下网友喜欢您的帖子:

  
奇侠

经验值: 8898
发帖数: 1160
精华帖: 0
回复:1500连接阿里云物联网平台成功
推荐帖


只看楼主 只看精华 3楼 2020-05-16 16:09:51

终于上云了!学习


 
以下网友喜欢您的帖子:

  
至圣

经验值: 19062
发帖数: 8894
精华帖: 39
回复:1500连接阿里云物联网平台成功
推荐帖


只看楼主 只看精华 楼主 4楼 2020-05-16 16:30:09
以下是引用yming在2020-05-16 15:41:39的发言 >

搬把椅子,坐等下文

接下去就是连接测试了。

就像之前调试串口通讯一样,让我PLC和一个串口设备通讯,我会先用PC上的串口调试工具连接串口设备,根据通讯协议发送通讯指令,查看设备的响应情况,看看自己对协议的理解是否正确。

因为LMQTT client这个块我没有用过,到时候连吧不上,到底问题出在哪不好定位,到底是库的问题呢还是我的参数设置的问题呢,所以,我也找了一个,阿里云的文档示例用的是MQTT.FX,我用的是MQTTBOX,都差不多,设置的参数都是那几个。

我i把几个参数先列个表


broker address 服务器/代理 域名

broker port 服务器/代理 端口

clientid

username

password


除了端口号,TCP直连用的是1883外,其他几个参数都是和创建的设备的三元组相关的


broker address       ${YourProductKey}.iot-as-mqtt.${region}.aliyuncs.com

Client ID           ${clientId}|securemode=3,signmethod=hmacsha1|

username          ${YourDeviceName}&${YourPrductKey}

password  这个比较麻烦,参考文档中有一个生成密码的小工具,通过那个工具生成,实际上还是和三元组相关,是根据三元组以及上面的一些信息做HMAC运算得到的。

上面的 ${} 是一个占位符,用实际的数值替换,比如三元组中的productkey,devicename等,其中的 ${region} 目前只有 cn-shanghai


这些参数之后用PLC连接平台都是需要用到的,先用PC上的MQTT client测试,看看能不能连上平台,如果可以,说明这些参数是正确的,如果不行,那就要查查看到底哪里出错了,特别是生成password的时候,多一个空格,或者大小写错误,生成的密码都是不一样的。

下面是我的mqttbox中client的设置

需要注意的是阿里云要求cleansession必须设置为1,keeplive时间不能设置过短,建议300s,否则会拒绝连接的

如果这里能连上平台,那么说明这些参数都没有问题了,接下去就可以进行PLC 编程了



 
以下网友喜欢您的帖子:

  
游侠

经验值: 514
发帖数: 71
精华帖: 0
回复:1500连接阿里云物联网平台成功
推荐帖


只看楼主 只看精华 5楼 2020-05-16 16:58:23

连接上云,高大上


靡不有初,鲜克有终!
以下网友喜欢您的帖子:

  
至圣

经验值: 11876
发帖数: 862
精华帖: 1
回复:1500连接阿里云物联网平台成功
推荐帖


只看楼主 只看精华 6楼 2020-05-16 18:27:55

古人云
和现在的云
肯定是不一样的云

他类似筋斗云


 
以下网友喜欢您的帖子:

  
至圣

经验值: 19062
发帖数: 8894
精华帖: 39
回复:1500连接阿里云物联网平台成功
推荐帖


只看楼主 只看精华 楼主 7楼 2020-05-16 19:30:18

继续。

接下去就是1500的编程了

我没有1500CPU实体,所以测试是通过PLCSIM ADVANCED进行的。想要连接阿里云,就是要访问外网,那么PLCSIM ADVANCED的设置也是要有讲究的,online access 必须选择 virtual eth. adapter,然后下面是通过以太网而不是内部总线 local。切换online access 要没有实例在运行才可以。

接下去就是下载LMQTT库,地址在主贴中有,下载后在项目文件中打开库,把库程序拉的自己的块中进行调用。会自动添加一个FB和几个数据类型


很良心的是,这个FB是开源的,没有加密,可以自由修改。

数据类型中,第一个用于设置连接标志,第二个用于设置mqtt connect的参数,第三个是用于发布的,第四个是用于订阅的,第五个是用于接收订阅的数据的,第六个是用于设置tcp连接的属性的,比如服务器地址,端口号PLC用的哪个接口、连接ID等等

调用库


建一个数据块,保存用到的参数,除了第一个数据类型,其他的每个类型的建一个,因为第一个包含在了第二个中。

enable参数是一个bool类型,1连接服务器,0 断开连接

publishdata参数用于发布主题,subscribetoTopic用于订阅主题,这两个以后再说,测试连接的时候还用不上,tcpConnParam设置连接属性,mqttParam设置mqtt的连接属性,这两个参数要设置正确才能连接的上服务器



先说tcpConnParam

第一个参数 usdQdn,应该设置为1,因为我们要访问的是阿里云的服务器,只能通过域名访问,而不能通过ip地址

第二个参数hwidentifier,网口的设备标识符,新版本的cpu设置为0可以默认使用第一个网口,也可以在组态中查看指定端口的标识符,在这里填入,比如1511cpu上的网口的标识符就是64

connectionID。连接ID,这个做过西门子的网络通讯的都知道,每个连接唯一

qdnAddressBroker 这就是阿里云平台提供的地址,根据如下规则,由productkey和区域代码组成,

格式如下

{productkey}.iot-as-mqtt.cn-shanghai.aliyuncs.com,其中{productkey}用自己的productkey替代

因为使用qdn,所以ipAddressBroker不需要设置

localport 不需要设置,默认0就好了,client不需要指定端口号

mqttPort 设置为1883,mqtt TCP直连时使用的端口号

接下去4个参数不设置,用到安全连接的时候需要,目前只用TCP直连


接下去是mqttParam的参数设置

connectflag

根据阿里云的要求cleanSession必须设置为1,will和willRetain必须设置为0,忘了对connect的qos的要求了,也设置为0.因为连接阿里云是要登录的,所以将username和password设置为1

keepAlive 不能小于30,阿里推荐是300

clientidentifier 这个参数有一点点麻烦,根据mqtt协议,这个字段的长度是23个字节以下,但也允许超过这个长度,而阿里云的设置是远超过23字节的,而西门子的mqtt库设计的时候指定了数据类型是string[23],我们需要把这个给改了。因为这个是从库中拉出来的,需要更新库并重新发布才可以。这是我对库的第一处修改

willtopic和willmessage留空

username和password根据第一个参考连接生成。

总体框架搭好,就这样,就可以进行测试了



 
以下网友喜欢您的帖子:

  
奇侠

经验值: 7486
发帖数: 552
精华帖: 5
回复:1500连接阿里云物联网平台成功
推荐帖


只看楼主 只看精华 8楼 2020-05-16 20:04:58

膜拜大神,请问咱连上云以后,都能做些什么呢?


工控生活、精彩人生
以下网友喜欢您的帖子:

  
至圣

经验值: 77841
发帖数: 17104
精华帖: 594
回复:1500连接阿里云物联网平台成功
推荐帖


只看楼主 只看精华 9楼 2020-05-16 21:38:54
以下是引用liucs_2009在2020-05-16 20:04:58的发言 >8楼

膜拜大神,请问咱连上云以后,都能做些什么呢?

连接“云”可以有不同的目的。

1、数据存储。这些数据可以由被授权的访问者远程访问。云存储的保管由专业服务器保存,不容易丢失。

2、有些大型分析软件,我们实际上买不起,但该软件利用率又不高。如果该软件是在云中运行(云计算),那么我们只需要提供现场数据(例如每小时/每天一次)就可以廉价使用软件,提高效益。

3、是可以通过VPN从远程连接内部局域网,但通常并不需要那么完全访问,单独开发移动APP访问也费用过高。这时利用云服务,是可以通过授权终端、手机APP访问云数据。

4、对于我们所用的控制器(PLC等)还可以做到 “云同步“;不同地点的生产线控制器协调工作,避免资源浪费。




 
以下网友喜欢您的帖子:

  
游侠

经验值: 436
发帖数: 56
精华帖: 0
回复:1500连接阿里云物联网平台成功
推荐帖


只看楼主 只看精华 10楼 2020-05-17 15:22:03

厉害了,学习了


 
以下网友喜欢您的帖子:

  
至圣

经验值: 10408
发帖数: 1606
精华帖: 0
回复:1500连接阿里云物联网平台成功
推荐帖


只看楼主 只看精华 11楼 2020-05-18 08:52:10

感谢分享。


邮箱 yongquancun@126.com
以下网友喜欢您的帖子:

  
侠圣

经验值: 4432
发帖数: 762
精华帖: 0
回复:1500连接阿里云物联网平台成功
推荐帖


只看楼主 只看精华 12楼 2020-05-18 09:03:10

学习了,这是以后得发展趋势啊!



心有多远路就有多远
以下网友喜欢您的帖子:

  
奇侠

经验值: 7486
发帖数: 552
精华帖: 5
回复:1500连接阿里云物联网平台成功


只看楼主 只看精华 13楼 2020-05-18 09:48:07
以下是引用yming在2020-05-16 21:38:54的发言 >9楼

连接“云”可以有不同的目的。

1、数据存储。这些数据可以由被授权的访问者远程访问。云存储的保管由专业服务器保存,不容易丢失。

2、有些大型分析软件,我们实际上买不起,但该软件利用率又不高。如果该软件是在云中运行(云计算),那么我们只需要提供现场数据(例如每小时/每天一次)就可以廉价使用软件,提高效益。

3、是可以通过VPN从远程连接内部局域网,但通常并不需要那么完全访问,单独开发移动APP访问也费用过高。这时利用云服务,是可以通过授权终端、手机APP访问云数据。

4、对于我们所用的控制器(PLC等)还可以做到 “云同步“;不同地点的生产线控制器协调工作,避免资源浪费。



以下是引用liucs_2009在2020-05-16 20:04:58的发言 >8楼:膜拜大神,请问咱连...

引用8楼详细内容:

膜拜大神,请问咱连上云以后,都能做些什么呢?

Y版紧跟时代步伐,真是我们后辈们学习的榜样。


工控生活、精彩人生
以下网友喜欢您的帖子:

  
至圣

经验值: 19062
发帖数: 8894
精华帖: 39
回复:1500连接阿里云物联网平台成功
推荐帖


只看楼主 只看精华 楼主 14楼 2020-05-18 11:21:44

下面继续

LMQTT库的使用碰到一个小坑,enable置为1,建立连接的时候,status一直报16#0000_8089错误,statusID 为2,查看库的源程序,statusID对应的是出现错误时 #statStateTcpMachine 的状态,而2对应的是TCP_CONNECTING,那就去查TCON的错误代码吧,8089对应的错误是 “参数 CONNECT 未指向连接描述,或者连接描述是手动创建的。” 或者是 “CONNECT 参数没有指向某个数据块。”

 在库的静态变量中找类型为TCON的变量,找到了 “instTcpConnect”,然后搜索程序,程序中有两处 调用,代码是一样的,就是根据  #tcpConnParam.useQdn ,判断是使用域名还是使用IP地址,调用使用不同的参数调用instTcpConnect,我的程序是根据域名调用的,那我就在全局数据块中新建了一个TCON_QDN的变量,然后 instTcpConnect 之间用这个变量作为参数调用


把两处都这么修改。下载程序,再次测试,连接成功



 
以下网友喜欢您的帖子:

  
至圣

经验值: 19062
发帖数: 8894
精华帖: 39
回复:1500连接阿里云物联网平台成功
推荐帖


只看楼主 只看精华 楼主 15楼 2020-05-18 11:35:11

再接下去就是测试发布消息了

先回到阿里云,看看当前设备的topic列表,有哪些是具有发布权限的topic,就在自定义topic中找了一个,复制topic名字,填到之前在全局数据块中建立的 "LMQTT_typePublishData" 类型的变量的 publishTopic 字段中,然后将要发布的topic内容填入到 publishMessageData 字段中,publishQoS 保持为0,publishRetainFlag也保持为false,阿里云不支持qos = 2,也不支持publishRetain。然后给 publishMessage一个上升沿,topic就发布出去了,回到阿里云,在日志中就可以看到刚刚发布的topic了。

订阅没有测试,能够发布,订阅应该也没有问题的。






 
以下网友喜欢您的帖子:

  
至圣

经验值: 19062
发帖数: 8894
精华帖: 39
回复:1500连接阿里云物联网平台成功
推荐帖


只看楼主 只看精华 楼主 16楼 2020-05-18 12:38:25

后续计划:

1、目前阿里云的登录信息是通过阿里云提供的工具计算出来的,准备部分工作在PLC中完成,那样的话,只需要将三元组信息保存到PLC,PLC就可以自己计算出登录域名、用户名、密码和clientID。其他几项都简单,字符串拼接就可以了,密码需要用到HMAC-SHA1加密算法,这步其实已经完成,算法已经在PLCSIM中模拟测试完成,加载到这个程序中就可以了

2、将TCP直连改为TLS加密连接


 
以下网友喜欢您的帖子:

  
侠客

经验值: 691
发帖数: 72
精华帖: 0
回复:1500连接阿里云物联网平台成功


只看楼主 只看精华 17楼 2020-05-18 13:38:40
学习了,感谢分享
 
以下网友喜欢您的帖子:

  
游侠

经验值: 384
发帖数: 18
精华帖: 0
回复:1500连接阿里云物联网平台成功


只看楼主 只看精华 18楼 2020-05-18 13:52:43

楼主太厉害了,像楼主学习


 
以下网友喜欢您的帖子:

  
侠圣

经验值: 2924
发帖数: 618
精华帖: 0
回复:1500连接阿里云物联网平台成功


只看楼主 只看精华 19楼 2020-05-18 15:01:48
厉害,谢谢楼主分享,学习了。
 
以下网友喜欢您的帖子:

  
  • 上一页
  • 1
  • 下一页
×
扫描打开手机版
您收到0封站内信:
×
×
信息提示
很抱歉!您所访问的页面不存在,或网址发生了变化,请稍后再试。