- 博客(223)
- 资源 (15)
- 收藏
- 关注
原创 C语言中的回调函数 和 函数指针
c 语言中,括号除了表示优先级,还可以作位函数调用运算符。所以fp是个指针,指向函数。找到变量名fp 向右看 是个右括号,向左看,是个*号,说明fp是个指针。但冒泡排序只能实现从小到大排序,如果想实现从大到小排序,难道就要重写sort函数了吗。sort2中添加了函数指针 int (*p)(int,int), 且函数比较由。可以用函数指针 作为回调函数传入,避免修改函数的麻烦。fp右侧是个函数,函数的参数只有一个,类型为int。没有修改sort函数 就实现了冒泡排序的逆序。再向左看 函数的返回值是。
2023-01-17 01:14:51
620
原创 SMT32串口使用中断 和使用 RTOS的对比
其主要作用就是判断是哪个串口产生中断,清除中断标识位,然后调用中断回调函数 HAL_UART_RxCpltCallback()。中断服务函数里面就调用了串口中断处理函数 HAL_UART_IRQHandler()USART1 中断的服务函数 USART1_IRQHandler()在rots中如此定义,也可以达到类似的效果。用cubemx配置时钟,串口,中断和RTOS。这就完成了串口中断的程序。STM32的中断在文件。
2023-01-15 21:29:51
1289
原创 用 Optional.ofNullable 避免java出现空指针异常
java屏蔽了指针,但是空指针是个例外。java8 加入了Optional,可以更优雅的避免空指针异常。方式2:虽然也出现了空指针,但是直接跳转到了 new Field[]{} 避免了空指针。
2023-01-05 00:02:04
28
原创 西门子1500/1200 PLC中,使用AT指令交换字节顺序与 SCL中使用 .%X 的不同
众所周知,西门子为大端存储,存储位置先从高字节开始。如16#01 如果存入MW10中,则1 存入MB11中,MB10中是10.本程序的作用是,用两种方法将MB10与MB11中存储数据交换位置。可以看到,西门子确实为大端存储,用序列化指令serialize也可以证明这一点。AT指令用for循环确实可以交换字节顺序。用一个交换大小端的程序说明使用AT指令交换字节顺序与 SCL中使用 .%X 的不同。首先,在博途中是可以继续使用AT指令的。定义一个变量,在保持中设置 “在 IDB 中设置”
2022-12-15 02:19:21
352
1
原创 使用modbusTCP给西门子PLC传输字符串
modbus的报文是16进制数,PLC使用word(16位)或者int(16位)类型能接收到modbus的16进制数报文。在PLC中,可以用以下方法把word/int解析为String类型。代码:先用序列化命令Serialize将 “GunData”.ushorts 解析为"GunData".bytes,即word数组解析为byte字节数组。最后使用命令Chars_TO_Strg 将字节数组解析为字符串。Chars_TO_Strg 参数定义如下:附带上我的C# modbus通信库,基于Nmodbus封
2022-12-06 22:14:33
376
原创 在C# 和Java中,利用反射处理S7协议读取西门子PLC的变量
在C#和java中,有开源通信库NetS7Plus和S7Connector提供后台与PLC的通信。由于这两个库都提供了连续读取的方法。以java为例,按偏移量读取Db块中的数值:读取的变量为类中的字段,但是实际情况中,我们往往需要各个变量的采集时间,报警值,缩放比例,中文名等,例如这样的格式的变量,这时就需要我们把第一个类class MyS7Entity中的字段映射到class ActualData中,这时就可以利用反射特性快速映射:通信帮助类:C#的对应代码:使用springboot当后
2022-12-06 15:11:20
154
原创 Springboot使用s7connector 实现对西门子PLC数据读写
【代码】Springboot使用s7connector 实现对西门子PLC数据读写。
2022-11-17 16:35:47
436
2
原创 C# 联合KepServer对PLC进行数据读写
KepServer可以将任何工业设备的通信协议转换为opc协议,然后用OPCAutomation进行上位机数据读写。
2022-07-17 17:28:53
1262
KepServer可以将任何工业设备的通信协议转换为opc协议,然后用OPCAutomation进行上位机数据读写。
2022-07-17
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人