技术论坛

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

返回主题列表
作者 主题
shine
至圣

经验值: 19840
发帖数: 8834
精华帖: 39
楼主    2020-05-16 15:22:45
主题:1500连接阿里云物联网平台成功 精华帖 

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

西门子的 mqtt client 库

发布消息


平台接收到消息



具体过程后续再慢慢发。


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


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

FB "LMQTT_Client" for SIMATIC S7-CPU

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


上述测试是在PLCSIM ADVANCED上完成

yming
至圣

经验值: 127407
发帖数: 22015
精华帖: 824
1楼    2020-05-16 15:41:39
主题:回复:1500连接阿里云物联网平台成功

搬把椅子,坐等下文

学而时习之,不亦说乎?温故而知新,不亦乐乎?
shine
至圣

经验值: 19840
发帖数: 8834
精华帖: 39
2楼    2020-05-16 15:59:54
主题:回复:1500连接阿里云物联网平台成功

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

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

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

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

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

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

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


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

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

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



这就是我添加的设备


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

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

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


黑猫警长W
至圣

经验值: 18429
发帖数: 2411
精华帖: 1
3楼    2020-05-16 16:09:51
主题:回复:1500连接阿里云物联网平台成功

终于上云了!学习

shine
至圣

经验值: 19840
发帖数: 8834
精华帖: 39
4楼    2020-05-16 16:30:09
主题:回复:1500连接阿里云物联网平台成功

接下去就是连接测试了。

就像之前调试串口通讯一样,让我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 编程了


SonetSDH
侠士

经验值: 1487
发帖数: 210
精华帖: 0
5楼    2020-05-16 16:58:23
主题:回复:1500连接阿里云物联网平台成功

连接上云,高大上

靡不有初,鲜克有终。
CoolCool的猪
至圣

经验值: 16729
发帖数: 1309
精华帖: 2
6楼    2020-05-16 18:27:55
主题:回复:1500连接阿里云物联网平台成功

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

他类似筋斗云

同一个问题ID下,已经先回答此问题的人,如再参考我答案而修改自己答案的,就是王八蛋!
shine
至圣

经验值: 19840
发帖数: 8834
精华帖: 39
7楼    2020-05-16 19:30:18
主题:回复:1500连接阿里云物联网平台成功

继续。

接下去就是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根据第一个参考连接生成。

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


liucs_2009
奇侠

经验值: 8360
发帖数: 580
精华帖: 5
8楼    2020-05-16 20:04:58
主题:回复:1500连接阿里云物联网平台成功

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

工控生活、精彩人生
yming
至圣

经验值: 127407
发帖数: 22015
精华帖: 824
9楼    2020-05-16 21:38:54
主题:回复:1500连接阿里云物联网平台成功

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

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

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

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

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



学而时习之,不亦说乎?温故而知新,不亦乐乎?
XCM小明
侠士

经验值: 1255
发帖数: 86
精华帖: 0
10楼    2020-05-17 15:22:03
主题:回复:1500连接阿里云物联网平台成功

厉害了,学习了

一直被模仿,从未被超越
不断攀登
至圣

经验值: 12543
发帖数: 1843
精华帖: 0
11楼    2020-05-18 08:52:10
主题:回复:1500连接阿里云物联网平台成功

感谢分享。

邮箱 yongquancun@126.com
笨笨笨笨
奇侠

经验值: 7141
发帖数: 1022
精华帖: 2
12楼    2020-05-18 09:03:10
主题:回复:1500连接阿里云物联网平台成功

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


心有多远路就有多远
liucs_2009
奇侠

经验值: 8360
发帖数: 580
精华帖: 5
13楼    2020-05-18 09:48:07
主题:回复:1500连接阿里云物联网平台成功

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

工控生活、精彩人生
shine
至圣

经验值: 19840
发帖数: 8834
精华帖: 39
14楼    2020-05-18 11:21:44
主题:回复:1500连接阿里云物联网平台成功

下面继续

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 之间用这个变量作为参数调用


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


shine
至圣

经验值: 19840
发帖数: 8834
精华帖: 39
15楼    2020-05-18 11:35:11
主题:回复:1500连接阿里云物联网平台成功

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

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

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





