德国制造: 现货 联 系 人: 夏依明《夏工》 24小时联系手机: 137 613 887 49(微信同号) 全新原装: 参数 质量保证: 保修 电 话: 021-6131 1931 在 线 商 务 QQ: 742 729 986 价格优势: 特价 公司库存大量S7-200-300-400-1200-1500,电缆 高效工程组态成就高效自动化 绘芯人机界面与单片机通讯 单片机与绘芯人机界面通信有两个方案:一是用modbus—rtu协议,二是自由通讯协议; 本实例采用武汉绘芯科技有限公司的人机界面作为参考,因为公司提供一系列的技术支持和公布单片机源代码,开发工程方便有效。 公司网站: 方案比较: 方案一 modbus—rtu协议: 优点:工业标准通讯协议,具有通用性,,传输数据量大 缺点:需要时间去了解协议的格式和以及按照规定编写通讯程序(我们提供MODBUS-RTU源代码,客户直接移植就可以,不必费心) 方案二 自由协议: 优点:数据格式客户自己定义,灵活多变,定制性强,可以模拟任何已知报文的通讯协议 缺点:传输数据量不大,通用性不强,移植不方便 客户可以根据以上两种通讯协议的优缺点来选择理想的方案; 实现方法: 方案一: 1. 工程属性选用MODBUS-RTU协议; 2. 先了解MODBUS-RTU协议,基本的01 03 05 06 16 的功能码需要了解,其他可以不去深究;提供相关的资料 3. 使用我们提供的MODBUS-RTU协议(C语言)开发源代码,把主要的01 03 05 06 16 函数移植到单片机通讯上,大大节省了开发时间; 方案二: 1. 工程属性选用FreeProtocol协议; 2. 3. 打开控制令编辑器(设定—>宏指令—>宏指令编辑器)或者直接按F8; 4. 新增宏指令,在宏指令里面使用到Output()、Input()、SetWordData()、GetWordData()这四个函数;注:可以参考附一 5. Output()函数,把设定好的字符串发送到相应的串口输出;Input()函数,从设定好的串口读取需要的字符串; 6. 采集显示: SetWordData()函数,把Input()函数接收回来的数据,发送给HIM用户自定义寄存器里,然后在显示控件里填上已经有数据的HIM寄存器,即可显示单片机采集上来的数据; 7. 改写发送: 在显示控件了把需要改写的数据绑定HIM寄存器,使用GetWordData()获得修改后的数据,通过output()发送把数据发送到单片机; 附一: Output(); 【描述】 **个参数channel表示通道,如果通道为com1,则channel=1;如果通道为com2,则channel=2,数据类型为int。 *二个参数pString表示从通道输出的字符串的地址,数据类型为unsigned char *。 *三个参数count表示字符串中的字符个数,数据类型为int。 *四个参数result表示Output函数运行后返回的结果,如果result大于0,则表示读写有效,数据类型为int。 注意:此函数只能用在freeprotocol(自由协议通道)中。 【用法】 Output(channel,pString,count,result); 【举例】 char srt[9]; int result; Output(1,str[0],9,result); Input(); 【描述】 **个参数channel表示通道,如果通道为com1,则channel=1;如果通道为com2,则channel=2,数据类型为int。 *二个参数pString表示写入通道的字符串的地址,数据类型为unsigned char *。 *三个参数count表示字符串中的字符个数,数据类型为int。 *四个参数result表示Output函数运行后返回的结果,如果result大于0,则表示读写有效,数据类型为int。 注意:此函数只能用在freeprotocol(自由协议通道)中。 【用法】 Input(channel,pString,count,result); 【举例】 char srt[9]; int result; Input(1,str[0],9,result); GetWordData(); 【描述】 函数功能:从通道中读取Word数据。 **个参数channel表示通道,数据类型为unsigned char。 *二个参数slaveID表示从机号,数据类型为unsigned char。 *三个参数address表示系统通道地址,数据类型为unsigned short。 *四个参数count表示要读出的字的个数,数据类型为unsigned short。 *五个参数表示命令号,数据类型为unsigned char。 *六个参数pValue用来保存从系统通道读出的count个字,数据类型为unsigned short *。 【用法】 GetWordData(channel,slaveID,address,count,cmd,pValue); 【举例】 unsigned short wordData[10]; GetWordData(0, 1,8000, 10, 0,wordData); 从系统通道 8000地址中读取10个数据到wordData SetWordData(); 【描述】 函数功能:从通道中写入一个Word数据。 **个参数channel表示通道,数据类型为unsigned char。 *二个参数slaveID表示从机号,数据类型为unsigned char。 *三个参数address表示系统通道地址,数据类型为unsigned short。 *四个参数cmd表示命令号,数据类型为unsigned char。 *五个参数pValue用来保存写入系统通道的字,数据类型为unsigned short。 【用法】 SetWordData(channel,slaveID,address,cmd,source); 【举例】 unsigned short wordData = 1; SetWordData(0, 1,1000,0,wordData); 把wordData中的Word数据写到系统通道 1000地址处 附录二: 使用自由协议来模拟modbus-RTU //COM1:freeprotocol //COM2:modbus-RTU /*自由协议通道采集数据存放在系统通道,在界面显示 modbus通道采集到的数据,处理后,发送到自由协议的设备上*/ unsigned char command[32]; unsigned char response[32]; unsigned char temp1,temp2; unsigned short address, checksum; unsigned short read_no, return_value1, return_value2,return_value3,read_data[2], i; unsigned short com2_data; /****************以上是新建需要使用的变量***********/ Fill(command, 0, 32);// initialize command[0]~command[31] to 0 Fill(response, 0, 32); //把command 和response 初始化 command[0] = 0x1;// 设置发送字符窜的**个数据 station number command[1] = 0x3;// 设置发送字符窜的*二个数据 read holding registers (function code is 0x3) address = 0;// starting address (4x_1) is 0 HiByte(address, command[2]);//设置发送字符窜的*三个数据 LoByte(address, command[3]);//设置发送字符窜的*四个数据 read_no = 2;// the total words of reading is 2 words HiByte(read_no, command[4]);//设置发送字符窜的*五个数据 LoByte(read_no, command[5]);//设置发送字符窜的*六个数据 CRC(command, 6,checksum);// calculate 16-bit CRC LoByte(checksum, command[6]); //设置发送字符窜的*七个数据 HiByte(checksum, command[7]); //设置发送字符窜的*八个数据 Output(1,command,8, return_value1); //把设置好的8个数据,从通讯口1发送出去,具体参数设置参考Output()使用 Input(1,response,9,return_value2); //从通讯口1等待接收9个字符数据,并且放在response[0]~response[8],具体参数设置参考Intput()使用 CRC(response, 7,checksum); //对采集上来的9个数据中前7个进行了CRC-16校验,校验结果存放在checksum LoByte(checksum, temp1); //把checksum的低8位放在temp1 HiByte(checksum, temp2); //把checksum的高8位放在temp1 if(temp1==response[7]&&temp2==response[8])