shine
至圣

经验值: 19840
发帖数: 8834
精华帖: 39
16楼    2020-05-18 12:38:25
主题:回复:1500连接阿里云物联网平台成功

后续计划:

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

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

哈哈嘿
侠士

经验值: 1496
发帖数: 112
精华帖: 0
17楼    2020-05-18 13:38:40
主题:回复:1500连接阿里云物联网平台成功
学习了,感谢分享
kirk27
侠士

经验值: 1020
发帖数: 35
精华帖: 0
18楼    2020-05-18 13:52:43
主题:回复:1500连接阿里云物联网平台成功

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

WOWUWUWU
至圣

经验值: 10590
发帖数: 1796
精华帖: 0
19楼    2020-05-18 15:01:48
主题:回复:1500连接阿里云物联网平台成功
厉害,谢谢楼主分享,学习了。
guozs1990
侠客

经验值: 970
发帖数: 140
精华帖: 1
20楼    2020-05-18 20:22:39
主题:回复:1500连接阿里云物联网平台成功

感谢楼主无私分享

但行好事,莫问前程
slide
侠圣

经验值: 2947
发帖数: 347
精华帖: 0
21楼    2020-05-19 08:45:07
主题:回复:1500连接阿里云物联网平台成功

主要是阿里云要花钱啊,就算一个学生版的云服务器也得一年98,能买三斤猪肉呢,其实在云上装个EMQ啥的MQTT服务器,用NODE-RED练一下也可以玩耍的。用树莓派联云也行。

TIA
holdkcsxyz
至圣

经验值: 13037
发帖数: 1815
精华帖: 22
22楼    2020-05-19 09:37:11
主题:回复:1500连接阿里云物联网平台成功

        不错,感谢分享,OUC通讯对于实时要求一般的场合够用了。PLC产品的TCP通讯传输控制信息居多,对于TCP_FTP等文件传输的支持还是不太够(在很多项目中有用到FTP的需求),不过这也是PLC的应用领域决定的(内存以及对文件的处理都有限制)。

shine
至圣

经验值: 19840
发帖数: 8834
精华帖: 39
23楼    2020-05-19 09:45:07
主题:回复:1500连接阿里云物联网平台成功

物联网可以不租用服务器的实例,按消息数和在线时长收费,计费单位都是百万条消息和百万分钟1块多钱,且向下取整,做测试的话,根本达不到计费的最低限

linweic
游士

经验值: 176
发帖数: 19
精华帖: 0
25楼    2020-05-19 14:45:11
主题:回复:1500连接阿里云物联网平台成功

刚好目前接触到第三方的网关上传plc数据到云端,目前使用过200smart的DI,DQ,V,M区,模拟量输入输出暂时没测成功。

shine
至圣

经验值: 19840
发帖数: 8834
精华帖: 39
26楼    2020-05-19 15:11:53
主题:回复:1500连接阿里云物联网平台成功

既然V区没有问题,那就把模拟量读到V区就好了啊

linweic
游士

经验值: 176
发帖数: 19
精华帖: 0
27楼    2020-05-19 15:56:20
主题:回复:1500连接阿里云物联网平台成功

哈哈,是的,要求自控厂家给我预留v区的接口了。

zhouli
游民

经验值: 117
发帖数: 4
精华帖: 0
28楼    2020-05-21 00:18:44
主题:回复:1500连接阿里云物联网平台成功

能加QQ联系下,QQ:398747819.最近手头有个项目也是1500要连接到阿里云的,能否指导下?

Ready_OK
至圣

经验值: 15547
发帖数: 1740
精华帖: 0
29楼    2020-05-21 08:21:33
主题:回复:1500连接阿里云物联网平台成功

感谢楼主无私分享!

海纳百川,厚德务实!
www123456
至圣

经验值: 12240
发帖数: 2431
精华帖: 86
44楼    2020-06-16 19:26:53
主题:回复:1500连接阿里云物联网平台成功
1500利用MQTT库实现云服务器发布,还支持域名访问,省去了网关模块,是低成本访问云服务器的一种方式,性价比很高。
您收到0封站内信:
×
×
信息提示
很抱歉!您所访问的页面不存在,或网址发生了变化,请稍后再试。